Ogre学习笔记(8):骨骼动画

Ogre:Animation(Ogre中的动画)    在Ogre中Animation是一块非常重要的部分,但是笔者在学习Ogre的动画时遗憾的发现关于Ogre中动画的资料非常的少,Ogre的sample中只有最简单的导入一个骨骼动画的例子,在网上也很少有人谈及,Ogre Wiki中的教程也是边边角角,不知这么重要的部分为什么不做一个全面的tutorial。我从网上的仅有的一些资料和自己的亲自试验总结了一下基本的Ogre动画的使用,当然Ogre的动画模块非常庞大,我总结的只是冰山一角,但是也是最常用的部分。    Ogre的动画框架: 阅读详情
       OGRE的基本动画控制是很简单的,设置一个动画的操作是这样:

       // Set idle animation

mAnimationState = ent->getAnimationState( "Idle" );  

mAnimationState->setLoop( true );

mAnimationState->setEnabled( true );

(上面这段代码来自Intermediate Tutorial1 – Ogre Wiki)从一个Entity对象中得到AnimationState指针,然后设置一些属性,在每帧需要调用:

       mAnimationState->addTime( evt.timeSinceLastFrame );

 

 

Skeleton的加载:

在SkeletalApplication::createScene()中

SkeletonPtr skel = SkeletonManager::getSingleton().load("jaiqua.skeleton",

                     ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);

这个语句用来读取骨骼文件。读取的操作在“Skeleton::loadImpl”函数中。此函数主要执行了两步操作,一是调用“SkeletonSerializer::importSkeleton()”,二是“Load any linked skeletons”。动画信息存储在Skeleton的“AnimationList mAnimationsList”成员变量中。

在Mesh类从存储了一个“SkeletonPtr mSkeleton”, SkeletonPtr是一个“SharedPtr<Skeleton>”的派生类。在load一个mesh是:

MeshSerializerImpl::readMesh()――case M_MESH_SKELETON_LINK:

――》MeshSerializerImpl::readSkeletonLink()
      
――》Mesh::setSkeletonName()
      
――》ResourceManager::load()――得到骨骼指针

Animation类的对象就是“An animation sequence”,各种类型的动画序列都由这个类来管理。它管理了三种类型的Track list,分别是:NodeAnimationTrack、NumericAnimationTrack、VertexAnimationTrack。

在Entity的构造函数中,如果Mesh含有骨骼动画或者顶点动画,则会new一个AnimationStateSet对象,并调用“mesh->_initAnimationState(mAnimationState);”。

 

 

动画的计算:

Entity中保存了一个SkeletonInstance对象指针,它是Skeleton的派生类。

主要运算就在“void Entity::updateAnimation(void)”函数中。

à Entity::cacheBoneMatrices
      
à Skeleton::setAnimationState
      
此函数先是调用“Skeleton::reset”,然后针对每个enabled animation state,找到其对应的Animation,然后调用Animation::apply()来计算每个Bone的状态。

 

整体感觉OGRE的动画管理结构比较混乱。Entity,Skeleton,Animation,AnimationState,SkeletonInstance之间的依赖关系过于复杂,并且存在循环依赖。

 

 
Ogre中手动控制骨骼运动的方法      Ogre作为一个强大的图形引擎,很好的支持骨骼动画,主要包括:(1)提供了从.max模型导出到.mesh和.skeleton动画文件的工具;(2)支持软硬件顶点混合技术,也就是Vertex Blending。关于这两个方面的阐述颇多,在此不再叙述。       此外,Ogre的程序还可以方便的手动控制骨骼运动,也就是不利用.mesh和.skeleton中的骨骼关键桢,而是直接用函数调用来 阅读详情

相关推荐

浅谈实现BVH驱动OGRE中模型制作骨骼动画

骨骼动画在OGRE中近几年被研究的也不少了,09年电子科技大学的《基于BVH驱动的OGRE骨骼动画》提出了BVH——XML——OGRE中SKELETON的转换方法,这是一篇具有很大参考价值的论文,我在摸不着头绪的时候试着实现这里边的方法,一遍下来后对OGRE骨骼动画的理解真是非常的深。 首先看看BVH文件是个什么东西,(插入BVH例子),打开这种文件可以用BV HACKER这个软件。 非常

BabySe1991的专栏 2830

Ogre共享骨骼与两种骨骼驱动方法

前言 最近业务中用到Ogre做基于3D关键点虚拟角色骨骼驱动,但是遇到两个问题: 身体、头、眼睛、衣服等mesh的骨骼是分开的,但是骨骼结构都是一样的,需要设置共享骨骼 驱动的时候可以直接修改骨骼旋转量,或者将旋转量存到动画帧里面去,后者会根据播放时间间隔自动插帧 国际惯例,参考博客: Ogre3D 实现角色换装 【Ogre-windows】旋转矩阵及位置解析 Ogre 换装系统 shareSkeletonInstanceWith 代码实现 下面分别包括:共享骨骼、关节驱动、动画帧驱动、遇到的坑 其中关

风翼冰舟的博客 1143

OGRE动画系统--骨骼动画

在骨骼动画中,模型具有互相连接的“骨骼”组成的骨架结构,通过改变骨骼的朝向和位置来为模型生成动画。 在骨骼动画,有一个过程叫做蒙皮,它的过程就是如何将模型的顶点与骨骼联系起来,比如说肩膀这个骨头有受到手臂这个骨骼影响也有受到肩膀这个骨骼想影响,它们都有一个影响值,那么在OGRE中,我们需要做一个限定,我们这边是限定每个顶点最多受到四个骨骼的影响,如果我们发现每个顶点超过四个骨骼,那么我们需要截取

smsmn的专栏 1046

OGRE骨骼动画的读取和播放

OGRE 本身附带了两套比较完整的骨骼动画模型,保存在 OGRE\Samples\Media\models 目录下,一套是机器人 ( robot.mesh 和 robot.skeleton ) ,一套是忍者 ( ninja.mesh 和 ninja.skeleton ) 。其中忍者的模型多边形数比较高,动作也比较丰富和细腻。我们就使用这个现成的忍者模型来学习骨骼动画的读取和播放。OGRE 的角色模

Hi_Panda 2784

一个ogre动画演示实例

ogre动画演示实例,源代码,轻松学习ogre

京东礼品卡绑定技术解析与安全验证实践

电商系统开发中,卡券绑定是常见的业务场景,其核心在于安全验证机制的设计与实现。从技术原理来看,现代验证系统通常采用多层防护,包括前端数据加密、行为验证(如滑块验证)和风控校验等关键技术。这些机制通过设备指纹采集、请求签名验证等方式,有效防范自动化攻击。在实际工程实践中,开发者需要特别关注接口鉴权流程,正确处理安全令牌(如st/vt令牌)和请求签名。京东礼品卡绑定作为典型案例,展示了如何平衡用户体验与系统安全,其验证系统会持续升级,需要开发者跟踪接口变化。对于企业级应用,建议采用混合模式技术方案,结合浏览器自

weixin_28607671的博客 234

OGRE 动画

动画是由若干静态画面,快速交替显示而成。因人的眼睛会产生视角暂留,对上一个画面的感知还末消失,下一张画面又出现,就会有动的感觉。计算机图形学中的动画也同样遵循着这一本质的原理。只不过不同于传统动画的手绘和拍摄,Ogre图形引擎可以通过自动或半自动的方式实时产生并播放动画图片。 不过Ogre本身并不能像人一样了解场景中动画角色动作的具体含义,例如它不能明确的知道什么是抬手或者走路,只能

痞子龙3D编程 6383

【BLE】HID设备开发实战:从自拍杆到复合设备的蓝牙控制方案

本文深入解析了BLE HID(低功耗蓝牙人机接口设备)的开发实战,从蓝牙自拍杆的工作原理切入,详细阐述了HID Report Map的设计与实现。通过拆解自拍杆、键盘、鼠标等案例,指导开发者如何利用BLE的低功耗与即插即用特性,构建从单一功能到键盘鼠标复合设备的完整蓝牙控制方案。

weixin_29159613的博客 465

Ogre手动添加骨骼动画

///初始化骨骼动画参数 Animation::setDefaultInterpolationMode(Animation::IM_LINEAR); Animation::setDefaultRotationInterpolationMode(Animation::RIM_LINEAR); ///得到实体 Ogre::Entity* ent = m_pRend

flyingpig204的专栏 1672

TCP三次握手,四次挥手的全过程,为什么需要三次握手,四次挥手

文章目录TCP介绍三次握手四次挥手滑动窗口拥塞避免算法 TCP介绍 三次握手 四次挥手

热爱编程的菜鸟 1万+

深入解析线性反馈移位寄存器(LFSR)的工作原理与实现

本文深入解析了线性反馈移位寄存器(LFSR)的核心原理与实现方法。通过生动的比喻和详细的步骤拆解,阐述了LFSR如何通过反馈多项式和移位操作生成伪随机序列,并对比了斐波那契型与伽罗瓦型两种硬件结构。文章还涵盖了LFSR在数字电路测试、通信扰码及快速伪随机数生成等关键应用场景,同时指出了其在密码学中的局限性,并提供了Python和C语言的高效实现代码示例。

weixin_29007243的博客 544

Ogre学习教程:Ogre1.8.1+VS2010环境配置

“伟大航路,我把世界上的一切都放在了那里,有种的话就去领取吧” 这是OGRE中文网的一则广告,我想,无论作为OGRE的学习者还是漫漫人生的一名旅人,这句话都是非常不错的激励语。放在这,是否能够让你隐约看到属于自己的新世界? Ogre(Object-oriented Graphics Rendering Engine)是一款优秀的C++开源图形渲染引擎。OGRE主要提供渲染引擎,

小熊不去实验室 1万+

《UE4游戏开发》之 《音效系统的实现》

音效系统需要负责管理什么事情: 1.1 确定声音控制的分类:如背景音乐、技能音效、界面音效、角色配音等,不同游戏对声音有不同的分类 1.2 控制每个分类的声音的开启与关闭,以及调节每个分类声音的大小 解决如何分类: 2.1 首先需要知道ue4为声音分类提供了什么:SoundClass通常需要一个根分类【SC_RPG_Master】,便于总体控制音效,以及指定引擎默认启动的音效 打开SoundClass资产【SC_RPG_Master】,对根控制的设置,将逐级传递并按比例进行设置,以此达到控制一类声音的目的.

qq_21919621的博客 2126

OGRE 火炬之光(torchlight) 骨骼动画

源自于:http://hi.baidu.com/zyb_debug/blog/item/56656f02cf6c367d3812bb87.html 今天去ogre官网赚了一圈,看到了一款用Ogre做的游戏TorchLight,不妨下下来玩玩。游戏做的很好,说明ogre的强大。在安装目录里看到了ogreMain.dll OIS.dll等熟悉的dll,忽然看到了resources.cf

yeazer0的专栏 5701

从零构建:用Simulink搭建固定翼无人机六自由度模型的避坑指南

本文详细介绍了使用Simulink从零构建固定翼无人机六自由度动力学模型的完整流程和避坑指南。重点解析了模型架构设计、气动力计算、参数配置、仿真求解器选择等关键环节的常见问题与解决方案,帮助开发者快速建立准确可靠的无人机控制系统仿真模型。

hhh00的博客 999

基于DE2-115红外解码实验

基于DE2-115红外解码实验   一、   功能描述 在同一个遥控电路中通常要使用实现不同的遥控功能或区分不同的机器类型, 这样就要求信号按一定的编码传送,编码则会由编码芯片或电路完成。对应于编码芯片通常会有相配对的解码芯片或包含解码模块的应用芯片。在实际的产品设计或业余电子制作中,编码芯片并一定能完成我们要求的功能,这时我们就需要了解所使用的编码芯片到底是如何编码的。只有知道编码方式,我...

乘风的博客 2515

Ogre骨骼动画

一、基本框架 先看一下OGRE动画的基本框架: http://blog.youkuaiyun.com/leonwei/article/details/5819248   二、动画控制 OGRE的基本动画控制是很简单的,设置一个动画的操作是这样:   // Set idle animation mAnimationState = ent->getAnimation

Hi_Panda 1790

【SWAT水文模型】SWAT-CUP参数率定与模型验证实战指南

本文提供了SWAT水文模型参数率定与模型验证的完整实战指南。详细介绍了如何使用SWAT-CUP工具,特别是SUFI-2算法,进行自动化参数校准,并阐述了模型验证的关键步骤以避免过度拟合。内容涵盖从工程搭建、核心参数选择、迭代优化到结果分析与常见问题排查的全流程,旨在帮助用户提升SWAT模型模拟的准确性与可靠性。

weixin_29072299的博客 499

探索Blender与Ogre3D的桥梁:blender2ogre项目深度解析

在数字艺术的广阔天地中,Blender与Ogre3D各自以其强大的功能和灵活性,成为了3D艺术家和游戏开发者的得力助手。然而,将这两大工具无缝连接,一直是技术实现上的挑战。今天,我们将深入探讨一个开源项目——blender2ogre,它不仅架起了Blender与Ogre3D之间的桥梁,还为开发者提供了前所未有的便利。 ## 项目介绍 blender2ogre是一个开源插件,专为Blender

gitblog_00546的博客 1110

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

使用bvh数据实现OGRE骨骼动画

忙活了一段时间,终于在数据资料驴唇不对马嘴,导出插件严重不靠谱,参考资料不仅数量少而且质量也不高的基础上,完成了读取动作捕捉设备获取的bvh数据并驱动Maya导出模型,最终在OGRE中实现了骨骼动画。 表面看起来实现OGRE骨骼动画很简单,就是将bvh中各关节的数据赋给OGRE骨骼动画。实际实现的时候会发现有很多细节的问题需要注意,如bvh关节怎样和模型的关节对应起来,如果bvh有22个关节,而

Augmented Reality & Computer Graphics 6470

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

如何快速掌握 Blender 到 OGRE 3D 引擎导出器(blender2ogre):从安装到高级功能的完整指南 ...

**blender2ogre** 是一款强大的 Blender 插件,专为 OGRE 3D 引擎设计,能够无缝导出模型、材质和动画资源至 OGRE 兼容格式。无论是新手还是资深开发者,都能通过本指南快速上手,释放 Blender 与 OGRE 3D 引擎结合的强大潜力。 ## ???? 目录 - [???? 为什么选择 blender2ogre?](#-为什么选择-blender2ogre) - [????...

gitblog_00323的博客 532

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Ogre骨骼动画融合

很多商业引擎都支持骨骼动画融合这个功能。融合可以让你的动画自然过渡到下一个动画,你可以精确控制下一个动画播放时间等信息。Ogre其实也支持动画的融合,只是Ogre并没有给出代码级的支持。PS:Ogre很有意思,他天然支持很多东西,但是都没有实现出来,需要你来实现。好的,下面来通过代码看看如果进行一个简单的骨骼动画融合。 程序代码class AnimationBlender{public:    e

痞子龙3D编程 3064

OGRE手动控制骨骼动画

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 本博客参考:<a rel="nofollow" href= "http://blog.youkuaiyun.com/ArenAK/archive/20

moonboat0331的专栏 775

Ogre中动态绑定骨骼动画

<br />Ogre中动态绑定骨骼动画<br />Ogre中的骨骼动画通常是一个代表角色skin的多边形网格.mesh和一个代表bones运动轨迹的.skeleton(一个角色的所有动作如walk、wave、swim、和dance等都包含在这个.skeleton中)。通常Ogre在加载.mesh的时候,会自动把和.mesh关联的.skeleton进行绑定。<br />但是,很多时候,一个mesh只对应一个skeleton是不方便的,因为不同的角色常会使用同样的骨骼动画,如果让一个mesh对应多个skelet

beyondgirlzxm的专栏 2662

ogre 学习笔记 - Day 8

ogre 学习笔记 - Day 8

weixin_43859510的博客 1852
上一篇: Ogre学习笔记(7):Lighting
下一篇: Ogre学习笔记(9):API 抽象层
yanonsoftware
博客等级 码龄21年 104粉丝 67原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值