OpenGL中的绘制顺序

Posted

技术标签:

【中文标题】OpenGL中的绘制顺序【英文标题】:Draw Order in OpenGL 【发布时间】:2008-12-22 05:42:06 【问题描述】:

我正在渲染一个包含一些位图文本的 OpenGL 场景。据我了解,我绘制事物的顺序将决定哪些项目在最上面。

但是,我的位图文本,即使我是最后绘制的,也不在顶部!

例如,我正在画画:

1) 背景 2) 按钮 3) 文字

所有在相同的 z 深度。按钮在背景之上,但文本是不可见的。如果我改变了文本的 z 深度,我可以看到它,但是我有其他问题。

我正在使用 Nehe's Tutorials 中的位图文本方法。

如何在不改变 z 深度的情况下使文本可见?

【问题讨论】:

【参考方案1】:

您可以通过

简单地禁用 z-test
  glDisable (GL_DEPTH_TEST);  // or something related..

如果您这样做,您的文本基元的 Z 将被忽略。基元的绘制顺序与您调用 gl 函数的顺序相同。

另一种方法是通过 glPolygonOffset 设置一些恒定的 z 偏移量(不推荐)或将深度比较模式设置为 GL_LESS_EQUAL 之类的东西(EQUAL 是重要的)。这样可以确保以相同深度绘制的图元彼此叠加。

希望对您有所帮助。

【讨论】:

是的,为 UI 绘图关闭 z-buffering。 很好的答案——我打算建议都一样! :)【参考方案2】:

您也可以使用 glDepthFunc (GL_ALWAYS)。

【讨论】:

如果您对这个答案投了反对票,请解释它有什么问题。

以上是关于OpenGL中的绘制顺序的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL:渲染具有大量纹理透明度的模型,没有绘制顺序?

OpenGL VBO 绘制顺序

使用 VAO 在 OpenGL 中更改绘制的实例化顺序

Opengl_8_索引绘制

什么是openGL中的顺时针面

绘制球体OpenGL C++