2015-06-25 28 views
0

我有一個PointCloud叫做「雲」,以(0,0,0)爲中心,有大約1000個頂點。頂點的位置使用頂點着色器進行更新。我現在想要在渲染循環中每隔幾秒鐘將每個頂點的位置打印出來。Three.js PointCloud頂點總是返回(0,0,0)位置

如果我在渲染循環使用

console.log(cloud.geometry.vertices[100]) 

檢查點雲的頂點,我總是得到的都是零,這一點我可以從所有的粒子看到荏苒周圍是不正確的頂點。

我看着這個類似的帖子:How to get the absolute position of a vertex in three.js?,並試圖

var vector = cloud.geometry.vertices[100].clone(); 
vector.applyMatrix4(cloud.matrixWorld); 

這還是給了我所有的零向量(所有頂點)。使用scene.matrixWorld代替cloud.matrixWorld也不起作用。

我也試過使用cloud.updateMatrixWorld()scene.updateMatrixWorld()。最後,我嘗試設置cloud.geometry.vertexNeedsUpdate = true

到目前爲止,我見過的所有建議都使用了上述內容,但它們都不適合我。我有一種感覺,這個數組並沒有得到正確的值,但我不知道這是爲什麼。有任何想法嗎?

回答

0

這是因爲頂點不會在cpu上改變它們的屬性,而只會在GPU(頂點着色器)上改變它們的屬性。 這是一張單程票,通訊轉到cpu - > gpu而不是相反。

如果您需要使用頂點位置,那麼您必須在CPU上進行計算,並在每次更改回GPU時發送頂點批處理。

+0

我想知道這件事。非常有意義。謝謝。 – tschie

相關問題