1. 程式人生 > >學習OpenGL:筆記四

學習OpenGL:筆記四

矩陣

矩陣。相當於一個二維陣列,有自己的運算規則。先來複習一下關於矩陣的加減乘除的一些基本運算。

矩陣的加法

          

矩陣的減法

             它的加法就是把兩個矩陣對應位置的元素加起來放在結果矩陣對應的位置上。應該注意的是隻有同型矩陣之間才可以進行加減法。也就是矩陣的加減要求兩邊的矩陣必須尺寸相等。

矩陣的乘法

        

變換矩陣

在圖形繪製過程中,有三種變換,分別是平移,縮放,旋轉。如果我們想要用程式碼表示一個3D環境中的變換需要幾個變數呢,首先要有平移txtytz,然後是縮放sxsysz,最後是旋轉rxryrz。在渲染的時候把這些變數附加到原始的位置資料上就可以實現變換了。這種方式雖然可行但不夠好,尤其是在GPU上這種方式產生的運算負擔遠大於使用矩陣。

程式碼實現

  float varyingFactor = sin(self.elapsedTime);
  GLKMatrix4 scaleMatrix = GLKMatrix4MakeScale(varyingFactor, varyingFactor, 1.0);
  GLKMatrix4 rotateMatrix = GLKMatrix4MakeRotation(varyingFactor , 0.0, 0.0, 1.0);
  GLKMatrix4 translateMatrix = GLKMatrix4MakeTranslation(varyingFactor, 0.0, 0.0);
  // 矩陣會按照從右到左的順序應用到position上。也就是先縮放(scale),再旋轉(rotate),最後平移(translate)
  // 如果這個順序反過來,就完全不同了。從線性代數角度來講,就是矩陣A乘以矩陣B不等於矩陣B乘以矩陣A。
  self.transformMatrix = GLKMatrix4Multiply(translateMatrix, rotateMatrix);
  self.transformMatrix = GLKMatrix4Multiply(self.transformMatrix, scaleMatrix);
  static GLfloat triangleData[36] = {
        0,      0.5f,  0,  1,  0,  0, 
        -0.5f,  0.0f,  0,  0,  1,  0,
        0.5f,   0.0f,  0,  0,  0,  1,
        0,      -0.5f,  0,  1,  0,  0,
        -0.5f,  0.0f,  0,  0,  1,  0,
        0.5f,   0.0f,  0,  0,  0,  1,
    };
    [self bindAttribs:triangleData];
    glDrawArrays(GL_TRIANGLES, 0, 6);