C++ 我的代码和巴比伦之间的动画差异,为什么?

C++ 我的代码和巴比伦之间的动画差异,为什么?,c++,animation,math,graphics,gltf,C++,Animation,Math,Graphics,Gltf,我正在尝试渲染glTF示例模型 这是我的代码的结果: 这是巴比伦的: 正如你所见,在我的模型变形,但在巴比伦它仍然相当僵硬 在我的例子中,我没有做任何花哨的事情,我将gltf中定义的皮肤矩阵直接推送到GPU,因此没有四元数蒙皮或类似的技术,只是纯粹的非消光线性代数 对于正则矩阵,我应该期望这个结果吗?或者渲染上的差异是由于我的实现中的错误造成的?在我的brilliance中,我在调试时注释掉了动画中的翻译,但忘了启用它们。对于该模型,动画指定了不可忽略的垂直平移。是这样,;结果不一样也就不足

我正在尝试渲染glTF示例模型

这是我的代码的结果:

这是巴比伦的:

正如你所见,在我的模型变形,但在巴比伦它仍然相当僵硬

在我的例子中,我没有做任何花哨的事情,我将gltf中定义的皮肤矩阵直接推送到GPU,因此没有四元数蒙皮或类似的技术,只是纯粹的非消光线性代数


对于正则矩阵,我应该期望这个结果吗?或者渲染上的差异是由于我的实现中的错误造成的?

在我的brilliance中,我在调试时注释掉了动画中的翻译,但忘了启用它们。对于该模型,动画指定了不可忽略的垂直平移。是这样,;结果不一样也就不足为奇了。

这是在“混合器”视口中渲染的正确行为

父骨骼的原点位于底部中心,子骨骼的原点位于模型的一半(在本例中显示为橙色圆点)。当顶部的顶点移动时,它们仅因旋转而移动。旋转中心始终是关联骨骼的原点

请注意,中间带周围的顶点几乎没有移动,但它们确实会稍微移动一点。它们也受到子骨骼的部分影响,因此它们的运动是围绕橙色圆点的轨道。不过,父骨骼对它们有很好的抓地力,所以它们不会移动太远

以下是在Blender中显示的关节重量。在左侧,父骨骼在底部处于完全强度(红色),在顶部没有影响(蓝色)。该骨骼不移动,在顶点的中心带上具有相当不错的权重

在右侧,子骨骼是可视化的。这是一个有旋转动画的。角色大部分是相反的,因为它在顶部有完全的力量,在底部没有力量。它对中心顶点的影响非常微弱


要进入此模式,请首先选择蒙皮网格,然后切换到“权重绘制”模式。使用右侧显示的“顶点组”选择器选择骨骼以查看或编辑其权重。在glTF中,建议不超过4个单独的骨骼对同一顶点有任何影响,否则实时渲染器可能会出现问题或不支持它。此外,每个顶点上的骨骼影响加起来正好为1.0(每个顶点的总重量为100%,而不是更多或更少),这一点很重要。否则可能会出现问题,例如,如果两个骨骼在一个顶点上都是100%,而它们的顶点总共是200%,那么整个骨骼的重新定位将使该顶点移动两倍远,事情很快就会变得糟糕。我认为Blender glTF exporter可能会自动解决其中一些问题。

Hm,在您的实现中,旋转中心似乎不正确。很难说没有看到代码,但是您确定正确计算了jointMatrix数组吗?(请参阅我的中的伪代码)我想我的某个地方有内存问题,我重新运行了代码,现在它与exmaple中的一样工作。虽然阿桑没有透露任何信息。我可能需要关闭这个,直到我有更多的信息。nvm,似乎giff中的问题是我没有在动画中应用翻译变换。对,那,;肯定是这样。网眼布看起来不错。我不确定你的黄色骨骼是否显示在正确的位置。我认为骨骼的起源应该在模型的中心附近,在两个部分之间。你可以看到这是一个看起来像模型顶部旋转中心的区域。是的,我用来渲染骨骼的着色器中有一个小错误。现在是你说的应该是的地方