與許多3D圖形程序一樣,我有一堆對象具有自己的模型座標(x,y中的-1到1,和z軸)。然後,我有一個從模型座標到世界座標的矩陣(使用正在繪製的對象的位置,旋轉和比例)。最後,我有第二個矩陣將這些世界座標轉換爲OopenGL ES 2.0將用於繪製到屏幕上的規範座標。最快的方法是從模型空間座標到OpenGL ES 2.0中的規範座標空間
因此,因爲一個物體可以包含許多頂點,所有這些頂點在世界空間和典範座標中都使用相同的變換,所以計算這兩個矩陣的乘積會更快一些,並將每個頂點放入結果矩陣而不是將兩個頂點放在兩個矩陣中。
但是,據我所知,在OpenGL ES 2.0着色器中似乎沒有辦法讓它計算矩陣一次,並繼續使用它,直到兩個矩陣中的一個用到glUniformMatrix4fv( )(或另一個設置統一的函數)被調用。所以看起來像一次計算矩陣的唯一方法就是在CPU上執行它,然後使用統一的方法生成GPU。否則,當這樣的:
gl_Position = uProjection * uMV * aPosition;
它會一遍又一遍地計算的話,這似乎像它會浪費時間。
那麼,哪種方式通常被認爲是標準?還是有另一種我完全錯過的方式?就我所知,用於在OpenGL ES 2.0編程指南中實現OpenGL ES 1.1管道的着色器只使用了一個矩陣,那麼用過的更多?