环境说明
代码使用osg3.6版本。不同版本的API 会有变化,可能编译不过或没有效果。如果要运行代码,请确定使用osg3.6版本。
本文以Qt作为渲染窗口载体,osgqt的编译实现不在介绍范围内,默认已经编译通过。
实现原理
路径动画的底层实现原理,本质上是基于时间的插值计算(Time-based Interpolation)与矩阵变换(Matrix Transformation)的结合
动画的起点是一组离散的关键帧数据。每个关键帧通常包含:
- 时间戳 ( tt ):该帧发生的时间。
- 状态值 ( vv ):如三维空间中的位置 (x,y,z)(x,y,z) 、旋转 (qx,qy,qz,qw)(qx,qy,qz,qw) 或缩放 (sx,sy,sz)(sx,sy,sz) 。
在osg中,需要PositionAttitudeTransform,AnimationPath和AnimationPathCallback这三个类配合使用,完整路径动画效果。
osg::PositionAttitudeTransform
运动的载体。它是一个继承自 osg::Group 的变换节点,与通用的 osg::MatrixTransform 相比,PAT 在内部将平移和旋转分开存储,避免了每次修改位置或角度时都需要重新计算整个 4x4 矩阵,因此在频繁更新位置/旋转的场景(如路径动画)中性能更高。你需要把想要运动的模型(如飞机、飞船)作为 PAT 的子节点。
osg::AnimationPath
一个数据容器。存储动画的“关键帧”数据。它内部


406

被折叠的 条评论
为什么被折叠?



