zoukankan      html  css  js  c++  java
  • 学习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);
    

      

      

     
     
  • 相关阅读:
    一题多解 —— 同时找到序列的最大值最小值
    中位数与顺序统计量
    软件开发 —— 极限编程(XP:Extreme Programming)
    一题多解 —— 二项式分布的期望和方差的计算
    C++中explicit关键字用法
    【联系】二项分布的对数似然函数与交叉熵(cross entropy)损失函数
    随机变量统计独立性的相关证明
    PowerShell管理SCOM_批量设置维护模式(下)
    导出AD用户所属组,查询AD用户(aduser)
    SQL脚本运行
  • 原文地址:https://www.cnblogs.com/neverMore-face/p/10138314.html
Copyright © 2011-2022 走看看