繁体   English   中英

OpenGL glm围绕一个点问题旋转模型

[英]OpenGL glm rotate model around a point issue

我有一个模型和一些位于其轴上的辅助立方体,每个轴上三个用于转换,我使用它们围绕其局部轴旋转模型。

在此处输入图片说明

我想让这些立方体围绕模型中心旋转,所以我将它们平移到模型中心,在同一轴上以相同的角度旋转它们,然后将它们平移回来。 这是代码:

//Rotation around X axis
GLfloat theta=glm::radians(xoffset);
glm::quat Qx(glm::angleAxis(theta, glm::vec3(1.0f, 0.0f, 0.0f)));
glm::mat4 rotX = glm::mat4_cast(Qx);
pickedObject->Transform(rotX);//Multiply the model matrix by the transformation matrix
glm::vec3 op(pickedObject->getMatrix()[3]);//model position
for(TransformationHelper* h:pickedObject->GetTransformationHelpers()){//the small cubes
     glm::mat4 m,it,t;
     glm::vec3 hp(h->getMatrix()[3]);//the cube position
     t=glm::translate(m,op);//m is a unit matrix
     it=glm::translate(m,-op);
     m=t*rotX*it;
     h->Transform(m);
}

结果出乎意料

在此处输入图片说明

更新:更新翻译矩阵后,我得到了这个结果:

在此处输入图片说明

翻译方向错误; 正确的偏移量应该是hp-op ,即矩阵t应该在旋转后恢复立方体的位置。

 t=glm::translate(glm::mat(1.f),hp-op);

也没有必要使用inverse因为它很昂贵(并且数值不太稳定):

 it=glm::translate(glm::mat(1.f),op-hp);

(注意:这里的translate是使用显式构造的单位矩阵调用的。有关类似问题,请参阅这篇文章。有关为什么需要这样做,请参阅此处。)

暂无
暂无

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

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