为什么透明材料会导致遮挡?

时间:2015-11-06 16:47:17

标签: 3d three.js

我有一个三个场景,有几个网格(平面)都有透明材质。渲染器已打开透明度,您可以判断是这种情况,因为/tmp具有蓝色到黑色的渐变样式。

<body>

这是我创建平面几何的方法:

<body style="background: linear-gradient(to bottom, #1e5799 0%,#000000 100%);">

然后旋转它们使它们相交。

请注意,在某些地方,它们被合成,使得两种材料混合在一起,但在其他地方,一个平面的一部分遮挡了另一个的一部分。我的理解是,一架飞机被认为是前面的#34;另一个平面决定了它们的绘制顺序。但是,为什么有透明度的平面遮挡了另一个?

是的,即使无法在正确的顺序中绘制相交的平面,我仍然期望它们合成不正确,但它们被遮挡了。< / p>

screenshot

3 个答案:

答案 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属性删除这些工件。