Android OpenGLES2.0(十)——OpenGL中的平移、旋轉、縮放
阿新 • • 發佈:2019-02-13
在前面的部落格中,所有的例子都是一個物件,類似繪製圓錐繪製圓柱,我們都是傳入一個引數,然後去控制那個圓面的位置,如果我們要繪製幾個個正方形,它的位置、大小、方向都是不相同的,按照那種方式該多麻煩啊。所以我們需要更好的辦法——矩陣變換。
什麼是矩陣
其實在之前的部落格中,我們也基本都用到了矩陣,投影的設定,就是根據引數生成一個4*4的矩陣,我們用長度為16的浮點型陣列來儲存,相機的設定也是如此。那麼矩陣到底該怎麼定義?
矩陣(Matrix)是一個按照長方陣列排列的複數或實數集合,最早來自於方程組的係數及常數所構成的方陣。在物理學中,矩陣於電路學、力學、光學和量子物理中都有應用;電腦科學中,三維動畫製作也需要用到矩陣。 矩陣的運算是數值分析領域的重要問題。
在大學高數課程中也有學習矩陣的只是,矩陣也可以進行加減和乘法運算。在OpenGL中使用的向量為列向量,我們通過利用矩陣與列向量(顏色、座標都可看做列向量)相乘,得到一個新的列向量。利用這點,我們構建一個的矩陣,與圖形所有的頂點座標座標相乘,得到新的頂點座標集合,當這個矩陣構造恰當的話,新得到的頂點座標集合形成的圖形相對原圖形就會出現平移、旋轉、縮放或拉伸、抑或扭曲的效果。矩陣和頂點相乘示例如下(如果用長度為16的float陣列儲存,則m序號-1即為其下標),那麼如何構造合適的矩陣呢?
我們在Android OpenGLES2.0(七)——著色器語言GLSL中提到了,OpenGLES中的矩陣有2*2、3*3和4*4三種矩陣。在本篇部落格中只以4*4來進行分析。
OpenGL中常用矩陣
如(1)中公式所示,即為矩陣和頂點相乘的公式,如果矩陣取值恰當,則可實現圖形的平移、旋轉、縮放、拉伸等變換。在這裡直接給出: