我有一个很好的资产,我已经在多个地方核实。资产是正确的。
我正在尝试将此资产加载到我正在制作的自定义引擎中。如果我加载所有动画信息,除了轮转之外,我得到以下信息:

这是正确的。
如果不是加载动画旋转,而是加载动画所针对的目标节点的旋转,即:
gltf.nodes[target_node].rotation.quaternion();
而不是:
gltf.data_from_accessor::<Quatf>(sampler.output).unwrap()
我明白了:

也就是同样的事情。
但是,如果我尝试从访问器加载数据,我就会得到这个令人厌恶的信息:

我不知道该测试什么。如前所述,我知道数据本身是很好的,所以它必须是代码。但这并不是说目标节点的顺序是不正确的,我知道一个事实,我确实有正确的节点-动画映射。
下面是我加载gltf数据的方式:
let animation = &gltf.animations[animation_id];
let channel = &animation.channels[channel_id];
let sampler = &animation.samplers[channel.sampler];
match channel.target.path
{
ChannelPath::ROTATION => {
debug_assert!(self.rotations.len() == 0);
for rot in gltf.data_from_accessor::<Quatf>(sampler.output).unwrap()
{
self.rotations.push(*rot);
}
for time in gltf.data_from_accessor::<f32>(sampler.input).unwrap()
{
self.rotation_times.push(*time);
}
// ......
}我有一个不同的资产,我正在装载旋转,其中一个是好的:

动画的播放就像预期的那样。
所以我有两种资产,两种都很好,根据gltf验证器,一种能很好地通过管道,另一种会退化。我不明白旋转怎么会导致这个问题:\
我检查过所有四元数数据的范数为1,它也是如此。
发布于 2022-11-11 06:56:36
如果有人遇到这样的事情。问题是字节对齐问题。
正确加载的资产将其连接指定为字节。另一个资产是未签名的空头。代码假设数据总是字节格式,因此没有正确地初始化网格的联合向量。
https://stackoverflow.com/questions/74397096
复制相似问题