python 3d游戏记录路径_基于osg的python三维程序开发(五)------沿路径运动

在上一节中, 我们演示了如何更新节点的状态, 这是动画的基本的技巧。 这一小节里,我们看一个稍微复杂一点的例子------让物体沿着固定的路径运动。

在osg 中,使得物体沿着固定路径运动, 会用到几个重要的类;

1. osg::AnimationPath

2. osg::AnimationPathCallback

这两个类一般是联合使用。 其中osg::AnimationPath定义了路径,通常路径由许多控制点组成。 AnimationPathCallback是一个NodeCallback的子类,用来更新模型的位置。

下面的代码从osg c++ 版本的osganimation的例子改写而来。

我们先来定义一条路径

1 defcreateAnimationPath(center,radius,looptime):2 #set up the animation path

3 animationPath =osg.AnimationPath()4 animationPath.setLoopMode(osg.LOOP)5 numSamples = 40

6 yaw = 0.0

7 yaw_delta = 2.0*osg.PI/(numSamples-1.0)8 roll = osg.inDegrees(30.0)9 time=0.0

10 time_delta = looptime/(numSamples)11 for i inrange(numSamples):12 #position = center+[math.sin(yaw)*radius,math.cos(yaw)*radius,0.0]

13 delta = [math.sin(yaw)*radius,math.cos(yaw)*radius,0.0]14 position = [x+y for x , y inzip(center, delta)]15 q1 = osg.Quat(angle=roll, axis=[0.0,1.0,0.0])16 q2 = osg.Quat(angle = -(yaw+osg.inDegrees(90.0)), axis=(0.0,0.0,1.0))17 rotation =q1.multiply(q2)18 animationPath.insert(time,osg.ControlPoint(position = position,rotation =rotation))19 yaw = yaw +yaw_delta20 time = time +time_delta21 return animationPath

四元数是一种非常重要的描述物体位姿的数据,相关的知识可以参考透视几何方面的书籍。上面的代码仅演示如何用python来定义一条路径。完整的代码可以参考开源网址

https://github.com/enigma1997/pyosg 项目的例子。下面是最终的结果。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值