如何将对象围绕另一个对象(C 和OGRE3D)旋转
How to revolve an object around another object (C++ and 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);
- rotlove =行星(例如地球)
- Revolver =另一个正在围绕另一个星球旋转的星球(例如月亮)
对于变量,我的sundistance = 0,EarthDistance = 150,Moondistance = 155,所有这些都是浮子。*
我尝试设置float distance = revolveDistance + revolverDistance
,并将月球的距离更改为5,但它旋转的点稍微移动了。
预先感谢您!
提醒(感谢一个回答我的人之一):我不允许使用场景层次结构。
您的问题是一个很好的示例场景图层次结构对:)
- 在太阳的中心点设置一个食人魔场景节点。
- 将太阳实体连接到太阳节点
- 将另一个场景节点放在太阳的位置。这将是行星的枢轴节点,它围绕着它。
- 使枢轴节点成为太阳节点的孩子。
- 将场景节点放在星球的开始位置
- 附加行星实体
- 使行星节点成为枢轴节点的孩子
- 在行星位置创建另一个枢轴场景节点,使其成为行星中心节点的孩子。
- 在月球的位置创建一个场景节点,将月亮实体附加到月球枢轴节点。
现在,Ogre将为您做所有事情,而不必摆弄硬编码的位置。您只需要旋转枢轴节点,就不再需要设置位置。
相关文章:
- 与互斥锁相比,旋转锁可以保证上下文切换
- 绘制旋转的三角形
- 旋转模型矩阵时的形状失真
- 四边形的 2D 旋转
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- 发布旋转矩阵(openGL/glm)
- 顺时针迭代旋转 3 位数字
- 形状对象的旋转和缩放不正确C++
- 如何在 OpenSceneGraph 中缩放/旋转/移动资产
- 如何有效地计算将单位立方体映射到自身的反射和旋转?
- 子轴围绕父轴而不是他自己的轴旋转
- 将使用太多的纹理插值器 - 带旋转的着色器
- SFML 向下移动时如何围绕屏幕中心旋转?
- 如何在OpenGL中正确旋转和缩放对象?
- 使用 C++在 OpenGL 中移动自动旋转的 3D 多边形
- 按时间自动旋转形状,同时在 OpenGL 中使用C++移动它们
- 如何使用增强::几何计算多边形的旋转固体体积?
- 使用 GDI+ 旋转位图,然后转换为 HDC
- 如何绕任意轴旋转点?
- 如何将对象围绕另一个对象(C 和OGRE3D)旋转