OSG-场景动画基础知识_刚体动画

2024-02-14 05:48

本文主要是介绍OSG-场景动画基础知识_刚体动画,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简单路径动画:

   简单的路径动画不一定需要osgAnimation中丰富多彩的插值与关键帧采样机制,用户只需要输入某个对象节点在每个时刻的关键路径点、包括位置、旋转、缩放,就足以表达复杂的缸体动画形态了。AnimationPath即是满足该需求的类。


类图说明:

  以下是osg该功能大概类图。   


简单需求样例:

    平移并且旋转的牛


代码使用示范:

/*
* 鹰击长空 2016/08/14
* 简单刚体路径动画
*/
osg::Node* createAnimationPathNode()
{osg::Node* pNode = osgDB::readNodeFile("cow.osg");//创建动画路径osg::ref_ptr<osg::AnimationPath> pAnimationPath = new osg::AnimationPath;pAnimationPath->setLoopMode(osg::AnimationPath::LOOP);pAnimationPath->insert(0.0, osg::AnimationPath::ControlPoint(osg::Vec3(0.0, 0.0, 0.0), osg::Quat(0.0, osg::X_AXIS, 0.0, osg::Y_AXIS, 0.0, osg::Z_AXIS)));pAnimationPath->insert(2.0, osg::AnimationPath::ControlPoint(osg::Vec3(5.0, 0.0, 0.0), osg::Quat(osg::PI, osg::X_AXIS, 0.0, osg::Y_AXIS, 0.0, osg::Z_AXIS)));pAnimationPath->insert(4.0, osg::AnimationPath::ControlPoint(osg::Vec3(10.0, 0.0, 0.0), osg::Quat(0.0, osg::X_AXIS, osg::PI, osg::Y_AXIS, 0.0, osg::Z_AXIS)));pAnimationPath->insert(6.0, osg::AnimationPath::ControlPoint(osg::Vec3(15.0, 0.0, 0.0), osg::Quat(0.0, osg::X_AXIS, 0.0, osg::Y_AXIS, osg::PI, osg::Z_AXIS)));pAnimationPath->insert(8.0, osg::AnimationPath::ControlPoint(osg::Vec3(0.0, 0.0, 0.0), osg::Quat(0.0, osg::X_AXIS, 0.0, osg::Y_AXIS, 0.0, osg::Z_AXIS)));//创建更新动画回调osg::ref_ptr<osg::MatrixTransform> pMatrixTransform = new osg::MatrixTransform;pMatrixTransform->addChild(pNode);pMatrixTransform->setUpdateCallback(new osg::AnimationPathCallback(pAnimationPath.get()));return pMatrixTransform.release();
}


这篇关于OSG-场景动画基础知识_刚体动画的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/707651

相关文章

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

Java中Runnable和Callable的区别和联系及使用场景

《Java中Runnable和Callable的区别和联系及使用场景》Java多线程有两个重要的接口,Runnable和Callable,分别提供一个run方法和call方法,二者是有较大差异的,本文... 目录一、Runnable使用场景二、Callable的使用场景三、关于Future和FutureTa

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W