2011-03-25 152 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