是否可以同时使用混合和深度测试?

时间:2017-02-21 17:35:02

标签: opengl

我想这样做:

绘制对象1(因为我应该使用glDrawElement或glDrawArray,应该使用深度测试) 画对象2

混合1和2(obj 1 +透明obj2)

通过简单的伪代码解释,

glEnable(GL_BNELD);

/// draw obj1 ///
glEnable(GL_DEPTH_TEST);
glUniform4f(color1,1.0f);
glDrawElements(...) // draw obj1
glDisable(GL_DEPTH_TEST);

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

/// draw obj2 ///
glEnable(GL_DEPTH_TEST);
glUniform4f(color2,0.5f);
glDrawElements(...) // draw obj2
glDisable(GL_DEPTH_TEST);

glDisable(GL_BLEND);

我听说那些混合和深度测试没有同时使用,那么还有其他选择吗? (实际上上面代码的结果看起来很奇怪)

1 个答案:

答案 0 :(得分:2)

是的,混合和深度测试可以同时使用。如果你想绘制一些半透明的东西,并且被前景中不透明的东西部分遮挡,那么你就需要它。

对于简单深度缓冲渲染的当前技术水平而言,不可能的是顺序无关透明度,即以任意顺序混合对象,其结果等同于绘制它们远到附近。