繁体   English   中英

Opengl使用局部旋转

[英]Opengl using local rotation

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

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;

查看矩阵乘法顺序,因为顺序很重要。 在您的情况下,首先缩放,然后旋转对象,最后根据全局轴移动它。 通过切换乘法,您可以先移动,然后将整个局部坐标系旋转所需的角度,不仅会产生一个旋转,而且还会导致运动轴旋转。

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

关于这个问题的一些参考。

由于旋转矩阵仅适用于以原点为中心的旋转(即(0,0,0)),因此需要以往复方式将原点切换到对象的中心。

假设您的对象位于(X,Y,Z)。 然后,如果您想要居中旋转到该对象,您需要首先翻译(-X,-Y,-Z),然后进行旋转,然后将(X,Y,Z)平移回原始位置,以便对您的对象执行旋转中心。

这张照片显示了它的实际工作原理: 在此输入图像描述

以下是包含上述图片的链接 ,其中还包含一些有关旋转的基础知识。

在我的情况下,我只是绘制一个简单的三角形并玩转换。 当我的三角形有坐标时:

{0.0,2.0,-10.0,
-2.0,-2.0,-10.0,
2.0,-2.0,-10.0};

缩放按照你的说法进行,因为它相对于中心0.0,0.0,0.0进行缩放。 沿y轴的旋转也搞乱了。 明显的解决方法是向后移动相机并将物体放在中心。

{0.0,2.0,0.0,
-2.0,-2.0,0.0,
2.0,-2.0,0.0};

这是一个微不足道的案例,在关注所有数学的同时很容易被忽视。 因此,请确保您的对象位于中心。

暂无
暂无

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

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