【发布时间】:2017-05-30 21:00:23
【问题描述】:
我有一个按模型渲染场景模型的 Opengl 应用程序。
如果我先在前面渲染一个模型,然后在后面渲染一个模型,那么后面的模型是否会被绘制到前面模型顶部的显示器上?
【问题讨论】:
我有一个按模型渲染场景模型的 Opengl 应用程序。
如果我先在前面渲染一个模型,然后在后面渲染一个模型,那么后面的模型是否会被绘制到前面模型顶部的显示器上?
【问题讨论】:
OpenGL 完全按照您发出命令的顺序处理所有命令。这意味着,如果您先绘制前面的模型,然后在后面绘制模型,则默认情况下,第二个模型会覆盖第一个模型。
如果您只想绘制实际在前面的部分,则必须启用depth testing (glEnable(GL_DEPTH_TEST);)。这确保了只有这样的像素被写入到比已经存储的更靠近查看器的后备缓冲区。请注意,此方法仅适用于非透明对象。
【讨论】:
这取决于您是否启用了深度测试。如果启用了深度测试*,则绘制对象的顺序与显示的最终场景无关**。因此,只要在您的setup_gl 或您用于初始化场景的任何函数中,在绘制之前调用glEnable(GL_DEPTH_TEST);,您就不必考虑顺序。
* 并且您没有使用glDepthFunc 或一些类似功能更改深度测试功能。如果你有,(这通常只推荐给需要专门功能的人,所以对你来说,你不应该),深度测试会表现出不同的行为。
** ... 除非您使用透明对象,在这种情况下,您需要在着色器中实现 [昂贵的] 顺序无关透明算法,或者绘制顺序 会 很重要(通常,为了透明度,你需要从后到前画)。
【讨论】: