它看起來不像任何操作可以使底部行其他[0 0 0 1]
和頂點位置來與vec3需要升級到vec4之前變換。然而,我經常看到使用mat4進行投影/視圖/ modeltoworld的着色器。考慮到,爲什麼標準使用mat4而不是mat3x4?我們可以保存16個字節和一個mat4xvec4乘法的1/4的傳輸。爲什麼大多數着色器使用mat4而不是mat3x4?
1
A
回答
3
例如,透視投影變換具有底部行[0 0 -1 0]
,其影響頂點的座標。因此,如果您使用vec3
來表示着色器中的頂點,那麼在應用mat3x4
轉換之後,OpenGL(以及幾乎所有其他呈現API)將自動爲座標值插入1.0值,這將有效地禁用透視分割步驟(即,當圖形系統將每個X,ÿ,和ž通過座標瓦特),其是允許對象似乎更小,因爲它們從眼睛得到更遠的魔法。
一般而言,每次統一更新(這是您要做的更新投影轉換矩陣,並且每個着色器程序綁定可能會發生一次)保存16個字節與優化頂點屬性或紋理上傳幾乎任何其他圖形相關。
+0
是的,我沒有'想推動性能方面更多的邏輯方面。是的,你是對的,雖然我剛剛在我使用的圖書館中找到了光明的一面 – user2475269
相關問題
- 1. 爲什麼不使用數組而不是許多參數
- 2. 爲什麼CG着色器不能使用GL 3.2?
- 3. Object.prototype.toString.call(),爲什麼在大多數示例中使用call()而不是應用?
- 4. 使用多個着色器
- 5. 爲什麼賽格控制着色器被調用多次?
- 6. 什麼是立體着色器?
- 7. 爲什麼OpenGL着色器函數不能被定義?
- 8. 什麼是頂點着色?
- 9. 多個着色器或一個大着色器?
- 10. 爲什麼不着色圖像工作?
- 11. 爲使用數組着色的着色器設置動畫
- 12. 爲什麼使用數據而不是xdata顯着減少代碼空間
- 13. 爲什麼我會使用白色屏幕而不是地圖?
- 14. glDrawElements不使用着色器?
- 15. three.js /從着色器讀取mat4類型的THREE.InstancedBufferAttribute
- 16. 爲什麼使用classmethod而不是staticmethod?
- 17. 爲什麼使用iconv_strpos而不是strpos?
- 18. 爲什麼使用registerDefaults:而不是setValue:forKey:?
- 19. 爲什麼使用TagBuilder而不是StringBuilder?
- 20. 爲什麼,而不是使用回調
- 21. 爲什麼使用結構,而不是
- 22. 爲什麼使用StringWriter而不是StringBuffer?
- 23. 爲什麼使用s:Line而不是mx:HRule?
- 24. 爲什麼使用ImageIcon而不是Image?
- 25. 爲什麼使用SQLiteOpenHelper而不是SQLiteDatabase?
- 26. 爲什麼使用MapFragment而不是SupportMapFragment?
- 27. 爲什麼使用FloatBuffer而不是float []?
- 28. 爲什麼使用追加()而不是+
- 29. 爲什麼使用Number.parseInt而不是parseInt()?
- 30. 爲什麼使用JLE而不是JL?
你在說什麼仍然需要一個vec4(你需要W = 1),並且所討論的矩陣需要是mat4x3(4列,3行)。否則,位置翻譯不起作用。 –