對於最新的Ludum Dare比賽,主題是變形,所以我的想法涉及從一個幾何形狀到另一個幾何形狀的簡單變形。如何使用着色器將一個3D對象變形爲另一個3D對象?
所以我做的是我在Blender中用相同的頂點數做了幾個對象。在OpenGL中,我爲每個對象製作了單獨的VAO,併爲「變形」對象製作了一個附加VAO(屬性爲動態繪製)。每一幀,當玩家變形時,我會將當前對象和目標對象之間的插值頂點數據上傳到這個額外的VAO中,然後渲染。否則,只需渲染對象的相應VAO。 變形方法是這樣的:
(頂點有不同的排序,因此變形不是「平滑」)
因爲我很少有時間我只是做了一些快速和骯髒的,但現在我認爲這不是一個很好的方法來完成這個過程,因爲我必須每幀都上傳大量數據到GPU。如果我想要在不同的變形階段繪製多個變形對象,它看起來也不可伸縮。
作爲改進此過程的第一步,我想將這些插值計算轉換爲着色器。 我或許可以將單個VAO中所有對象的數據存儲在單獨的屬性中,然後選擇要從中插入哪些屬性。
但我想知道:有沒有辦法以多種方式發送多個(兩個)對象/緩衝區到着色器,以及插值率統一,然後在着色器中我會進行插值?
創建一個同時包含兩個對象的緩衝區 – teivaz
@teivaz在我只有一個變形對象的情況下,這是一個好主意。但是如果我有多個物體,在最壞的情況下,我可能必須爲每種可能的組合創建多個VAO。 – aslg
聽起來像管道鑲嵌部分的好工作。總有Compute着色器和CUDA/OpenCL interop用於不適合經典流水線的東西。 – Drop