2017-05-31 25 views
0

我正在重寫一個早期版本Three.js幾年前創建的遺留可視化文件。可視化是〜20k 2D圓圈(從圖表中的節點)在屏幕上繪製的位置和着色已經確定。在Three.js中使用精靈或BufferedGeometry更高效嗎?

除了發生互動(縮放,點擊等)時,沒有動畫參與。前面的作者用圓圈(節點)的精靈來顯示不同的狀態(節點選擇:發光效果,隱藏節點:透明等)

我已經能夠成功地使用CircleBufferGeometry而不是精靈。

我知道這是可能過於含糊的一個問題,因爲它可能是過於具體到我的使用情況,但我想知道如果任何人有任何深入瞭解它是否更高性能的渲染〜20K精靈或〜20K CircleBufferGeometry與Three.js/webgl。

謝謝!

+1

在您的特定用例中嘗試每個用例,對它們進行基準測試並對它們進行比較。 – Adrian

+0

@Adrian讓我們看看這個stackoverflow問題如何,然後也許我會!我希望Three.js專家或者具有先前知識的人可以在我走下那條路之前幫助我... –

回答

2

CircleBufferGeometry除了精靈之外,每個實體都會有更多的頂點,因爲精靈應該用gl.POINTS(一個點==一個頂點)繪製。你的頂點着色器會用圓處理更多的頂點,而不是使用精靈。

+0

除此之外,還可以在'THREE.Points'中使用'THREE.BufferGeometry',即1點= 1個頂點。使用'THREE.PointsMaterial'你可以傳入一個帶有'map'屬性的精靈。 –

+1

'InstancedBufferGeometry'也可以使用。在一次繪製調用中渲染20k點將比在20k調用中渲染20k個網格更高的性能。我並沒有考慮這裏的開銷,每個人都在想20k個電話。你認爲答案應該更新以澄清? – pailhead

+0

如果所有點的屬性與實例相比保持相同將是有益的,但是他確實提到能夠改變透明度和改變狀態,所以我認爲他需要'BufferGeometry'來修改單個點。無論哪種方式,我認爲值得澄清的是'CircleBufferGeometry'並不是理想的路線。 –