如何围绕另一个对象(C ++和Ogre3D)旋转对象?
我目前正在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,但其旋转的点稍稍远离了距离。
先谢谢你!
提醒(谢谢提醒我的人之一):我不被允许使用场景层次结构。
你的问题是一个很好的例子,场景图层次结构是好的:)
现在,Ogre会为您做所有事情,而不用摆弄硬编码的位置。 您将只需旋转枢轴节点,无需再设置位置。
链接地址: http://www.djcxy.com/p/95551.html上一篇: How to revolve an object around another object (C++ and Ogre3D)?
下一篇: How do you gradually accelerate an object based on button press (Ogre3D)?