我想这样做:
绘制对象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);
我听说那些混合和深度测试没有同时使用,那么还有其他选择吗? (实际上上面代码的结果看起来很奇怪)
答案 0 :(得分:2)
是的,混合和深度测试可以同时使用。如果你想绘制一些半透明的东西,并且被前景中不透明的东西部分遮挡,那么你就需要它。
对于简单深度缓冲渲染的当前技术水平而言,不可能的是顺序无关透明度,即以任意顺序混合对象,其结果等同于绘制它们远到附近。