2

我刚开始加载一些 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 在此处输入图像描述 在此处输入图像描述

4

2 回答 2

5

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

并且目标文件包含CCW(Counter-Clock-Wise)或CW(Clock-Wise)坐标,因此从左到右或从右到左书写。您的 openGL 代码以相反的方式期待它,因此它隐藏了您向后看的表面。

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

此外,您可以使用glCullFace(ENUM);where ENUM 必须是GL_FRONTGL_BACK. 如果您在这两种情况中的至少一种情况下都看不到您的网格(意味着在这两种情况下:GL_FRONT或者GL_BACK您只看到部分网格),那是您解释 .obj 的代码的问题。或者 .obj 使用不严格的表面向量。(CCW 和 CW 的混合)

于 2013-09-20T17:12:32.073 回答
3

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

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

于 2013-09-20T23:35:22.437 回答