【问题标题】:threejs - gpgpu/rtt example redundant linesthreejs - gpgpu/rtt 示例冗余行
【发布时间】:2014-05-07 22:46:03
【问题描述】:

我真的很喜欢在threejs 示例中找到的gpgpu demo。在使用着色器并尝试构建一个粒子单元模拟器时,我很快注意到我不需要手动更新纹理制服来更改粒子的位置。 我继续下载示例代码,发现以下几行似乎是多余的:

if (!paused) {
                simulator.simulate( delta );

                birdUniforms.texturePosition.value = simulator.currentPosition;//redundant?
                birdUniforms.textureVelocity.value = simulator.currentVelocity;//redundant?
            }

现在我想知道这些值是在哪里设置的,对threejs有更广泛了解的人可以告诉我在哪里看吗?虽然到目前为止我的应用程序运行良好,但我真的很烦恼,我不明白为什么......

编辑:有没有办法找出在threejs中何时/何地更新制服?尝试记录相应材料的制服总是返回null。甚至可以在不使用 shadermaterial 的情况下更新着色器的制服吗?

【问题讨论】:

    标签: three.js webgl shader gpgpu


    【解决方案1】:

    该示例似乎在某一时刻进行了重构,以隐藏SimulationRenderer 中的一些 GPGPU 实现细节——尤其是乒乓球——并且主体中有一些剩余代码。其实birdUniforms是没有用的。

    也许你可以改进这个例子。

    three.js r.66

    【讨论】:

    • 嘿!感谢您的回答!事实上,制服可以一起被排除在外。 BirdVS-shader 中的两个 sampler2D 制服仍在从某个地方更新。然而,在 SimulationRenderer 中,我没有找到引用 birdVS 着色器的代码。我还发现在birdVS Shader 中更改制服的名称根本不会影响功能,这让我感到困惑。还是我什么都没看到?
    • @cacahuananche 我也这样做了——重命名制服的名字。我一辈子都无法弄清楚是什么在更新这些位置和速度。 BirdVS 到底是如何知道模拟中的更新的?