CSharpGL(50)使用Assimp加载骨骼动画

栏目: ASP.NET · 发布时间: 7年前

内容简介:CSharpGL(50)使用Assimp加载骨骼动画在(在(

CSharpGL(50)使用Assimp加载骨骼动画

在( http://ogldev.atspace.co.uk/www/tutorial38/tutorial38.html )介绍了C++用Asismp库加载骨骼动画的原理和流程。

在( http://wiki.jikexueyuan.com/project/modern-opengl-tutorial/tutorial45.html )是其中文版译文。

本文用CSharpGL借助Assimp库实现加载和渲染骨骼动画的功能。

CSharpGL(50)使用Assimp加载骨骼动画

下载

CSharpGL已在GitHub开源,欢迎对OpenGL有兴趣的同学加入( https://github.com/bitzhuwei/CSharpGL

在.NET下使用Assimp

三维模型解析库Assimp本身是用C++编写的,所幸有一个C#的封装( https://github.com/assimp/assimp-net )。使用此封装即可直接在CSharpGL中调用Assimp了。

将Assimp32.dll、Assimp64.dll和AssimpNet.dll都放到项目所在目录下,在Reference中添加对AssimpNet.dll的引用即可。

CSharpGL(50)使用Assimp加载骨骼动画

CSharpGL(50)使用Assimp加载骨骼动画

渲染骨骼动画

Assimp加载模型后得到的数据结构如下:

1 public sealed class Scene
2 {
3     public Animation[] Animations { get; }
4     public Material[] Materials { get; }
5     public Mesh[] Meshes { get; }
6     public Node RootNode { get; }
7 }

按我的理解,其中的RootNode就是骨骼的根结点。整个骨骼构成一个树结构。每个结点都包含一个mat4 Transform矩阵,用于描述自己相对于父结点的方位变化。子结点代表的骨骼,其绝对方位由根结点的Transform逐步地乘到自己的Transform来得到。“绝对方位”指的就是在Model Space中的方位。

CSharpGL(50)使用Assimp加载骨骼动画

如图所示,红色的小方块描述了骨骼所在的绝对位置(这里的骨骼对应人体的关节)。从红到白渐变的线条描述了骨骼之间的父子关系,红色一端为父结点,白色一端为子结点。两脚之间的那个红色小方块,就是根结点RootNode。用半透明方式渲染的两臂水平摆放的,就是模型的默认位置。

上图这个模型,只有一个“拿起灯左右查看”的动作(Animation)。其他模型可能有多个动作,它们构成一个数组(Assimp.Animation[])。每个Animation都指定了这个模型的所有骨骼在所有关键帧上的Transform值。这样,通过按时间顺序依次经历各个关键帧(更准确地说,是在2个相邻的关键帧之间插值),就可以得到骨骼在各个时刻的Transform。再让模型的顶点依附于骨骼而动,就实现了骨骼动画。

模型上的一个顶点,要记录自己都依附于哪几个骨骼,自己对这几个骨骼依附的权重分别是多少(权重之和为1)。然后,就可以从默认的初始位置(用半透明方式渲染的两臂水平摆放的那个位置)变换到骨骼要求的位置。

顶点的这一变换过程我还没弄明白。这里需要的Offset Matrix到底是什么。据我查资料,外加计算,Offset Matrix就是那个让骨骼结点变换到绝对方位的矩阵的逆矩阵。但是总觉得有点想不通的地方,确不知道是哪里。

(暂留空白,来日补充。)

总结

骨骼动画的原理网上有很多介绍了。我还没有透彻理解,所以不对本文的原理部分负责。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Numerical Linear Algebra

Numerical Linear Algebra

Lloyd N. Trefethen、David Bau III / SIAM: Society for Industrial and Applied Mathematics / 1997-06-01 / USD 61.00

Numerical Linear Algebra is a concise, insightful, and elegant introduction to the field of numerical linear algebra.一起来看看 《Numerical Linear Algebra》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具