是否可以同时使用混合和深度测试?
Posted
技术标签:
【中文标题】是否可以同时使用混合和深度测试?【英文标题】:Is it possible to use blending and depth test simultaneously? 【发布时间】:2017-02-21 17:35:01 【问题描述】:我想做这个:
绘制对象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);
听说那些混合和深度测试不能同时使用,那有什么替代方法吗? (实际上上面代码的结果看起来很奇怪)
【问题讨论】:
是的,你可以,但你需要知道你在做什么(以避免伪影)这可能会有所帮助:OpenGL - How to create Order Independent transparency? 【参考方案1】:是的,可以同时使用混合和深度测试。如果您想绘制被前景中不透明的东西部分遮挡的半透明的东西,您将需要它。
目前最先进的简单深度缓冲渲染不可能实现的是顺序无关的透明度,即以任意顺序混合对象,结果相当于将它们从远到近绘制。
【讨论】:
以上是关于是否可以同时使用混合和深度测试?的主要内容,如果未能解决你的问题,请参考以下文章
你可以同时使用 Protractor 和 Appium 来测试混合应用程序吗?