- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试将 *.x 文件导入我的引擎并使用 OpenGL 为它们制作动画(目前没有着色器,但现在这并不真正相关)。我在 MSDN 上找到了格式引用,但它对解决问题没有多大帮助。
所以 - 基本上 - 我已经创建了一个文件,其中包含一个简单的动画,该文件包含一个具有 7 根骨头(主骨头、2 根尾部和 4 根腿)的恶魔般的生物,其中只有 2 根(在右腿)现在是动画的。我已经在 DXViewer 中测试了网格,它似乎在那里工作得很好,所以问题一定出在我的代码方面。
当我导出网格时,我得到一个包含大量信息的文件,其中有 3 个骨骼动画的重要位置(以下所有矩阵都是针对 RLeg2 骨骼的):
蒙皮权重 - 矩阵偏移
-0.361238, -0.932141, -0.024957, 0.000000,
0.081428, -0.004872, -0.996669, 0.000000,
0.928913, -0.362066, 0.077663, 0.000000,
0.139213, -0.057892, -0.009323, 1.000000
帧变换矩阵
0.913144, 0.000000, -0.407637, 0.000000,
0.069999, 0.985146, 0.156804, 0.000000,
0.401582, -0.171719, 0.899580, 0.000000,
0.000000, -0.000000, 0.398344, 1.000000
绑定(bind)姿势中的AnimationKey矩阵
0.913144, 0.000000, -0.407637, 0.000000,
0.069999, 0.985146, 0.156804, 0.000000,
0.401582, -0.171719, 0.899580, 0.000000,
0.000000, -0.000000, 0.398344, 1.000000
我的问题是 - 我究竟要用这些矩阵做什么?我在纽卡斯尔大学网站 (http://research.ncl.ac.uk/game/mastersdegree/graphicsforgames/skeletalanimation/) 上找到了一个方程式,但那里只有 1 个矩阵。问题是 - 如何组合这些矩阵以获得顶点变换矩阵?
最佳答案
这篇文章不是假装是一个完整的答案,而是一组有用的链接。
如何获取动画所需的所有信息
问题是如何导入网格,以及为什么要这样做。你可以和 .x
网格战斗几个月,但这没有任何意义,因为 .x
是一种非常基础、陈旧且确实不够好的格式。您在 StackOverflow 上找不到很多 .x
格式的粉丝。 =)
.x
文件以一种巧妙的方式存储动画数据。它旨在通过一组 D3DX*()
函数加载。但是,要手动从中获取骨骼和权重,您必须预处理加载的数据。很多东西要编码。这是一篇大文章,解释了如何:
Loading and displaying .X files without DirectX
做事情的好方法就是切换到一些网格加载库。最受欢迎和通用的是 Assimp .至少,看看他们的docs和/或源代码,关于它们如何处理加载和预处理,以及乳清作为输出的内容。另外,这里有一个很好的解释:
Tutorial 38 - Skeletal Animation With Assimp
因此,借助 assimp,您可以立即停止战斗并开始制作动画。也许稍后,当您了解它的工作原理时,您可以编写自己的加载器。
当您获得动画所需的所有信息时
骨骼动画是一个基本主题,在整个网络中都有详细解释。
希望对您有所帮助!
关于c++ - OpenGL 中 DirectX 文件的骨骼动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19323192/
因此,除了索引之外,当我创建一个新项目并选择 conda 解释器时,还会启动更多需要数小时的进程。下面是一个快照。这些过程是什么?完成后它们会占用空间吗? 最佳答案 PyCharm 运行 genera
我是一名优秀的程序员,十分优秀!