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

时间:2017-12-27 03:14:16

标签: c++ glm-math

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);

"测试" varible应为(0.0f,0.0f,-10.0f,1.0f),但返回的结果为(0.0f,0.0f,10.0f,1.0f)。这是glm的错误吗?

2 个答案:

答案 0 :(得分: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

编辑:修正倒置术语

答案 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