gpt4 book ai didi

c++ - Opengl 使用局部旋转

转载 作者:行者123 更新时间:2023-11-30 01:58:42 26 4
gpt4 key购买 nike

我一直在尝试让旋转工作并且它似乎工作,当我尝试移动对象时我的问题出现了,我期望对象的轴与网格一起旋转但它保持全局轴并且继续在该轴上移动对象。我对旋转的理解有缺陷吗?或者是导致这种情况发生的代码,如果我的理解是问题,是否有一种方法可以用对象转换对象轴。我的代码如下。

Projection= glm::perspective(45.f, 4.0f / 3.0f, 0.1f, 100.0f);

//position and direction are calculated based on mouse position
View = glm::lookAt(
position,
position+direction,
up
);
glm::mat4 myMatrix = glm::translate(x,y,z);
glm::mat4 myScalingMatrix = glm::scale(0.2f, 0.2f ,0.2f);
glm::vec3 myRotationAxis( 0, 1, 0);
glm::mat4 tempModel = glm::mat4(1.f);
glm::mat4 myRotationMatrix =glm::rotate( tempModel,45.f, myRotationAxis );

glm::mat4 Model= myMatrix* myRotationMatrix *myScalingMatrix;

glm::mat4 MVP = Projection* View * Model;

最佳答案

由于旋转矩阵仅适用于那些以原点为中心的旋转(即 (0,0,0)),您需要以来回方式将原点切换到对象的中心。

假设您的对象位于 (X, Y, Z)。那么如果你想以那个物体为中心旋转,你需要先平移(-X,-Y,-Z),然后做旋转,然后平移(X,Y,Z)回到原来的位置,以便对您的对象执行旋转中心。

这张图片显示了它的实际工作原理: enter image description here

这是 link包含上图,其中还包括一些关于旋转的基础知识。

关于c++ - Opengl 使用局部旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17055018/

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