在做自我旋转的同时围绕一个对象旋转的OpenGL

问题描述:

我想用OpenGL在可编程管道中模拟一个行星系统。假设现在我有一个行星A,其质心为planet_A_FixedPoint,行星C的质心为planet_C_FixedPoint。我想让行星C绕着行星A旋转,旋转轴= normalize(planet_A_FixedPoint),同时绕着自己的中心旋转,旋转轴= (0,1,0)。我想出了下面的代码,但它似乎没有工作。在做自我旋转的同时围绕一个对象旋转的OpenGL

glm::mat4 rotateAroundPlanetA = glm::translate(glm::mat4(), planet_A_FixedPoint) * glm::rotate(glm::mat4(), degree, normalize(planet_A_FixedPoint)) \ 
    * glm::translate(glm::mat4(), -planet_A_FixedPoint); 
planet_C_M_Matrix = rotateAroundPlanetA * planet_C_M_Matrix; 
glm::vec4 tempFixedPoint = rotateAroundPlanetA * glm::vec4(planet_C_FixedPoint, 1.0f); 
planet_C_FixedPoint = vec3(tempFixedPoint.x, tempFixedPoint.y, tempFixedPoint.z); 
glm::mat4 rotateAroundPlanetC = glm::translate(glm::mat4(), planet_C_FixedPoint) * glm::rotate(glm::mat4(), degree, vec3(0, 1, 0)) \ 
    * glm::translate(glm::mat4(), -planet_C_FixedPoint); 
planet_C_M_Matrix = rotateAroundPlanetC * planet_C_M_Matrix; 

上述码的获得的效果是,行星c转动本身围着正常化(XA,YA,ZA)轴旋转,但它不与行星A的原点对准(XA,YA ,ZA)。

谁能告诉我我错在哪?

+0

请发表你的真实代码,上面的代码片段甚至不会编译。 – ybungalobill

+0

嗨〜我发布了我的真实代码。 –

首先,如果你使用范围运算符(:)在其他地方使用它。其次,你的代码有预期的行为。如果你想让行星C与行星A的原点对齐,那么你的旋转轴需要是垂直平面,它包含原点C和原点A.

+0

垂直飞机是什么意思? –

+0

对不起,我的意思是“旋转轴需要与平面正交......” – quazeeee

+0

但现在问题在于行星C围绕预期轴旋转,但以原点(0,0,0)为中心旋转。不是planetA(XA,YA,ZA) –