我一直致力於通過引入批處理來改進我的OpenGL ES 2.0渲染性能;特別是創建一個RenderBatch,在創建時指定紋理和着色器(現在)。這將狀態設置爲VAO以允許便宜的狀態切換。我開始實行看起來像這樣:OpenGL批處理和實例唯一性
batch = RenderBatch.new "SpriteSheet" "FlatShader"
batch.begin GL_TRIANGLE_STRIP
batch.addGeometry Geometry.newFromFile "Billboard"
batch.end
batch.render renderEngine
但隨後打我:我的廣告牌文件有是爲了進行縮放和轉換爲特定的實例使用頂點。所以我給addGeometry調用添加了一個轉換參數。
batch.addGeometry(Geometry.newFromFile("Billboard"), myObject.transform)
這解決了縮放,平移,旋轉等的頂點的問題,但它通過第一查找所述頂點信息,通過變換矩陣變換它這樣做,然後將其插入到批量數據。雖然這工作似乎效率低下,這是CPU密集型的,並沒有利用GPU的轉換能力。然而,它有效,所以沒有那麼重要。 (很高興有更好的方法來做到這一點雖然)
但是,我遇到了一個障礙:紋理座標可能需要不同的每個實例,這意味着我將不得不通過一個紋理變換矩陣,現在這是感覺哈克。
是否有一種更簡單的方法來處理這種使用着色器對現有數據進行轉換的方法,該着色器不會限制給定的幾何/模型,並且可以輕鬆擴展以使用法線貼圖,UV貼圖和其他奇特技巧?謝謝!
這都有道理,但我不相信它解決我遇到的問題。 ModelViewProjection制服做工精良的整個場景變換(攝像頭),但每個對象都有自己的變換,以及,它修改WHERE場景模型應繪製。但是,我想避免轉換CPU上的座標並將轉換留在GPU上。另外,我需要一種基於各個對象屬性修改對象(特別是紋理座標和顏色)的方法。 – Grimless 2012-03-21 02:09:49
增加了一些關於配料的事情,現在更清楚了嗎? – Tark 2012-03-21 10:14:38