我刚开始加载一些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
答案 0 :(得分:5)
问题很简单,你正在做FRONT或BACK剔除。
目标文件包含CCW(Counter-Clock-Wise)或CW(Clock-Wise)坐标,因此从左到右或从右到左书写。 你的openGL代码期望它反过来,所以它隐藏了你向后看的表面。
要检查这是否可以解决您的问题,只需取出glEnable(GL_CULL_FACE);
即可
因为这似乎正在产生问题。
此外,您可以使用glCullFace(ENUM);
,其中ENUM必须为GL_FRONT
或GL_BACK
。
如果你没有,至少有两种情况都看不到你的网格(两种情况都意味着:GL_FRONT
或GL_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);在渲染代码之前?