Opengl表面渲染问题

时间:2013-09-20 17:08:20

标签: c++ opengl 3d rendering

我刚开始加载一些obj文件并用opengl渲染它。当我渲染这些网格时,我得到了这个结果(见图片)。 我认为它有某种深度问题,但我不能自己弄明白。 这是渲染的参数:

    // Dark blue background
glClearColor(0.0f, 0.0f, 0.4f, 0.0f);

// Enable depth test
glEnable( GL_DEPTH_TEST );

// Cull triangles which normal is not towards the camera
glEnable(GL_CULL_FACE);

我使用此教程代码作为模板。 https://code.google.com/p/opengl-tutorial-org/source/browse/#hg%2Ftutorial08_basic_shading enter image description here enter image description here

2 个答案:

答案 0 :(得分:5)

问题很简单,你正在做FRONT或BACK剔除。

目标文件包含CCW(Counter-Clock-Wise)或CW(Clock-Wise)坐标,因此从左到右或从右到左书写。 你的openGL代码期望它反过来,所以它隐藏了你向后看的表面。

要检查这是否可以解决您的问题,只需取出glEnable(GL_CULL_FACE);即可 因为这似乎正在产生问题。

此外,您可以使用glCullFace(ENUM);,其中ENUM必须为GL_FRONTGL_BACK。 如果你没有,至少有两种情况都看不到你的网格(两种情况都意味着:GL_FRONTGL_BACK你只看到部分网格物体),这就是你的代码的问题解释.obj。或.obj使用不严格的表面向量。 (CCW和CW的混合)

答案 1 :(得分:3)

我实际上不确定你的意思,不过glEnable(GL_CULL_FACE);然后是GL_CULL_FACE(GL_BACK);将剔除或移除对象的背面。这大大减少了渲染对象时的滞后,只有在你内部或后面时才会有所不同。对象。

另外,您是否尝试过glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);在渲染代码之前?