Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js 在ThreeJS中,Object3D.ApplyMatrix X4不是连续的_Three.js_3d_Linear Algebra_Eigenvalue_Eigenvector - Fatal编程技术网

Three.js 在ThreeJS中,Object3D.ApplyMatrix X4不是连续的

Three.js 在ThreeJS中,Object3D.ApplyMatrix X4不是连续的,three.js,3d,linear-algebra,eigenvalue,eigenvector,Three.js,3d,Linear Algebra,Eigenvalue,Eigenvector,我使用Object3D.ApplyMatrix X4用矩阵a变换一个对象,我发现在某一点上它没有保留特征向量的方向。 所以我尝试在单位矩阵I和A之间设置插值动画,我发现: 这种转变怎么可能不是连续的呢 旋转矩阵的线性插值在数学上并不合理。构成旋转矩阵的向量需要为单位长度。。或者至少保持一致的长度 想象一个时钟,指针在12点,指针在6点。 如果将12点钟指针尖端的点线性插值到6点钟指针尖端,则该点沿直线从时钟顶部到底部移动 要插值4x4矩阵表示的旋转,可以将矩阵的旋转转换为四元数,并在这些四元数

我使用Object3D.ApplyMatrix X4用矩阵a变换一个对象,我发现在某一点上它没有保留特征向量的方向。
所以我尝试在单位矩阵
I
A
之间设置插值动画,我发现:


这种转变怎么可能不是连续的呢

旋转矩阵的线性插值在数学上并不合理。构成旋转矩阵的向量需要为单位长度。。或者至少保持一致的长度

想象一个时钟,指针在12点,指针在6点。 如果将12点钟指针尖端的点线性插值到6点钟指针尖端,则该点沿直线从时钟顶部到底部移动

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

然后对object.position进行线性插值。(尽管如此..这假设关键帧之间存在线性运动)


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

旋转矩阵的线性插值在数学上并不合理。构成旋转矩阵的向量需要为单位长度。。或者至少保持一致的长度

想象一个时钟,指针在12点,指针在6点。 如果将12点钟指针尖端的点线性插值到6点钟指针尖端,则该点沿直线从时钟顶部到底部移动

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

然后对object.position进行线性插值。(尽管如此..这假设关键帧之间存在线性运动)


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

@manthrax的回答指出了线性插值矩阵的基本问题,而我当时并不知道,他是对的。但真正的问题是
Object3D.applyMatrix4
不是明确定义局部矩阵的正确函数。我试着直接设置
Object3D.matrix
属性,结果成功了。线性插值(虽然我不应该这样做)变得连续。

@manthrax的回答指出了线性插值矩阵的基本问题,而我当时并不知道,他是对的。但真正的问题是
Object3D.applyMatrix4
不是明确定义局部矩阵的正确函数。我试着直接设置
Object3D.matrix
属性,结果成功了。线性插值(虽然我不应该这样做)变得连续