禁用透明对象深度测试的解决方法?
Posted
技术标签:
【中文标题】禁用透明对象深度测试的解决方法?【英文标题】:Workaround of disabling depth testing for transparent objects? 【发布时间】:2017-01-17 18:00:27 【问题描述】:在场景中我只有透明对象,因此启用深度测试会导致对象相互隐藏。我知道深度测试不考虑任何透明度,它只是写入深度缓冲区查看z
的值。那么如何正确渲染两个透明物体呢?
我这样做了renderer.context.disable(renderer.context.DEPTH_TEST);
,但没有任何改变
我的具体问题的说明:
立方体是MeshLambertMaterial(color: ..., transparent: true, opacity: 0.6)
飞机是MeshLambertMaterial(color: ..., transparent: true, opacity: 0.4)
立方体是在平面之后渲染的,但如果立方体是不透明的,那么整个立方体将被正确渲染而没有任何丢弃(还要查看它们也是不透明的点,因此是可见的)。
那么如何让它考虑透明度并且不关心渲染顺序以便两个透明对象不会相互隐藏?
【问题讨论】:
【参考方案1】:在three.js中,可以通过设置关闭深度测试
material.depthTest = false;
如果您在更改相机位置时出现伪影,请不要感到惊讶。
您可能还想阅读this answer。
three.js r.80
【讨论】:
哦,是的,我在旋转相机时也有一些伪影,但仅限于 chrome 和场景中的任何照明。以上是关于禁用透明对象深度测试的解决方法?的主要内容,如果未能解决你的问题,请参考以下文章
我的OpenGL学习进阶之旅关于OpenGL ES 开启深度测试,直接黑屏的问题的解决方法
我的OpenGL学习进阶之旅关于OpenGL ES 开启深度测试,直接黑屏的问题的解决方法
三.js:分层和解决z-fighting更有效:使用polygonOffsetFactor或禁用depthWrite的透明度?