【问题标题】:Opengl surface rendering issueOpengl 表面渲染问题
【发布时间】:2013-09-26 03:55:40
【问题描述】:

我刚开始加载一些 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

【问题讨论】:

  • 你清除任何地方的深度和颜色缓冲区吗?
  • 你能显示你的绘制循环代码吗?

标签: c++ opengl 3d rendering


【解决方案1】:

问题很简单,你在做 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 的混合)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多