我有一个三个场景,有几个网格(平面)都有透明材质。渲染器已打开透明度,您可以判断是这种情况,因为/tmp
具有蓝色到黑色的渐变样式。
<body>
这是我创建平面几何的方法:
<body style="background: linear-gradient(to bottom, #1e5799 0%,#000000 100%);">
然后旋转它们使它们相交。
请注意,在某些地方,它们被合成,使得两种材料混合在一起,但在其他地方,一个平面的一部分遮挡了另一个的一部分。我的理解是,一架飞机被认为是前面的#34;另一个平面决定了它们的绘制顺序。但是,为什么有透明度的平面遮挡了另一个?。
是的,即使无法在正确的顺序中绘制相交的平面,我仍然期望它们合成不正确,但它们被遮挡了。< / p>答案 0 :(得分:3)
在您的材质上设置depthWrite为false:
material.depthWrite = false;
当您将其设置为false时,材质不再对深度缓冲区产生任何影响。对不起,我无法进一步解释,这只是个人经历。
Three.js r73
答案 1 :(得分:2)
简短的回答是深度测试和alpha混合不能很好地协同工作。如果先绘制的四边形更接近,则将为整个四边形区域写入深度缓冲区,而不管alpha值如何。之后绘制的颗粒进一步未通过深度测试,因此不会被绘制。
对此的部分解决方案通常是片段着色器中的alpha测试。 If (color.a < 0.01) {discard;}
或禁用深度测试。
答案 2 :(得分:0)
使用材质alphaTest
属性删除这些工件。