2014-03-28 80 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