Opengl渲染订单

时间:2017-05-30 21:00:23

标签: c++ opengl render

我有一个Opengl应用程序,可以按模型渲染场景模型。

例如,如果我先在前面渲染一个模型,然后在后面渲染一个模型,那么后面的模型会被吸引到前面模型顶部的显示器上吗?

2 个答案:

答案 0 :(得分:0)

OpenGL按照您发出的顺序处理所有命令。这意味着如果您在后面绘制前模型然后绘制模型,则第二个模型将默认覆盖第一个模型。

如果您只想绘制实际面前的部分,则必须启用depth testingglEnable(GL_DEPTH_TEST);)。这确保了仅将这样的像素写入比已经存储的更靠近观看者的后备缓冲器。请注意,此方法仅适用于非透明对象。

答案 1 :(得分:0)

这取决于您是否启用了深度测试。如果启用深度测试 * ,则绘制对象的顺序与显示的最终场景 ** 无关。因此,只要在setup_gl或用于初始化场景的任何函数中,在绘制之前,您已调用glEnable(GL_DEPTH_TEST);,则无需考虑顺序。

* 并且您没有使用glDepthFunc或类似功能更改深度测试功能。如果你有,(这通常只推荐给需要专门功能的人,所以对你来说,你不应该),深度测试会表现出不同的行为。

** ...除非您使用透明对象,否则您需要在着色器中实现[昂贵的]与顺序无关的透明度算法,或者绘制顺序< strong> WILL 很重要(通常,为了透明,你需要从前到后绘制)。