zoukankan      html  css  js  c++  java
  • glm初试,关于行矩阵列矩阵问题

    /***
        * glm中矩阵是行优先存储的,这不同于opengl默认的以列优先存储的方式??,以下面矩阵mat为例
        * 它是用四个行向量来模拟存储四个行:vec4 value[4],其中
        * value[0] = (1,0,0,0) = (m[0][0],m[0][1],m[0][2],m[0][3])
        * value[1] = (0,1,0,0) = (m[1][0],m[1][1],m[1][2],m[1][3])
        * value[2] = (0,0,1,0) = (m[2][0],m[2][1],m[2][2],m[2][3])
        * value[3] = (1,1,1,1) = (m[3][0],m[3][1],m[3][2],m[3][3])
        * 这个存储与opengl从直观看是不一样的,它的平移部分存储到了第四行,而不是第四列,与DX的写法一致
        */
        glm::mat4 mat = mat4(
            1, 0, 0, 0,
            0, 1, 0, 0,
            0, 0, 1, 0,
            1, 1, 1, 1
        );
    
    
        glm::vec4 v(1, 2, 3, 1);
        
        /*** 
        * 矩阵与向量向乘规则,遵守opengl的谁在前谁是列向量的规则
        * 矩阵在前则矩阵看成是四个列向量,向量在后则为一个行向量
        * 向量在前则向量看成一个列向量,矩阵在后则视为四个行向量
        */
        /***
        * 【矩阵与向量相乘,一般的用法是矩阵在左向量在右】
        * 如下运算是把mat看作四个列向量,V看作行向量:(1*1+0*2+0*3+1*1, 0*1+1*2+0*3+1*1, 0*1+0*2+1*3+1*1, 0*1+0*2+0*3+1*1) = (2,3,4,1)
        */
        auto vt = mat * v; //结果是(2,3,4,1)
    
        mat4 m2(
            1, 4, 6, 8,
            2, 1, 7, 9,
            3, 5, 1, 0,
            0, 0, 0, 0
        );
    
        /***
        *【总结】
        * 1, glm中矩阵的存储是按行存储的,与DX一致
        * 2, glm中左矩阵右向量的乘法=DX的左向量右矩阵乘法
        * 由以上两点可以,在使用glm库时只需要注意矩阵与向量的写法,内部原理与运算可按DX来看
        * 比如上面的运算按DX来算
        * (1,2,3,1) * (1,0,0,0) = (1*1+2*0+3*0+1*1,1*0+2*1+3*0+1*1, 1*0+2*0+3*1+1*1, 1*0+2*0+3*0+1*1) = (2,3,4,1)
                      (0,1,0,0)
                     (0,0,1,0)
                     (1,1,1,1)
        */
    
        //translate运算是将1,2,3 添加到矩阵的第四行,结果为value[3] = 1,2,3,1
        auto m3 = glm::translate(vec3(1, 2, 3));
  • 相关阅读:
    LeetCode "Jump Game"
    LeetCode "Pow(x,n)"
    LeetCode "Reverse Linked List II"
    LeetCode "Unique Binary Search Trees II"
    LeetCode "Combination Sum II"
    LeetCode "Divide Two Integers"
    LeetCode "First Missing Positive"
    LeetCode "Clone Graph"
    LeetCode "Decode Ways"
    LeetCode "Combinations"
  • 原文地址:https://www.cnblogs.com/timeObjserver/p/11382911.html
Copyright © 2011-2022 走看看