【问题标题】:Z-buffer issue with BufferGeometry in ParticleSystemParticleSystem 中 BufferGeometry 的 Z 缓冲区问题
【发布时间】:2013-09-10 12:49:32
【问题描述】:

在我的应用程序中,我遇到了 z 缓冲区问题。我有一个 ParticleSystem,其中的点具有看起来像球体的纹理。但是有两个问题我不能同时解决....

要么球体在 z 缓冲区中正确排序但不透明,要么它们是透明但未正确排序!

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

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

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

depthWrite : false

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

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

【问题讨论】:

    标签: javascript three.js particle-system


    【解决方案1】:

    你很困惑。纹理是透明的,切换到BufferGeometry 时仍然如此。

    发生的情况是,使用BufferGeometry,粒子不会按排序顺序呈现——它们会按照您在缓冲区中指定的顺序呈现。

    如果要使用BufferGeometry,可以设置

    material.alphaTest = 0.5.
    

    那么,在你的情况下,事情应该看起来不错。

    three.js r.60

    【讨论】:

    • 谢谢!但现在纹理有人工制品。你能解释一下alphaTest做什么吗?这个技巧似乎只在透视相机中有效。我有第二个正交相机,用于鸟瞰我的系统,但 z 缓冲区仍然错误。我还需要为这台相机做其他事情吗?
    • 如果片段 alpha 小于alphaTest,则不渲染片段。如果您遇到其他问题,您将不得不发布一个新帖子并提供一个现场示例。说它“有工件”或缓冲区“错误”不是描述性的。我回答了您在此处发布的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多