在ThreeJS Object3D.applyMatrix4中是不连续的

问题描述 投票:0回答:1

我正在使用Object3D.applyMatrix4用矩阵A变换对象,但我发现它在某一点上没有保留特征向量的方向。因此,我尝试对Identity Matrix IA之间的插值进行动画处理,发现了这一点:

enter image description here

转换如何不连续?

three.js 3d linear-algebra eigenvalue eigenvector
1个回答
1
投票
想象一下一个时钟的指针位于12,指针位于6。如果您将12时针尖端的点线性插值到6时针指针的尖端,则该点将从时钟的顶部到底部沿直线移动。

要对由4x4矩阵表示的旋转进行插值,可以将矩阵的旋转转换为四元数,并在这些四元数之间转换.slerp(球面线性插值),然后转换回矩阵。

然后线性内插object.position。 (尽管再次..这假设关键帧之间是线性运动)。

现在,在旋转较小的情况下,您可以采用线性内插矩阵的方法,但是您需要在每一步对其进行正交化,以将网格重塑为具有相互正交的一致长度向量的网格。这并不难..您可以结合使用点积,乘和加形成矩阵行(或列,我忘了)的向量来对矩阵进行正态化。但是,与仅使用四元数和.slerp相比,这更令人痛苦,而且准确性较低。

© www.soinside.com 2019 - 2024. All rights reserved.