为什么glm在转换3D矢量时会给出错误的结果?

问题描述 投票:0回答:2
glm::vec4 x = glm::vec4(0.0f, 0.0f, 1.0f, 0.0f);
glm::vec4 y = glm::vec4(0.0f, 1.0f, 0.0f, 0.0f);
glm::vec4 z = glm::vec4(-1.0f, 0.0f, 0.0f, 0.0f);
glm::vec4 t(0.0f, 0.0f, 0.0f, 1.0f);

glm::mat4 rot(x, y, z, t);
glm::vec4 test = rot * glm::vec4(10.0f, 0.0f, 0.0f, 1.0f);

“test”变量应为(0.0f,0.0f,-10.0f,1.0f),但返回的结果为(0.0f,0.0f,10.0f,1.0f)。这是glm的错误吗?

c++ glm-math
2个回答
1
投票

我想你假设四个向量xyzt是“行向量”,但看起来它们是“列向量”。因此,矩阵rot最有可能:

x  y  z  t
__________
0  0 -1  0
0  1  0  0 
1  0  0  0
0  0  0  1

哪个乘以列向量:

10
 0
 0
 1

给出列向量:

 0
 0
10
 1

编辑:修复倒置术语


0
投票

实际结果不是(0, 0, 10, 2)吗?基本上,矩阵乘以向量意味着矩阵列与来自向量的系数的线性组合。所以,在你的例子中

rot * glm::vec4(10.0f, 0.0f, 0.0f, 1.0f)

相当于

10.0f * x + 0.0f * y + 0.0f * z + 1.0f * t
© www.soinside.com 2019 - 2024. All rights reserved.