关键帧和动画
Keyframes and Animation
关键帧就是预先记录各个级别的动画数据。前面的机械手和太阳系系统都是在运行的时候计算出动画的。
关键帧就是一个对于模型各级别在某个时刻的重要位置。比如关键转完处,动作变向处等。
通过一定算法,计算机能自动计算出其关键帧之间的动作位置。这样我们就能产生平滑的动画了。如果做过flash和photoshop的朋友都知道这个概念。
但是怎么计算出?用什么算法?这就是个非常复杂的大问题了。比如用photoshop的会知道bezier曲线,那是由挺复杂的数学支持的。
而且一般不直接用矩阵来计算,而是把变换矩阵分解为三个部分旋转(rotation),缩放( scaling),移位(translation),(为什么?因为算法需要)。使用Direct3D函数:D3DXMatrixDecompose .
一般会用到四元组来表示旋转。
计算中间帧的过程,计算t时段的中间帧:
1 找到两个关键帧Kj和kj+1发生在t0,和t1,这样t0<=t<=t1。
2 单位化t∈[t0,t1]到t∈[0,1],并使用插值算法计算其旋转矩阵。
如下计算其中间帧的旋转矩阵:
struct Keyframe
{
float time;
D3DXQUATERNION R;
D3DXVECTOR3 S;
D3DXVECTOR3 T;
};
//用L返回计算所得的变换矩阵。
void interpolateBone(Keyframe& K0, Keyframe& K1, D3DXMATRIX& L)
{
// Transform to [0, 1]
float t0 = K0.time;
float t1 = K1.time;
float lerpTime = (t - t0) / (t1 - t0);
// Compute interpolated RST values.
D3DXVECTOR3 lerpedT;
D3DXVECTOR3 lerpedS;
D3DXQUATERNION lerpedR;
D3DXVec3Lerp(&lerpedT, &K0.T, &K1.T, lerpTime);//Direct3D函数,线性插值算法
D3DXVec3Lerp(&lerpedS, &K0.S, &K1.S, lerpTime);
D3DXQuaternionSlerp(&lerpedR, &K0.R, &K1.R, lerpTime);//圆形插值算法
// Build and return the interpolated to-parent
// matrix for this bone.
D3DXMATRIX T, S, R;
D3DXMatrixTranslation(&T, lerpedT.x, lerpedT.y, lerpedT.z);
D3DXMatrixScaling(&S, lerpedS.x, lerpedS.y, lerpedS.z);
D3DXMatrixRotationQuaternion(&R, &lerpedQ);
L = R * S * T;//用L返回计算所得的变换矩阵。
}
.X文件可以存储相关矩阵信息。D3DX中有API IDSDXAnimationController接口可以自动计算其中间位置。
分享到:
相关推荐
对fbx中的关键帧动画进行播放控制, Osg中使用的思路:1、用osg的fbx插件读取fbx到osg模型 2、解构得到的osg模型,将模型分解成一个个的关键帧(osgAnimation::KeyFrame), 3、重组关键帧得到需要的动画 3.1 重组...
html5关键帧樱花动画动画
关于关键帧动画、过渡动画的学习,新手入门小案例练习 有三个小案例:简单风景画 、轮盘旋转 、图片轮播
swift写一个简单的基于关键帧的动画框架.zip,A simple keyframe-based animation framework for iOS, written in Swift. Perfect for scrolling app intros.
核心动画的关键帧动画
jquery绑定 css3 animation-keyframes关键帧动画,,,,,,,
外太空 外太空世界的技术演示! 该演示仅使用CSS制作,并使用了关键帧和动画等功能。 使用聪明的SCSS功能创建星星。 此项目未使用JavaScript。 该项目是使用我自己的 Gulp Build构建的(可随意使用!)。
效果很炫,一般应用没有的效果,保存方便使用
3D MAX里复制动画的关键帧.doc 3D MAX里复制动画的关键帧.doc
带关键帧的非三次贝塞尔曲线缓解 使用关键帧和动画进行非三次贝塞尔曲线的缓动。 在这里使用: : 项目设置 安装依赖项: yarn install 在开发模式下运行应用程序: yarn serve 运行测试: yarn test:unit
如何更改导入unity动画的关键帧步骤
WPF通过代码编写关键帧动画,实现了一组LED灯的颜色渐变。
开发工具: Microsoft Visual Studio 2005 Microsoft DirectX 9.0 SDK Update
第四章iOS动画关键帧动画 深入学习关键帧动画 中文学习iOS动画很好的参考文档
博客Vulkan_顶点着色器妙用5(关键帧动画)使用模型,三个老鹰obj模型,其中所有关键帧中顶点的数量一致,并能够形成一 一对应的关系。
AE关键帧动画.mp4
逐帧动画是一种常见的动画形式(Frame By Frame),其原理是在“连续的关键帧”中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画。 因为逐帧动画的帧序列内容不一样,不但给制作...
刚开始学习flash的时候总是搞不清楚帧,关键帧,空白关键帧,这也是刚学时候的资料,希望对初学者有帮组
Qt Creator 4.2.1@windows 10设计交互界面,用户通过界面交互输入数据 进行线性插值和矢量线性插值并输出插值结果
简单的电梯开关路径关键帧动画3DMAX制作,FBX格式,比较简单。