C++ 使用GLM在OpenGL中实现轨道和旋转

C++ 使用GLM在OpenGL中实现轨道和旋转,c++,opengl,rotation,transformation,glm-math,C++,Opengl,Rotation,Transformation,Glm Math,我正在用OpenGL制作一个太阳系,我希望这些行星能够围绕其他行星运行,也能围绕自己的中心旋转 这是我目前用来使行星围绕特定点运行的代码: Model=glm::translate(Model,glm::vec3(-orbit_radius,0.0f,0.0f)); 模型=glm::旋转(模型,glm::弧度(轨道速度)/100.0f,glm::vec3(0.0f,1.0f,0.0f)); 模型=glm::translate(模型,glm::vec3(轨道半径,0.0f,0.0f)); 如何将

我正在用OpenGL制作一个太阳系,我希望这些行星能够围绕其他行星运行,也能围绕自己的中心旋转

这是我目前用来使行星围绕特定点运行的代码:

Model=glm::translate(Model,glm::vec3(-orbit_radius,0.0f,0.0f));
模型=glm::旋转(模型,glm::弧度(轨道速度)/100.0f,glm::vec3(0.0f,1.0f,0.0f));
模型=glm::translate(模型,glm::vec3(轨道半径,0.0f,0.0f));

如何将其与围绕对象自身旋转的变换结合起来?

如果要旋转对象,我建议创建一个中心位于(0,0,0)的对象
必须首先完成对象的自旋转。然后平移并旋转对象:

Model=旋转*平移*旋转
e、 g:

rot\u angle+=glm::弧度(轨道速度)/100.0f;
自旋角+=glm::弧度(轨道速度)/100.0f;
glm::vec3 tvec=glm::vec3(轨道半径,0.0f,0.0f);
glm::vec3轴=glm::vec3(0.0f、1.0f、0.0f)
glm::mat4 translate=glm::translate(glm::mat(1.0f),tvec);
glm::mat4旋转=glm::旋转(glm::mat(1.0f),旋转角度,轴);
glm::mat4旋转=glm::旋转(glm::mat(1.0f),旋转角度,轴);
模型=旋转*平移*旋转;
使用此解决方案,
旋转角度
旋转角度
必须在每一帧中以恒定的步长递增


如果不想增加角度,则必须存储2个矩阵,而不是角度。旋转时为1,旋转时为on:

mat4旋转(1.0f);
mat4自旋(1.0f);
glm::vec3-tvec=glm::vec3(-orbit_-radius_u2;,0.0f,0.0f);
glm::vec3轴=glm::vec3(0.0f、1.0f、0.0f)
浮动旋转角度=glm::弧度(轨道旋转速度)/100.0f;
浮动旋转角度=glm::弧度(旋转速度)/100.0f;
旋转=glm::平移(旋转,tvec);
旋转=glm::旋转(旋转、旋转角度、轴);
旋转=glm::平移(旋转,-tvec);
旋转(旋转、旋转角度、轴);
模型=旋转*旋转;

我通过先拆分,然后转换,然后在最后组合它们来实现它

rotate_ = glm::translate(rotate_, glm::vec3(-orbit_radius_, 0.0f, 0.0f));
rotate_ = glm::rotate(rotate_, glm::radians(orbit_speed_) / 100.0f, glm::vec3(0.0f, 1.0f, 0.0f));
rotate_ = glm::translate(rotate_, glm::vec3(orbit_radius_, 0.0f, 0.0f));

spin_ = glm::rotate(spin_, glm::radians(spin_speed_) / 100.0f, glm::vec3(0.0f, 1.0f, 0.0f));

final_ = rotate_ * spin_;

谢谢你的回复!我试着这样做,但是这个星球最终只朝一个方向消失了。我想这会更复杂。如果我在行星绕轨道运行完全停止所有运动后旋转。奇怪吧?是的,应该是这样的