2012-11-16 101 views
7

我正在使用GWT-G3D庫中的WebGL吸引着大批向無環圖工作了3D樹型結構按技術所示:http://www-graphics.stanford.edu/papers/h3/在繪製WebGL的

在這一點上,我有一個簡單的兩級圖形渲染:

enter image description here

性能是可怕的 - 它需要大約1.5-2秒來渲染這件事。我不是OpenGL專家,所以這裏是我正在採用的一般方法。也許有人可以指出一些優化,這將使渲染更快。

enter image description here

我感到驚訝需要多長時間到模型視圖矩陣和緩衝區推到顯卡。這是大部分時間浪費的地方。我應該在頂點着色器中進行MODELVIEW轉換嗎?

這使我相信,操縱模型視圖矩陣,將其推一次,每個節點不應該是一個不好的做法,但計時不會說謊:

https://gamedev.stackexchange.com/questions/27042/translate-the-modelview-matrix-or-change-vertex-coordinates

+0

你怎麼火候?時間做謊言。一些瀏覽器是並行的,所以時機很難。無論如何,你說每幀需要1.5到2秒? 我不太明白你在做什麼,但與24個立方體所有父一些中心簡單的場景圖應在60Hz就好運行。你(1)着色器編譯一次,而不是在渲染循環(2)不調用渲染循環任何glGet的功能呢? (3)只上傳一次頂點數據,而不是渲染循環中?希望那些不是愚蠢的問題,但你應該能夠以合理的速度繪製大約1000個立方體。 – gman

回答

2

組節點較大而不是單獨渲染它們。使用最有可能不會被修改的應用轉換對所有幾何進行背景緩存,並將其存儲在一個緩衝區中並在一次調用中呈現。

另一種解決方案:在一個緩衝存儲節點(盒+線)(您可以存儲比你更需要在當前時間)和它們的質地轉變。在基於節點索引(紋理座標)的頂點着色器中應用變換它應該快得多,速度更快。

爲了測試支持使用this site。我有MAX_VERTEX_TEXTURE_IMAGE_UNITS | 4

最好的解決方案將是Geometry Instancing,但目前不支持WebGL的。

+0

是不是有一個lib,它可以通過渲染組中的節點來提供幫助? Afaik d3也被canvas使用(不僅僅是SVG),它對於這個目的是否有用? – inf3rno