【问题标题】:GL_CULL_FACE makes all objects disappearGL_CULL_FACE 使所有对象消失
【发布时间】:2012-03-22 22:06:51
【问题描述】:

我正在尝试在 openGL3.3 中创建一些简单的多边形。我有 2 种具有以下属性的对象:

对象 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。 Object2 使用glm::scale(20, 20, 0) 进行缩放。

当我尝试在禁用GL_CULL_FACE 但启用GL_DEPTH_TEST 并启用glDepthFunc(GL_LESS) 来渲染这些时,一切正常。一旦我尝试启用GL_CULL_FACE,我得到的只是一个空白窗口。

其他一些有用的信息:
- 渲染顺序 = 4 个 Object2,后跟 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 在过去几天里不起作用但不知道。非常感谢任何帮助。

【问题讨论】:

    标签: opengl glsl 3d opengl-3


    【解决方案1】:

    这几乎总是由于多边形法线方向(每个三角形的三个顶点的右手定则)

    尝试使用以下方法切换方向:

    glCullFace(GL_BACK 或 GL_FRONT)

    更多阅读here

    【讨论】:

      【解决方案2】:

      您指定了哪个剔除方向?当你创建一个多边形时,你会相对于相机的视点顺时针或逆时针“缠绕”顶点,你必须告诉 OpenGL 它应该剔除哪种类型。

      您可能已经知道,背面剔除是为了隐藏背对相机的多边形,所以如果您有顺时针缠绕的面,这意味着当面对相机时顶点顺时针排列,逆时针背对,所以你告诉 OpenGL 剔除逆时针多边形。

      我怀疑您正在剔除要查看的多边形:GL_BACK 是默认设置,因此将模式切换到 GL_FRONT 应该可以工作。 See the documentation for more info: http://www.opengl.org/sdk/docs/man/xhtml/glCullFace.xml

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-02
        • 1970-01-01
        • 1970-01-01
        • 2015-03-20
        • 1970-01-01
        • 2010-09-05
        • 1970-01-01
        • 2012-01-12
        相关资源
        最近更新 更多