我在 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 值组成。当我在调试器中执行此操作时,我收到以下消息:
无法将浮点寄存器值转换为非浮点类型。
用于计算gamma
和beta
。具体的输入参数是
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);
}
}
}
}