c++ - OpenGL glm围绕点旋转模型问题

标签 c++ opengl rotation quaternions glm-math

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

enter image description here

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

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

结果出乎意料

enter image description here

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

enter image description here

最佳答案

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

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

此外,也没有必要使用,因为它成本高昂(并且在数值上不太稳定):

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

(注意:此处使用显式构造的单位矩阵调用 translate。有关类似问题,请参阅 this post。请参阅 here 了解为什么这是必要的。)

关于c++ - OpenGL glm围绕点旋转模型问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53119907/

相关文章:

c++ - 使用内联汇编获取变量地址

c++ - 从 boost ptime 中删除秒、毫秒和微秒

linux - Xlib 键盘轮询

Java脚本;在脚本中调用 src?

C - 旋转 64 位无符号整数

java - 旋转图像上的碰撞检测

c++ - 空 scrollArea QT C++

c++ - 多个运算符匹配这些操作数

c++ - OpenGL 垂直同步让渲染更快

opengl - 如何让多边形抗锯齿工作?