2014-03-28 79 views
3

我真的很喜欢在threejs示例中找到gpgpu demo。在玩着色器时,试图构建一个粒子模拟器,我很快注意到我不需要手动更新纹理统一来改变粒子的位置。 我开始下载示例代码,并发现以下行似乎是多余的:threejs - gpgpu/rtt示例冗余行

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

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

现在我不知道还有什么地方这些值设置代替,可能有人用threejs更广泛的理解告诉我在哪里看?虽然我的应用程序工作完美到目前为止,它真的让我感到困惑,我不明白为什么...

编辑:有没有办法找出何时/哪里制服正在更新threejs?试图记录各自材质的制服总是返回null。是否有可能在不使用shadermaterial的情况下更新着色器的制服?

回答

0

看来该示例被重构为隐藏SimulationRenderer中的一些GPGPU实现细节 - 特别是乒乓 - 并且在主体中还有一些遗留代码。实际上,birdUniforms未被使用。

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

three.js r.66

+0

哎!感谢您的回答!事实上,制服可以一起被排除在外。 birdVS-shader内部的两个sampler2D制服仍在从某处进行更新。然而,在SimulationRenderer中,我没有找到引用birdVS Shader的代码。我还发现,更改birdVS Shader内的制服名称完全不会影响功能。或者我没有看到什么? – cacahuananche

+0

我同意你,这是完全奇怪的... – WestLangley

+0

@cacahuananche我也这样做 - 重命名制服的名字。不能为我的生活弄清楚什么是更新这些位置和速度。 birdVS如何知道模拟中的更新? – Jared