我目前正在Ogre3D制造太阳能系统。其他行星完美地围绕太阳旋转,但当我试图围绕地球旋转月球时,它在地球附近的某个点旋转,而不是在地球周围旋转,这使得它有时会与地球相交。
这是用于创建行星距离原点(0,0,0)
的距离的代码 Vector3 location = Vector3::ZERO;
float distance = revolverDistance;
location.x = distance; location.z = distance; location.y = 0;
planet->setPosition(location.x, location.y, location.z);
这是革命的代码
Degree planetRevolution = Degree(revolution * evt.timeSinceLastFrame);
Vector3 location = Vector3::ZERO;
location.x = revolver->getPosition().x - revolve->getPosition().x;
location.z = revolver->getPosition().z - revolve->getPosition().z;
float oldX = location.x;
float oldZ = location.z;
float newX = (oldX*Math::Cos(planetRevolution)) + (oldZ*Math::Sin(planetRevolution));
float newZ = (oldX*-Math::Sin(planetRevolution)) + (oldZ*Math::Cos(planetRevolution));
mPlanet->setPosition(newX, mPlanet->getPosition().y, newZ);
对于变量,我有sunDistance = 0,earthDistance = 150和moonDistance = 155,所有都是浮点数。*
我已经尝试设置float distance = revolveDistance + revolverDistance
,并将月亮的距离更改为5,但它的旋转点稍微移动了一点。
提前谢谢!
提醒(感谢一位回答提醒我的人): 我不允许使用场景层次结构。
答案 0 :(得分:2)
您的问题是一个很好的例子,场景图层次结构适用于:)
现在,食人魔将为你做一切,而不是摆弄硬编码的位置。您只需旋转枢轴节点,无需再设置位置。