gpt4 book ai didi

c++ - vec4 类型的 gltf 动画不是四元数吗?

转载 作者:行者123 更新时间:2023-12-03 07:15:28 25 4
gpt4 key购买 nike

我正在尝试制作自己的 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 文件确实指定了受每个动画 channel 影响的属性,但您需要以相反的顺序查找它。在伪代码中:

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"
根据 channel.path table在 glTF 规范中,除了 rotation 之外没有其他动画类型。目前使用 VEC4 类型,但最好使用 channel.path信息,以防将来支持其他类型的动画。

关于c++ - vec4 类型的 gltf 动画不是四元数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64601546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com