gpt4 book ai didi

c++ - GL 数学 : GLM rotate function rotates the entire coordinate system

转载 作者:行者123 更新时间:2023-11-28 06:39:37 27 4
gpt4 key购买 nike

我做了以下转换:

// 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,所以这取决于你。

关于c++ - GL 数学 : GLM rotate function rotates the entire coordinate system,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26192034/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com