|
本帖最后由 nie 于 2014-5-7 17:22 编辑
现在实现的是按下'左移键',飞机向左偏转,想实现这样的效果:当松开'左移键'后,飞机恢复到正方向。
基本思路如下:
在更新回调中,
void operator()(osg::Node* node,osg::NodeVistor* nv)
{
........
if(左移键被按下)
飞机向左偏转10度;
if(左移键弹起)
//飞机从当前位置偏转到初始方向
osg:uat attitude = airplane.getAttitude();//飞机的当前姿态
osg::Quat delta;//需要回滚的角度
osg::matrix mat;
mat.setRotae(attitude);
osg::Vec3d axis = osg::Vec3d(1.0,0.0,0.0);//飞机初始的方向
axis = axis*mat;//飞机当前方向
delta.makeRotate(axis,osg::Vec3d(1.0,0.0,0.0));
attitude *= delta;
airplane.setAttitude(attitude);//飞机实现回滚
.........
}
这样做后,当松开按键时,飞机确实恢复到了初始方向,但几乎是一瞬间就转过来了,就像在跳变。
有没有办法让‘旋转到初始方向’这个动作发生得慢一点啊。 |
|