2014-10-04 320 views
0

我做了如下转变:GL数学:GLM旋转功能旋转整个坐标系

// Translate my cube to origin 
myCubeModelMatrix = glm::translate(myCubeModelMatrix, vec3(-pos.x, -pos.y , -pos.z)) ; 

// Rotate cube about Y axis 
myCubeModelMatrix = glm::rotate(myCubeModelMatrix , vec3(0,1,0)) ; 

// Translate back to original position 
myCubeModelMatrix = glm::translate(myCubeModelMatrix, vec3(pos.x, pos.y , pos.z)) ; 

问题:
第二步,在那里我旋转立方体,它的实际旋转整个坐标系统。因此,第三步不能将我的魔方恢复到原来的位置。绕Y轴后0,0,0
位置::

观测输出:
立方体的初始位置:翻译到原点之后 X,Y,Z
位置 0 “试图” 后0,0
位置平移回原来的位置: SomeOtherX,Y,SomeOtherZ

请注意,在最终反向平移后,X和Z坐标现在与原始坐标不同,而Y坐标与原始坐标相同。所以我的推论是围绕Y轴的旋转实际上旋转了整个坐标系,因此X和Z已经改变,但是Y没有改变。

我在这里做错了什么?如果旋转做到这一点,我所有的任意轴旋转将失败。

+0

这个问题是离题,因为它涉及到数学,而不是编程。 – 2014-10-04 11:05:56

+0

这个问题是关于一个流行的数学库如何表现。数学在这里很明显。 – 2014-10-04 11:08:33

+1

@sanjeevmk:如果数学对你很清楚,你就不会按错误的顺序来乘以这些矩阵:) – derhass 2014-10-04 12:37:16

回答

1

您没有指定Y轴的旋转量, 并且如果您已经缓存位置和旋转,则可以使用类似这样的东西。

glm::mat4 translation = glm::translate(glm::mat4(), glm::vec3(pos.x, pos.y, pos.z)); 
glm::mat4 rotation = glm::rotate(glm::mat4(), rotationAmount, glm::vec3(0, 1, 0)); 

myCubeModelMatrix = translation * rotation; 

当然你可以优化它,但我从来没有使用glm,所以这取决于你。