3d - 为什么透明 Material 会导致遮挡?

标签 3d three.js

我有一个 Threejs 场景,其中有多个网格(平面),所有网格都具有透明 Material 。渲染器已打开透明度,您可以看出是这种情况,因为 <body>具有蓝到黑的渐变样式。

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

以下是我创建平面几何图形的方法:

const geometry = new THREE.PlaneBufferGeometry( 15, 15, 1 );

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

请注意,在某些地方,它们被合成为两种 Material 混合在一起,但在其他地方,一个平面的一部分遮挡了另一个平面的一部分。我的理解是,一个平面被认为位于另一个平面的“前面”,这决定了它们的绘制顺序。但是,为什么一个透明的平面会遮挡另一个平面呢?

即,即使不可能以正确的顺序绘制相交平面,我仍然期望它们不正确地合成,但相反,它们被遮挡了。

screenshot

最佳答案

在你的 Material 上将深度设置为 false: material.depthWrite = false;

当您将其设置为 false 时, Material 不再对深度缓冲区产生影响。很抱歉我无法进一步解释这一点,这只是个人经历。

Three.js r73

关于3d - 为什么透明 Material 会导致遮挡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33571642/

相关文章:

c++ - DirectX - CreateDeviceAndSwapChain 返回 E_INVALIDARG

json - React-Three-Fiber (R3F) : GLTF loader loading issue. 为什么我看不到我的模型?

three.js - 清理 Threejs WebGl 上下文

3d - 三js : optimize vertices and faces

algorithm - 限制拖动到对象的局部轴

java - 如何将 3D 查看器插入到 .obj 文件的 Java 应用程序中?

Three.js 将对象设置在另一个对象的本地坐标系中

javascript - 自定义几何体和面法线的问题

javascript - THREE.JS 置换贴图不影响阴影

python - openGL(pyglet) 3d 场景无法在 AMD 显卡上正确渲染