2

我在 C++ 程序中有以下方法:

const f3Vector Rasterizer :: calcBary(const f2Vector &va, const f2Vector &vb, const f2Vector &vc, int x, int y){
float alpha, beta, gamma;

gamma = ((va.y-vb.y) * x + (vb.x-va.x) * y + va.x * vb.y - vb.x * va.y) /
        ((va.y-vb.y) * vc.x + (vb.x - va.x) * vc.y + va.x * vb.y - vb.x * va.y);

beta = ((va.y-vc.y) * x + (vc.x-va.x) * y + va.x * vc.y - vc.x * va.y) /
       ((va.y-vc.y) * vb.x + (vc.x - va.x) * vb.y + va.x * vc.y - vc.x * va.y);

alpha = 1 - beta - gamma;


return f3Vector(alpha, beta, gamma);
}

f2Vector是 a 的 typedef,t2Vector<float>at2Vector是一个 Vector,其元素由 x 和 y 值组成。当我在调试器中执行此操作时,我收到以下消息:

无法将浮点寄存器值转换为非浮点类型。

用于计算gammabeta。具体的输入参数是

va.x = 274.0276 | va.y = 249.23909

vb.x = 282.0854 | vb.y = 332.82899

vc.x = 161.1564 | vc.y = 311.15881

来自调试器的这条消息是什么意思,我应该如何重写我的可能,以便问题不再存在?

编辑

该方法calcBary()由以下函数调用

void Rasterizer :: rasterTriangle(const f2Vector &va, const f2Vector &vb, const f2Vector &vc) {
// compute Bbox
int x_min = int(floor(fmin(va.x, fmin(vb.x, vc.x))));
int y_min = int(floor(fmin(va.y, fmin(vb.y, vc.y))));
int x_max = int(ceil(fmax(va.x, fmax(vb.x, vc.x))));
int y_max = int(ceil(fmax(va.y, fmax(vb.y, vc.y))));


// clipping
if(doClip){
    if(x_max > clipWidth){
        x_max = clipWidth - 1;
    }
    if(y_max > clipHeight){
        y_max = clipHeight - 1;
    }
}



// loop over every pixle in the Bbox
for(int x = x_min; x <= x_max; x++){
    for(int y = y_min; y <= y_max; y++){
        const f3Vector v = calcBary(va, vb, vc, x, y);
        if(0 <= v.x && v.x <= 1 && 0 <= v.y && v.y <= 1 && 0 <= v.z && v.z <= 1 ){
            shader->shadeTrianglePixel(x, y, v);
        }
    }
}

}
4

0 回答 0