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

【文章阅读+代码复现】Point-GNN

Brief 在3D点云语义分割方法中,GNN已经做了很多可用的方案,但是在目标检测上依旧是采用比较传统的CNN和稀疏卷积的组合,这一篇文章是研究了图卷积在3D检测的中的用法。来自卡内基梅隆大学。已经被CVPR2020接收. 这里是 paper 这里是 code Abstruct 一个采用GNN设计的3D目标检测框架 过程是先将点云场景编码成图结构,随后设计了一个叫point-GNN的网络结构,在...

有所为,有所成长 1万+

OGRE 动画

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

痞子龙3D编程 6383

Ogre手动添加骨骼动画

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

flyingpig204的专栏 1672

一文讲透 .claude/ 文件夹:Claude Code 团队配置指南和最佳实践

本文系统梳理了ClaudeCode配置框架,旨在解决实际落地中的常见困惑。文章从五层作用域体系(组织策略、命令行参数、本地覆盖、项目级、用户级)切入,详细解析了CLAUDE.md、rules、skills、agents等核心组件的定位与配合关系。重点强调了"确定性规则"与"概率性建议"的分层设计:权限控制和安全边界应通过settings.json和hooks实现,而工作约定和编码规范适合放在CLAUDE.md。文中提供了可直接套用的最小配置方案,并总结了10大常见踩坑

977

液晶电视维修必看:TCON逻辑板故障排查全指南(附常见问题解决方案)

本文详细解析了液晶电视TCON逻辑板的工作原理与故障排查方法,涵盖LVDS信号处理、DC-DC电压系统等核心知识。提供从基础测量到高级维修的完整指南,帮助技术人员快速诊断黑屏、竖线等常见故障,并给出预防性维护建议,提升维修效率与成功率。

weixin_42535461的博客 615

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

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

小熊不去实验室 1万+

ArcGIS基础:CAD数据转换为GIS数据(符号化显示、数据转换、线转面、空间连接)

1、符号化显示: CAD数据加载进来有很多列表,包含了点【point】、线【polyline】、面【polygon】、标注数据【Annotation】等数据,本次实验我们需要用到的是面数据,也就是.dwgPolygong格式的数据。如下图所示: 把数据加载进来,然后在2处打开属性表,查看CAD数据的属性表,打开后可以发现【layer】图层表示就是地块的用地性质,它就是符号化显示的依据。 我们在数据上右键【属性】,打开图层属性,找到【符号系统】,选择类别中的【唯一值】,然后在【值字段】下拉选择【layer】,

yuanYW7556的博客 2万+

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

VLA算法总结对比——RT1 / RT2 / Pi0 / Octo/ RDT / OpenVLA

本文主要针最近比较经典的VLA算法进行对比总结,暂不涉及到代码细节和实验细节上的展开,仅仅是从大面上掌握下目前VLA的一些思路和方法。

weixin_44580210的博客 9496

微信自动化进阶:Python识别特定消息并自动回复(基于win32api控件操作)

本文详细介绍了如何使用Python和win32api实现微信消息的智能监控与自动回复。通过精准识别聊天记录中的特定关键词,结合多级匹配策略和性能优化技巧,构建稳定高效的自动化回复系统,适用于企业客服、个人助手等场景。

weixin_42663213的博客 441

Ogre骨骼动画

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

Hi_Panda 1790

基于C#开发ABB机器人上位机系统:从操作控制到数据交互的全方位实现

ABB工业机器人是世界领先的自动化设备之一,广泛应用于焊接、装配、搬运、喷涂、包装等多个行业。机器人控制器:用于控制机器人运动、路径规划、状态监控等。上位机系统:提供人机交互界面,允许操作员与机器人进行交互,实现实时控制、参数调整和数据分析。上位机系统通过与机器人控制器通信,采集机器人状态数据,发送控制指令,实现远程监控和控制操作。通过高效的操作界面和数据交互,可以大大提高机器人的工作效率和系统的可维护性。基于C#开发ABB机器人上位机系统,能够实现高效的机器人控制与实时数据交互。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1178

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

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

gitblog_00546的博客 1110

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

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

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

Augmented Reality & Computer Graphics 6470

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

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

gitblog_00323的博客 532

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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、付费专栏及课程。

余额充值