2011-03-25 88 views
2

我正试图移除围绕其自身对角轴旋转的立方体上的隐藏表面以及围绕一般的y轴。隐藏表面删除C++

我使用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功能不允许的。)

+0

我的视图向量是(0,0,20)?我是否也应该考虑其他向量来查找视图向量,我将与法向向量交叉产生? – Sammy 2011-03-25 10:37:12

+0

我没有OpenGL可玩,但我看到4个问题:1)你不会说结果有什么问题,2)你似乎不知道你的相机和对象在哪里,或者是什么视图向量是,3)你正试图优化一些还没有工作的东西*(一个经典的),4)你的'CalculateVectorNormal'不遵循数学约定,所以结果是它应该是的负面因素(应该('2'-'1')×('3'-'2'),而不是('3'''''')('2'''''')。 – Beta 2011-03-25 12:38:41

回答

0

法线是一个向量,而不是一个标量。您应该计算X,Y Z的零部件并返回。

您需要减去摄像头的位置(并反向应用其旋转)在计算矢量之前的脸部坐标。然后,在点之一和计算的法线之间做一个点产品,以找出面部的角度。如果角度小于零,则它背向摄像机视点,并且可以被剔除。

+0

@Tomalak非常感谢你,但我已经知道如何计算法向量。我使用的是标量,因为我认为法线向量中的-x和-y值为零,这将使交叉乘积零中的x和y值成为零。 – Sammy 2011-03-25 10:44:36

+0

@Sammy:你为什么这么想?我敢打赌你错了。这可能是为什么它失败... – 2011-03-25 10:52:31

+0

@Tomalak我猜:) – Sammy 2011-03-25 10:54:42