我有一个简单的混合器模型,它由三个网格组成,三个网格各控制一个网格。动画只是骨骼围绕 y 轴稍微旋转立方体并返回。中心骨骼是两个外部骨骼的父骨骼。
然后,我使用 GLTF2.0(文本版本)导出插件导出此场景,现在尝试将其导入到我新制作的 opengl 引擎(c# xamarin android)中。
由于我想完全理解GLTF2.0格式和OpenGL中的骨骼动画,所以我尝试自己实现GLTF2.0读取。
我读:
显示网格很容易,但现在我被困在动画工作中。在我的 gltf 文件中,我看到三种皮肤:
"skins" : [
{
"inverseBindMatrices" : 21,
"joints" : [
4,
5,
6
],
"skeleton" : 0
},
{
"inverseBindMatrices" : 22,
"joints" : [
4,
5,
6
],
"skeleton" : 0
},
{
"inverseBindMatrices" : 23,
"joints" : [
4,
5,
6
],
"skeleton" : 0
}
]
Run Code Online (Sandbox Code Playgroud)
这让我很困惑,因为所有网格体都有一个骨骼结构,而不是每个网格体有三个骨骼。我想我会收集类实例(例如 Bone.cs)中的所有骨骼,每个骨骼都有一个子骨骼列表及其父骨骼字段。然后我会在实例(Animation.cs 类)中收集动画,每个动画实例都会有一个关键帧列表,其中包含给定时间戳的旋转、缩放和平移。当动画时间戳设置为 2.5 秒时,我查找该时间戳最近的两个关键帧,并对这些关键帧插入旋转、缩放和平移。