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

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 来测试混合应用程序吗?

混合精度训练

OpenGL 四 - 002OpenGL 图形渲染之颜色混合

混合云架构是否有助于平衡本地和云服务提供商

DirectX11 Without DirectX SDK--14 深度测试