• 学习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);
    

      

      

     
     
  • 相关阅读:
    Integer.highestOneBit(int i)方法的作用与底层实现
    一文搞明白位运算、补码、反码、原码
    Zookeeper如何解决脑裂问题
    Zookeeper请求处理原理分析
    Linux 设备驱动之 UIO 机制
    virtio guest side implementation: PCI, virtio device, virtio net and virtqueue
    DPDK之(八)——vhost库
    Red Hat OpenStack 10的新特性
    探秘DPDK Virtio的不同路径
    2017版:KVM 性能优化之内存优化
  • 原文地址:https://www.cnblogs.com/neverMore-face/p/10138314.html
Copyright © 2020-2023  润新知