从Matrix4转换为Vec3、四元数、Vec3并再次转换

从Matrix4转换为Vec3、四元数、Vec3并再次转换,matrix,libgdx,quaternions,Matrix,Libgdx,Quaternions,Libgdx使用Matrix4表示对象的世界空间位置、旋转和缩放 由于我在代码中对这些对象设置了很多动画,我希望将它们转换为一种保持位置、旋转和缩放分离的格式。 这样可以更轻松地正确插值以设置动画 我将比例和位置存储为矢量3。 和四元数的旋转 这是我的类,它存储这3个,并从矩阵4转换为2和 公营职级{ 私有静态字符串logstag=ME.PosRotScale; 矢量3位置=新矢量3; 四元数旋转=新的四元数; 矢量3标度=新矢量31F、1f、1f; 公共位置旋转比例因子3位置、四元数旋转、向

Libgdx使用Matrix4表示对象的世界空间位置、旋转和缩放

由于我在代码中对这些对象设置了很多动画,我希望将它们转换为一种保持位置、旋转和缩放分离的格式。 这样可以更轻松地正确插值以设置动画

我将比例和位置存储为矢量3。 和四元数的旋转

这是我的类,它存储这3个,并从矩阵4转换为2和

公营职级{ 私有静态字符串logstag=ME.PosRotScale; 矢量3位置=新矢量3; 四元数旋转=新的四元数; 矢量3标度=新矢量31F、1f、1f; 公共位置旋转比例因子3位置、四元数旋转、向量3比例{ 超级的 这个位置=位置; 这个旋转=旋转; 这个比例=比例; } 公共POSROTSCALE矩阵X4设置到此{ 这是一个很好的例子; } @凌驾 公共字符串toString{ 矢量3轴=新矢量3; 浮动角度=旋转。getAxisAngleaxis; 字符串状态字符串=[+position.x+,+position.y+,+position.z+] +[+轴x+,+轴y+,+轴z+,+角度+] +[+scale.x+,+scale.y+,+scale.z+]; 返回状态字符串; } 公共无效设置为TrixMatrix4 lastLocation{ lastLocation.getTranslationposition; lastLocation.getRotationrotation; lastLocation.getScalescale; } 公共位置旋转刻度设置旋转浮动i、浮动j、浮动k、浮动角度INDEG{ 旋转。设置新矢量3i、j、k、角度dG; 归还这个; } 公共位置RotScale设置拓扑位置矢量3新位置{ 位置=newposition.cpy; 归还这个; } 公共PosRotScale设置为缩放向量3新闻缩放{ scale=newscale.cpy; 归还这个; } 公共矩阵x4创建矩阵{ 返回新的位置、旋转、nor、刻度; }
}看看你的方法是否意味着你根本无法从矩阵转换成Pos/Rot/Scale,只有visa可以转换成Pos/Rot/Scale?我认为你的位置,旋转,比例;与我创建矩阵并用新的变换替换变换时的操作相同。但是你永远不会转换矩阵——你只是从一开始就使用你的替代对象。我还注意到你没有使旋转正常化。我只是在Matrix4的描述要求的时候才把它放进去的。我当然有可能转换为你的方法,尽管这会使我的运动控制器不那么通用。好吧,无论如何,要调整你的方法,我担心会将它链接到相机,因为我当前的动画系统做得很好,但我仍然可以使用我当前的[半工作]转换为PosRotScale方法,其余部分使用纯PosRotScale。如果你写一篇文章作为回答,我会接受的。