Cal3d库user guide里部分翻译

4.5 The 'Mixer' 混合器

Cal3D库通过所谓的的混合器提供了一个强大和灵活,而且便于使用的动画控制系统。

这个帮助类为模型实例处理以下几点:

1. 给现在的动画集合添加和删除动画

2. 更新现在的动画状态包括淡入和淡出

3. 根据动画的类型而加权融合和优先覆盖

4. 更新当前骨骼的姿势

 

当触发一个新的动画时,你可以选择不同表现方式(behavior)。目前已经实现的是周期型(cycle)和动作型(action)两种。周期型动画一旦开始就会不停循环直到你显式停止它。 这非常合适像走路和游泳类的动作。 而动作型就只执行一次,然后就从当前动作集合里自动去除掉。你可以想象这种类型就很适合战斗动作和表情。Cal3D计划以后拓展新的表现方式。

每个当前的动画都有一个相关的权值。这个值能微调每个动画对于模型的影响度。此外,每个动画类型在融合过程中有不同的优先级。在目前cal3D库,动作型比周期型高。这使得在周期型动画时可以执行动作。

 

Example 4-3. The waving Limper 

不幸的是,前面例子里那个人型摆动walker拌了一跤,现在左腿瘸了。除了定义在全身骨骼上的走路动作和局部的摆动动作,我们还要加一个作用在下半身的瘸的动作。通过混合器以60%40%的比率来融合走路周期和瘸的周期,我们可以轻松地给模型赋一个轻微的瘸的动作。 因为摆动是动作型,比两个周期型(走和瘸)优先级高,所以它完全覆盖在它所定义的骨骼上。当小伤开始愈合,你可以连续降低拐的权重直到最好完全淡出。

如果你想和预期的一样使用这个融合系统,那么就要注意几点。确保动作型动画只包含确实受到影响的骨骼范围,否则他们会因为较高的优先级而完全覆盖周期型动画。一起融合的周期型动画也要同步下才能有一个好看的结果。注意这个同步只是运动位移,而不是动画持续时间,因为这个调整是在混合器内部处理的融合过程。

 

 

5.3.5. Animation Control 动画控制

现在Cal3D已经实现了两种动画类型:

1. 周期型,循环重复动作

2. 动作型,一次性

注意所有核心模型(core model)中的动画都可以用这两种类型表现。

 

有两个函数可用来控制周期型:CalMixer.Helper类中的

blendCycle()  clearCycle() 

 

blendCycle 可以在规定时间内调节周期型动画的权重。这可以用来淡入一个新的周期或修正现在周期的权重。第一个参数是动画标识符,由动画装载时返回。第二个参数是周期型的权重。第三个和最后一个是给定权重到达的延迟。这个值用来无缝地融合两个不同的周期型和避免突然动作变化。

 

clearCycle() 在一个指定时间内淡出一个周期动画。第一个参数也是动画标识符。第二个是动画权重到达0的延迟。

 

  myModel.getMixer()->clearCycle(idleAnimationId, 0.3f);

  myModel.getMixer()->blendCycle(walkAnimationId, 0.8f, 0.3f);

  myModel.getMixer()->blendCycle(limpAnimationId, 0.2f, 0.3f);

 

 

executeAction() 是用来执行一个动画。它把动画标识符作为第一个参数。第二个和第三个参数是淡入和淡出延迟。动作只执行一次。

 

  myModel.getMixer()->executeAction(waveAnimationId, 0.3f, 0.3f);

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值