我工作的一個太陽能系統模擬器,我試圖馬上弄清楚怎麼辦尾隨軌道在C++/OpenGL的/ GLSL看上去類似這樣:OGL 4 +/GLSL/C++ - 尾隨行星軌道
問題是我沒有靜態軌道,行星的位置每幀更新一次。
所有行星都來自一個類的實例。我有一個想法如何做到這一點,但不知道它的技術可行性。
請指教(是否改善我的想法或更好的東西)。
概念:
- 有一個VBO與特定的一組頂點數據,比方說8個vertecies如實施例
- 創建IBO描述每個連續點
這個想法是有一個vertess的「跑步機」,其中第一個與行星一起移動:
IBO : [ 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 ]
--------------- ^使GLSL更新在VBO只有第一元件,這意味着在VBO:
VBO : [ v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 ]
------ --------- ^當前頂點更新每個rendercall
- 然後,隨着行星& V1從移動一設定距離d V2
設置最後的頂點位置,下一個軌道位置,即向前推進連鎖:
IBO : [ 8 | 1 | 2 | 3 | 4 | 5 | 6 | 7 ]
--------------- ^當前索引進行更新,這意味着vbo:
VBO : [ v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 ]
----------------------------------------- -------------------------------- ^爲每個rendercall更新當前頂點
這是否使任何意義?我真的很喜歡重複使用vertecies的想法,給他們一輩子(對於褪色),然後..做這個relink?是否有可能在GPU級別操作索引緩衝區?也許我的腦海裏只是徘徊到一個愚蠢的小巷子裏,也許這裏有人有一個更好的主意?
您過度優化。傳遞十幾個頂點組成一個「尾隨軌道線」是事物的宏觀計劃中的一小部分數據,因此每幀將整個緩衝區從CPU傳遞到GPU不會減慢渲染速度(假設你是渲染,10或100行星,而不是數百萬)。是的,你可以用這種方式實現一個循環緩衝區,但增加的複雜性不值得任何性能增益。 – Jherico 2014-09-20 05:19:21
我同意,我轉移到preallocating一個圈子,現在試圖找出如何更新每個位置......這證明是相當困難...... – mike 2014-09-23 21:16:41