vec4 类型的 gltf 动画不是四元数吗?
Are gltf animations of type vec4 ever not quaternions?
我正在尝试制作自己的 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 table,目前除rotation
外没有其他动画类型使用VEC4类型,但最好使用channel.path
信息,以防以后支持其他类型的动画。
我正在尝试制作自己的 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 table,目前除rotation
外没有其他动画类型使用VEC4类型,但最好使用channel.path
信息,以防以后支持其他类型的动画。