GLM:如何创建一个 9 列和 3 行的矩阵

Posted

技术标签:

【中文标题】GLM:如何创建一个 9 列和 3 行的矩阵【英文标题】:GLM: How to create a matrix of 9 columns and 3 rows 【发布时间】:2019-11-15 07:20:30 【问题描述】:

我只知道一种方法,那就是glm::mat4 matrix

我什至尝试了float matrix[9][3],但没有成功,我需要将它与glm::vec3相乘

如何创作?

【问题讨论】:

恐怕这超出了 glm 库的能力,因为它不是某种通用数学库 9 列的矩阵不能乘以 vec3,因为乘法的内部维度不匹配。至少在向量是列向量的 OpenGL 表示法中不会。你确定你不是在寻找一个有 9 行的矩阵吗?但结果将是一个 9d 向量,在 OpenGL 中没有任何意义。 你可以typedef glm::mat<9, 3, float, glm::defaultp> mat9x3,但这真的是一个 XY 问题。您将如何处理生成的 glm::mat<9,1,...> @Botje 9d向量存储了3个关节的x,y,z角度 @BDL 是的,对不起!我将把它转置然后乘以 vec3 【参考方案1】:

您可以使用 3x3 子矩阵进行计算,并将输出组合成最终结果。有两种选择:

    9 行

    a a a       u'
    a a a       u'
    a a a       u'
    b b b   u   v'
    b b b * u = v'
    b b b   u   v'
    c c c       w'
    c c c       w'
    c c c       w'
    

    这真的很简单:

    u' = a*u
    v' = b*u
    w' = c*u
    

    9 列

                        u
                        u
                        u
    a a a b b b c c c   v   u' 
    a a a b b b c c c * v = u'
    a a a b b b c c c   v   u'
                        w
                        w
                        w
    

    这更复杂,但不是很多:

    u.x' = (a*u).x + (b*v).x + (c*w).x
    u.y' = (a*u).y + (b*v).y + (c*w).y
    u.z' = (a*u).z + (b*v).z + (c*w).z
    

这是在 GLSL 中扩展维度的常用方法,例如用于以下目的:

4D rendering 4D rotations

【讨论】:

以上是关于GLM:如何创建一个 9 列和 3 行的矩阵的主要内容,如果未能解决你的问题,请参考以下文章

如何缩放使用 glm::lookat() 获得的矩阵?

在R中同时移动矩阵的特定列和行的有效方法

相机 旋转

相机 旋转

相机 旋转

相机 旋转