在做自我旋转的同时围绕一个对象旋转的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)。
谁能告诉我我错在哪?
首先,如果你使用范围运算符(:)在其他地方使用它。其次,你的代码有预期的行为。如果你想让行星C与行星A的原点对齐,那么你的旋转轴需要是垂直平面,它包含原点C和原点A.
垂直飞机是什么意思? –
对不起,我的意思是“旋转轴需要与平面正交......” – quazeeee
但现在问题在于行星C围绕预期轴旋转,但以原点(0,0,0)为中心旋转。不是planetA(XA,YA,ZA) –
请发表你的真实代码,上面的代码片段甚至不会编译。 – ybungalobill
嗨〜我发布了我的真实代码。 –