2016-05-03 29 views
1

它看起來不像任何操作可以使底部行其他[0 0 0 1]和頂點位置來與vec3需要升級到vec4之前變換。然而,我經常看到使用mat4進行投影/視圖/ modeltoworld的着色器。考慮到,爲什麼標準使用mat4而不是mat3x4?我們可以保存16個字節和一個mat4xvec4乘法的1/4的傳輸。爲什麼大多數着色器使用mat4而不是mat3x4?

+1

你在說什麼仍然需要一個vec4(你需要W = 1),並且所討論的矩陣需要是mat4x3(4列,3行)。否則,位置翻譯不起作用。 –

回答

3

例如,透視投影變換具有底部行[0 0 -1 0],其影響頂點的座標。因此,如果您使用vec3來表示着色器中的頂點,那麼在應用mat3x4轉換之後,OpenGL(以及幾乎所有其他呈現API)將自動爲座標值插入1.0值,這將有效地禁用透視分割步驟(即,當圖形系統將每個Xÿ,和ž通過座標瓦特),其是允許對象似乎更小,因爲它們從眼睛得到更遠的魔法。

一般而言,每次統一更新(這是您要做的更新投影轉換矩陣,並且每個着色器程序綁定可能會發生一次)保存16個字節與優化頂點屬性或紋理上傳幾乎任何其他圖形相關。

+0

是的,我沒有'想推動性能方面更多的邏輯方面。是的,你是對的,雖然我剛剛在我使用的圖書館中找到了光明的一面 – user2475269

相關問題