隐藏表面去除C ++

时间:2011-03-25 10:08:06

标签: c++

我正在尝试移除围绕其自身对角轴旋转的立方体上的隐藏曲面,并围绕一般y - 轴。

我正在使用gluLookAt(0, 0, 20, 0, 0, 1, 0, 10, 0)来查看视图。

然而,它并没有完全产生一个移除良好的表面。

我正在通过以下方式计算法线向量:

GLfloat CalculateVectorNormal(GLfloat fVert1[], GLfloat fVert2[], GLfloat fVert3[], GLfloat fNormalZ)
{
GLfloat Qx, Qy, Qz, Px, Py, Pz;

   Qx = fVert2[0]-fVert1[0];
   Qy = fVert2[1]-fVert1[1];
   Qz = fVert2[2]-fVert1[2];
   Px = fVert3[0]-fVert1[0];
   Py = fVert3[1]-fVert1[1];
   Pz = fVert3[2]-fVert1[2];

   fNormalZ = (Px*Qy - Py*Qx);
   return fNormalZ;   
}

我正在检查fNormalZ值是否小于0.我认为我对查看内容犯了错误。我相信我只从-z轴看。这就是为什么我只检查fNormalZ

从那时起,我无法从视野中看到很多视线。

感谢任何帮助。我真的需要一些紧急帮助。 非常感谢你提前。

(作业问题,gl函数不允许。)

1 个答案:

答案 0 :(得分:0)

法线是矢量,而不是标量。您应该计算X,Y Z的组件并返回它。

在计算矢量之前,您需要减去相机位置(并反向应用其旋转)到面部坐标。然后,您可以在其中一个点和计算的法线之间执行dotProduct,以查找面部的角度。如果角度小于零,则它背离摄像机视点,可以剔除。