目录
1. 太阳、地球模型
我们知道,地球在自转的同时绕太阳公转。这就涉及到地球绕自身轴旋转及绕太阳轴公转,如何用osg实现呢?即效果如下(这里我们假定太阳是静止的):

2. 思路说明
如果一个模型不在场景的中心点,这时候使用 osg::Matrix::rotate旋转的话,这个对象会围绕场景的中心点进行旋转,会转一个大圈,那么怎么做才能让他在任何位置的时候,围绕自己的轴心进行旋转?解决思路如下:
- 先保存物体在世界坐标系下的坐标,即物体在世界坐标系下的中心点坐标
- 再将物体移动到世界坐标系的原点。
- 在世界坐标系的原点旋转好后,再移动回原来的位置,即步骤1中的提到的坐标。
const osg::BoundingSphere& loaded_bs = m_spTrans0->getBound();
osg::Vec3d center = m_spTrans0->getBound().center(); // 先保存物体中心点坐标
float fX = m_spTrans0->getBound().center().x();
float fY = m_spTrans0->getBound().center().y();
float fZ = m_spTrans0->getBound().center().z();
osg::Matrix curMatrix = m_spTran

本文介绍了如何使用osg库实现地球在自转的同时绕太阳公转的效果。通过保存物体原始位置,将其移至原点进行旋转,然后返回原位置的方法,使物体能够围绕自身轴心旋转。详细代码实现中涉及到osg的回调函数技术。
最低0.47元/天 解锁文章
4275

被折叠的 条评论
为什么被折叠?



