查看: 772|回复: 5

怎么让飞机在一个键弹起后的一秒内旋转一个角度

[复制链接]

该用户从未签到

发表于 2014-5-7 17:20:08 | 显示全部楼层 |阅读模式
本帖最后由 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);//飞机实现回滚
        .........
}

这样做后,当松开按键时,飞机确实恢复到了初始方向,但几乎是一瞬间就转过来了,就像在跳变。
有没有办法让‘旋转到初始方向’这个动作发生得慢一点啊。

该用户从未签到

发表于 2014-5-7 17:32:50 | 显示全部楼层
计算回调的时间差,
每次回调的角度 = 时间差*速度
你这里的 速度 = 10 度/秒
复位后停止

该用户从未签到

发表于 2014-5-9 13:56:11 | 显示全部楼层
可以再回调中设置每帧回复1度或者0.5度或者更少啊!

该用户从未签到

 楼主| 发表于 2014-5-9 17:52:55 | 显示全部楼层
那样也可以,但是效果还不是很好,我已经试过了

该用户从未签到

发表于 2014-5-9 20:26:43 | 显示全部楼层
在指定的时间内完成指定的行程
我想没有比 每帧的时间差*(行程/时间) 更合适的细分方式了。

该用户从未签到

 楼主| 发表于 2014-5-10 08:30:00 | 显示全部楼层
好的,我再试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表