2012-03-22 70 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