我正在尝试制作自己的gltf加载程序,我正在处理动画。
我有第一个使它旋转的基本三角形的例子。我注意到的一件事是,以下是gltf文件的定义类型:
#define TINYGLTF_TYPE_VEC2 (2)
#define TINYGLTF_TYPE_VEC3 (3)
#define TINYGLTF_TYPE_VEC4 (4)
#define TINYGLTF_TYPE_MAT2 (32 + 2)
#define TINYGLTF_TYPE_MAT3 (32 + 3)
#define TINYGLTF_TYPE_MAT4 (32 + 4)
#define TINYGLTF_TYPE_SCALAR (64 + 1)
#define TINYGLTF_TYPE_VECTOR (64 + 4)
#define TINYGLTF_TYPE_MATRIX (64 + 16)
更重要的是,由于所有数据都存储为原始缓冲区,因此您获得的关于给定模型的唯一信息是它是否有动画,而没有;似乎没有一个领域可以解释";这里的这个数据是用来旋转网格的,这里的这个是用来平移网格的;。
这引出了我的问题。是否存在网格中的基本体已声明动画、输出动画缓冲区类型为vec4
但不表示四元数旋转的情况?
如果动画缓冲区可以有非四元数类型,我如何知道缓冲区何时是旋转,何时是不同的类型?
glTF文件确实指定了哪些属性受每个动画通道的影响,但您需要按相反的顺序查找它。在伪代码中:
for anim of gltf.animations
for channel of anim.channels
sampler = anim.samplers[channel.sampler]
print "Accessor #" + sampler.output + " modifies " + channel.path
# → "Accessor #123 modifies rotation"
根据glTF规范中的channel.path表,除了rotation
之外,目前没有其他动画类型使用VEC4类型,但最好使用channel.path
信息,以防将来支持其他类型的动画。