粒子系统中的BufferGeometry的Z缓冲问题

时间:2013-09-06 12:04:37

标签: javascript three.js particle-system

在我的应用程序中,我遇到了z-buffer的麻烦。我有一个粒子系统,其中点的纹理看起来像球体。但是有两个问题我无法同时解决....

这些球体是在z缓冲区中正确排序但是不透明或它们是透明的但是没有正确排序!

请查看我的JSfiddle。 (基于mrdoob的this example

在最初的例子中,一切看起来都很好。但正如你可以在我的小提琴中看到的那样,纹理不是透明的,所以隐藏了粒子的一部分。我只是从Geometry更改为BufferGeometry,因为在我的应用程序中,我必须使用它来避免性能问题。你可以通过改变我在小提琴中的评论来切换这两者。通过在GeometryBufferGeometry之间切换,您可以看到z缓冲区正在崩溃。

在互联网的某个地方,我找到了这个“解决方案”:

depthWrite : false

我添加到材料中。然后粒子看起来很棒但是z缓冲区不正确。 这让我发疯了......无论如何,我发现我的几何类型就是问题。

那么为什么mrdoob的例子不适用于BufferGeometry?我该怎么做才能在我的系统中获得正确的排序和透明粒子?

1 个答案:

答案 0 :(得分:0)

你很困惑。纹理是透明的,并在切换到BufferGeometry时保持不变。

发生了什么,是BufferGeometry,粒子不按排序顺序呈现 - 它们按照您在缓冲区中指定的顺序呈现。

如果您想使用BufferGeometry,可以设置

material.alphaTest = 0.5.

然后,在你的情况下,事情应该看起来很好。

three.js r.60