禁用透明对象深度测试的解决方法?
Workaround of disabling depth testing for transparent objects?
在场景中我只有透明物体,因此启用深度测试会导致物体相互隐藏。我知道深度测试不考虑任何透明度,它只是写入深度缓冲区以查看 z
的值。那么如何正确渲染两个透明物体呢?
我这样做了renderer.context.disable(renderer.context.DEPTH_TEST);
但没有任何改变
我的具体问题的说明:
立方体是MeshLambertMaterial({color: ..., transparent: true, opacity: 0.6})
飞机是MeshLambertMaterial({color: ..., transparent: true, opacity: 0.4})
立方体在平面之后渲染,但如果立方体是不透明的,那么整个立方体将被正确渲染而不会被丢弃(还要查看它们也是不透明的点,因此可见)。
那么如何让它既考虑透明度又不关心渲染顺序,使两个透明对象不相互隐藏?
在three.js中,您可以通过设置
关闭深度测试
material.depthTest = false;
如果您在更改相机位置时出现伪像,请不要感到惊讶。
您可能还想阅读 this answer。
three.js r.80
在场景中我只有透明物体,因此启用深度测试会导致物体相互隐藏。我知道深度测试不考虑任何透明度,它只是写入深度缓冲区以查看 z
的值。那么如何正确渲染两个透明物体呢?
我这样做了renderer.context.disable(renderer.context.DEPTH_TEST);
但没有任何改变
我的具体问题的说明:
立方体是MeshLambertMaterial({color: ..., transparent: true, opacity: 0.6})
飞机是MeshLambertMaterial({color: ..., transparent: true, opacity: 0.4})
立方体在平面之后渲染,但如果立方体是不透明的,那么整个立方体将被正确渲染而不会被丢弃(还要查看它们也是不透明的点,因此可见)。
那么如何让它既考虑透明度又不关心渲染顺序,使两个透明对象不相互隐藏?
在three.js中,您可以通过设置
关闭深度测试material.depthTest = false;
如果您在更改相机位置时出现伪像,请不要感到惊讶。
您可能还想阅读 this answer。
three.js r.80