繁体   English   中英

GL Math:GLM旋转功能旋转整个坐标系

[英]GL Math : GLM rotate function rotates the entire coordinate system

我做了以下转换:

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

问题:
第二步,旋转立方体,实际上是旋转整个坐标系。 因此,第三步无法将我的多维数据集恢复到原始位置。

观察到的输出:
立方体的初始位置: X,Y,Z
转换为原点后的位置: 0,0,0
绕Y轴旋转后的位置: 0,0,0
“尝试”以转换回原始位置后的位置: SomeOtherX,Y,SomeOtherZ

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

我在这里做错了什么? 如果这样做,我所有的任意轴旋转都会失败。

您没有指定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,所以这取决于您。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM