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

3

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

我甚至尝试过 float matrix[9][3] 但它不能工作,我需要将其与 glm::vec3 相乘

如何创建呢?


很抱歉,这超出了glm库的能力范围,因为它不是一种通用的数学库。 - undefined
2
一个有9列的矩阵不能与vec3相乘,因为乘法的内部维度不匹配。至少在OpenGL符号中,向量是列向量。你确定你不是要找一个有9行的矩阵吗?但是这样的话,结果将会是一个9维向量,在OpenGL中没有任何意义。 - undefined
1
你可以使用typedef glm::mat<9, 3, float, glm::defaultp> mat9x3,但这实际上像是一个XY问题。对于结果为glm::mat<9,1,...>,你会怎么处理呢? - undefined
@Botje 9d向量存储了3个关节的x、y、z角度。 - undefined
@BDL 是的,对不起!我将对其进行转置,然后与vec3相乘。 - undefined
1个回答

4

你可以通过3x3子矩阵计算并将结果组合成最终结果。有两个选项:

  1. 9 rows

    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'
    

    this is really simple:

    u' = a*u
    v' = b*u
    w' = c*u
    
  2. 9 columns

                        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
    

    This is more complicated but not by much:

    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 中,这是扩展维度的常见方式,例如用于以下目的:


如何将9x3矩阵与其转置相乘以得到一个3x3矩阵?如果将其分成3个不同的矩阵,这对你进行乘法运算有帮助还是有阻碍? - undefined
1
@Ethan 我添加了编辑1,希望我没有犯任何错误(我还没有喝早茶……)你的案例是第二个例子… - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接