我有一个 Threejs 场景,其中有多个网格(平面),所有网格都具有透明 Material 。渲染器已打开透明度,您可以看出是这种情况,因为 <body>
具有蓝到黑的渐变样式。
<body style="background: linear-gradient(to bottom, #1e5799 0%,#000000 100%);">
以下是我创建平面几何图形的方法:
const geometry = new THREE.PlaneBufferGeometry( 15, 15, 1 );
然后旋转它们以使它们相交。
请注意,在某些地方,它们被合成为两种 Material 混合在一起,但在其他地方,一个平面的一部分遮挡了另一个平面的一部分。我的理解是,一个平面被认为位于另一个平面的“前面”,这决定了它们的绘制顺序。但是,为什么一个透明的平面会遮挡另一个平面呢?。
即,即使不可能以正确的顺序绘制相交平面,我仍然期望它们不正确地合成,但相反,它们被遮挡了。
最佳答案
在你的 Material 上将深度设置为 false:
material.depthWrite = false;
当您将其设置为 false 时, Material 不再对深度缓冲区产生影响。很抱歉我无法进一步解释这一点,这只是个人经历。
Three.js r73
关于3d - 为什么透明 Material 会导致遮挡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33571642/