2012-03-22 69 views
2

我想在openGL3.3中創建一些簡單的多邊形。我有2種具有以下屬性類型的對象:GL_CULL_FACE使所有的對象消失

對象1 - 10個頂點(在下面列出,按順序)存儲在GL_ARRAY_BUFFER並使用GL_TRIANGLE_FAN

v x y z w 
v 0.0 0.0 1.0 1.0 
v 0.0 1.0 0.1 1.0 
v 0.71 0.71 0.1 1.0 
v 1.0 0.0 0.1 1.0 
v 0.71 -0.71 0.1 1.0 
v 0.0 -1.0 0.1 1.0 
v -0.71 -0.71 0.1 1.0 
v -1.0 0.0 0.1 1.0 
v -0.71 0.71 0.1 1.0 
v 0.0 1.0 0.1 1.0 

對象2 - 4個頂點(在下面列出,在順序)存儲在GL_ARRAY_BUFFER並使用GL_TRIANGLE_STRIP

v x y z w 
v 0.0 0.0 0.0 1.0 
v 0.0 1.0 0.0 1.0 
v 1.0 0.0 0.0 1.0 
v 1.0 1.0 0.0 1.0 

予加載64 Object1的和4 Object2的的。對象2的縮放使用glm::scale(20, 20, 0)

當我試圖呈現這些與GL_CULL_FACE禁用,但GL_DEPTH_TEST啓用glDepthFunc(GL_LESS)一切工作正常。只要我嘗試啓用GL_CULL_FACE,我所得到的只是一個空白窗口。

一些其他有用的信息:
- 渲染順序= 4對象2的後面64 Object1的
- 相機 - glm::lookAt(glm::vec3(0.0f, 0.0f, 50.0f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f));
- 視角 - glm::perspective(45.0f, 16.0f/9.0f, 0.01f, 1000.0f);

我一直在試圖找出爲什麼GL_CULL_FACE不起作用過去幾天卻不知道。任何幫助深表感謝。

回答

4

這幾乎總是由於

嘗試切換使用方向多邊形法線方向(每個三角形的三個頂點的右手定則):

glCullFace(GL_BACK或GL_FRONT)

更多閱讀here

3

您指定了哪個淘汰方向?當你創建一個多邊形時,你可以相對於相機的視點順時針或逆時針「旋轉」頂點,並且你必須告訴OpenGL應該選擇哪種類型。

正如你可能知道,背面剔除是從相機背對隱藏多邊形,所以如果你有順時針纏繞的面孔,這意味着綠黨都是爲了順時針面對攝像機和逆時針時面臨所以你告訴OpenGL剔除逆時針多邊形。

我懷疑你正在剔除你想看到的polys:GL_BACK是默認的,所以將模式切換到GL_FRONT應該可以工作。 See the documentation for more info: http://www.opengl.org/sdk/docs/man/xhtml/glCullFace.xml