一般骨架模型由两部分组成:

  • Rigging(bone):相当于骨架,可以用来控制模型的动作
  • Mesh(skin):相当于表面皮肤

骨架模型一般是层级结构的,比如上面 背骨是root,他的孩子包括胳膊、腿,手指就是再下一层的结构。当父结构运动时,带动子结构也运动。而子结构运动时,父结构不一定运动。

图形引擎制作动画:

对于每个顶点添加一个槽数组,每个槽包含一个骨骼的ID和权重。此处给每个数组分配了四个槽(与每个顶点关联的骨骼不超过4个)

骨骼ID是一系列骨骼转换的索引。权值用于将一系列骨骼的转换合并为一个转换,并且在任何情况下权值总和为1。通常会在动画关键帧之间插值,并更新每一帧的骨骼转换数组。

骨骼转换阵列的创建通常是比较复杂的部分。转换是一个层级结构,通常的做法是为树的每个节点绑定一个缩放向量、一个旋转四元数和一个平移向量。数组中的每个条目都必须有一个时间戳。应用程序时间与其中一个时间戳完全匹配的情况很少,因此我们的代码必须能够插值 缩放/旋转/转换 三种变换,以获得应用程序时间点的正确转换。我们对从当前骨骼到根骨骼的每个节点都做同样的处理,然后将这个转换链相乘得到最终结果。对每个骨骼都这样做,然后更新着色器。

以上所说都是通用的。

原文:http://ogldev.atspace.co.uk/www/tutorial38/tutorial38.html

完整翻译:https://blog.csdn.net/zju_fish1996/article/details/52450008

OpenGL step by step 38 : Skeletal Animation with Assimp的更多相关文章

  1. 转载自~浮云比翼:Step by Step:Linux C多线程编程入门(基本API及多线程的同步与互斥)

    Step by Step:Linux C多线程编程入门(基本API及多线程的同步与互斥)   介绍:什么是线程,线程的优点是什么 线程在Unix系统下,通常被称为轻量级的进程,线程虽然不是进程,但却可 ...

  2. 转:eclipse以及step into step over step return的区别

    首先来讲一下step into step over step return的区别: step into就是单步执行,遇到子函数就进入并且继续单步执行:(F5) step over是在单步执行时,在函数 ...

  3. 课程五(Sequence Models),第一 周(Recurrent Neural Networks) —— 1.Programming assignments:Building a recurrent neural network - step by step

    Building your Recurrent Neural Network - Step by Step Welcome to Course 5's first assignment! In thi ...

  4. 课程四(Convolutional Neural Networks),第一周(Foundations of Convolutional Neural Networks) —— 2.Programming assignments:Convolutional Model: step by step

    Convolutional Neural Networks: Step by Step Welcome to Course 4's first assignment! In this assignme ...

  5. Python 调试:step into/step out/step over 的区别

    Python 调试:step into/step out/step over 的区别: 首先在PyCharm 程序中设置 “ 断点 ”,后点击右上角的Debug 按钮进入调试程序状态: step in ...

  6. WPF Step By Step 系列-Prism框架在项目中使用

    WPF Step By Step 系列-Prism框架在项目中使用 回顾 上一篇,我们介绍了关于控件模板的用法,本节我们将继续说明WPF更加实用的内容,在大型的项目中如何使用Prism框架,并给予Pr ...

  7. 【转载】MDX Step by Step 读书笔记(三) - Understanding Tuples (理解元组)

    1. 在 Analysis Service 分析服务中,Cube (多维数据集) 是以一个多维数据空间来呈现的.在Cube 中,每一个纬度的属性层次结构都形成了一个轴.沿着这个轴,在属性层次结构上的每 ...

  8. Step by Step Process of Migrating non-CDBs and PDBs Using ASM for File Storage (Doc ID 1576755.1)

    Step by Step Process of Migrating non-CDBs and PDBs Using ASM for File Storage (Doc ID 1576755.1) AP ...

  9. Step By Step(userdata)

    Step By Step(userdata) 在Lua中可以通过自定义类型的方式与C语言代码更高效.更灵活的交互.这里我们通过一个简单完整的示例来学习一下Lua中userdata的使用方式.需要说明的 ...

随机推荐

  1. Java 将 List 里面的内容写入桌面的 txt 文档

    文件内容: /** * 将 list 写入文件中 */ import java.io.BufferedWriter; import java.io.File; import java.io.FileW ...

  2. JAVA自学笔记12

    JAVA自学笔记12 1.Scanner 1)JDK5后用于获取用户的键盘输入 2)构造方法:public Scanner(InputStream source) 3)System.in 标准的输入流 ...

  3. 2、html补充

    今天补充几个html标签 <body>内常用标签 1.<div>和<span> <div></div> : <div>只是一个块 ...

  4. pygame-KidsCanCode系列jumpy-part17-mask-collide碰撞检测

    这节我们研究下pygame的几种碰撞检测模式: 如上图,左侧是默认的检测模式:基于矩形的检测(这也是性能最好的模式), 右侧是基于圆形的检测(性能略差于矩形检测). 矩形检测法虽然性能好,但是缺点也很 ...

  5. Sqoop: ERROR manager.SqlManager: Error reading from database: java.sql.SQLException:

    sqoop import --connect jdbc:mysql://122.206.79.212:3306/dating --username root --password 123456 --t ...

  6. 【性能提升神器】Covering Indexes

    可能有小伙伴会问,Covering Indexes到底是什么神器呢?它又是如何来提升性能的呢?接下来我会用最通俗易懂的语言来进行介绍,毕竟不是每个程序猿都要像DBA那样深刻理解数据库,知道如何用以及如 ...

  7. python3 HTTP Error 403:Forbidden

    问题描述初学python,在用python中的urllib.request.urlopen()和urllib.request.urlretrieve方法打开网页时,有些网站会抛出异常: HTTP Er ...

  8. androidstudio全局搜索快捷键Ctrl+Shift+F失效的解决办法

    与输入法设置冲突!!修改了就可以了.用的搜狗输入法,它的此快捷键也为简繁体替换.修改成其他的即可 null

  9. windows ip 缓存清理

    ip缓存 ipconfig /release dns缓存 ipconfig/flushdns

  10. jQuery on()方法使用

    jQuery on()方法 基本语法: 语法结构一: $(selector).on(event,function) 语法结构二: $(selector).on(events,[selector],[d ...