簡體   English   中英

保存多個實例數據的最佳方法

[英]Best way to save data of many instances

我有一個粒子系統,為此我渲染(例如1個粒子效果)帶有紋理的100個四邊形。 如果我添加多個粒子效果,則它會滯后,因為每個粒子都有其自己的垂直度(2f矢量),位置(3f vec)等...(矢量來自LwJGL)

結果,每個實例意味着5或6種數據類型。 現在我的問題是:

有沒有一種方法可以使它變得更好,以便不是每個實例都有5個新向量? (而且,我知道創建粒子系統還有許多其他更好的方法,但是我選擇的這種方法很簡單,我可以練習“性能提升”。)

好的,因此,我將參考此代碼 ,您可能會從中受到啟發。

我還假設您至少具有GL 3.3配置文件。

從理論上講,要充其量進行優化,您應該在GPU上移動Map<ParticleTexture, List<Particle>> particles (使用紋理圖集),並且每幀僅上載變化的數據,例如camera 但這一步很難做到,所以我建議您通過在gpu上一次移動一件事來逐步修改當前算法。

一些觀察:

  • prepare()finishRendering() ,啟用第i個VertexAttribArray是vao的一部分,如果您綁定/取消綁定vao,就足夠了。 可以刪除glEnableVertexAttribArrayglDisableVertexAttribArray
  • 使用統一緩沖區,不要單獨擁有所有這些統一的緩沖區。
  • loader.updateVbo()非常昂貴 ,它在每次render時都創建一個FloatBuffer並在復制數據之前清除緩沖區。 您應該只分配一次float []FloatBuffer ,重用它,然后簡單地調用glBufferSubData ,避免使用glBufferData

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM