AWay3D 动画位置变化的问题
来源:互联网 发布:按网络拓扑结构分类 编辑:程序博客网 时间:2024/06/10 13:18
AWay3D 动画位置变化的问题
无意中发现away3d中骨骼动画在播放时模型的位置会增量移动,也就是如果某个动作root骨骼第一帧和最后一帧位置不一致的话,播放这个动画的模型就会一直累加这两帧的位置差。 还有就算是第一帧和最后一帧的位置相同,但在动画未播放完时切换到另一个动画,如果此时root的位置有改变,那么模型的位置也会移动。
断点调试,发现AnimatorBase这个类中有一个函数applyPositionDelta()
private function applyPositionDelta() : void
{
var delta : Vector3D = _activeState.positionDelta;
var dist : Number = delta.length;
var len : uint;
if (dist > 0) {
len = _owners.length;
for (var i : uint = 0; i < len; ++i)
_owners[i].translateLocal(delta, dist);
}
}
里面调用了_owners[i].translateLocal(delta, dist); 就是它导致了模型的移动。于是乎果断给它注释掉。结果可想而知,动画播放有问题。问题表现为:动画的root骨骼没有位移变化。所以可以猜想是away3d在计算动画插值时动了手脚,有了这个思路后继续断点查找,在SkeletonClipState类里发现了updateSkeletonPose方法,
private function updateSkeletonPose(skeleton:Skeleton) : void
{
.....
.....
for (var i : uint = 0; i < numJoints; ++i) {
.....
.....
if (i > 0) { // 这里导致root骨骼没有计算位置插值
tr = endPose.translation;
tr.x = p1.x + _blendWeight*(p2.x - p1.x);
tr.y = p1.y + _blendWeight*(p2.y - p1.y);
tr.z = p1.z + _blendWeight*(p2.z - p1.z);
}
}
}
它在计算位置时加了一个条件 i > 0,也就是root没有计算。于是再一次果断去掉这个条件。呵呵,暂时就一切正常了。(是暂时... 因为目前还没发现它会不会印象其他地方的运作)
- AWay3D 动画位置变化的问题
- 解决AWAY3D的SegmentSet失效问题
- Away3d ---------------------------------------------骨骼动画优化
- TranslationAnimation类:位置变化动画类
- android TranslateAnimation类:位置变化动画类
- android 动画位置问题
- FPS中子弹飞行轨迹随视点位置变化而变化的问题
- Emulator Control位置的变化
- away3d在ipad上运行的dpi问题
- Away3D Lite:away3d使用者的福音
- Away3D Lite:away3d使用者的福音
- iOS block-base 动画简单用法+关键帧动画设置线性变化速度的问题
- iOS block-base 动画简单用法+关键帧动画设置线性变化速度的问题
- TranslateAnimation类是Android系统中的位置变化动画类
- Android动画开始位置问题
- away3d method的用法
- Away3D-------------------------------------------Material的渲染
- 布局变化时的动画
- MySql实现远程连接
- PHP面试题集
- linux 内核编译笔记 (jettison, snowflock)
- 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10
- 最近重新看了下C++ primer 总结了C++开发中需要注意的要点,罗列如下
- AWay3D 动画位置变化的问题
- 自定义Dialog
- mysql 導入數據的操作
- 适合Go语言初学者的资料
- ora00054 资源正忙
- MathType公式与Word文档文字对齐的解决办法
- 忘记就像烟火过后的天空
- shell sort 排序 二次排序 去重
- 上班几天了。。