这是一个矩阵知识问题,我正在谈论XNA,但仅供参考
我在XNA上分解了一个矩阵,得到了分解后的值,然后尝试从这些值重新创建矩阵,结果矩阵与原始矩阵不匹配
我试着使四元数正常化
我试着从四元数生成旋转矩阵
我尝试交换转换SRT、STR、TRS、TSR、RST、RTS的顺序
我为什么要这么做?我正在创建自己的模型导入器,并使用相同的模型将我的结果与XNA进行比较,因此我读取的源SRT与XNA的分解值几乎相同(一些十进制差异),但我的结果矩阵与XNA不匹配,因此我回到基础并尝试分解/重组XNA矩阵,但我发现它也不匹配
这些是原始的XNA矩阵值
?this.XNAModel.Bones[0].Transform
{{M11:1.331581E-06 M12:-5.551115E-17 M13:1 M14:0}
{M21:1 M22:-4.16881E-11 M23:-1.331581E-06 M24:0}
{M31:4.16881E-11 M32:1 M33:8.15331E-23 M34:0}
{M41:0.03756338 M42:37.46099 M43:2.230549 M44:1} }分解,lFlag为真
bool lFlag = this.XNAModel.Bones[0].Transform.Decompose(out lDecScale, out lDecRotation, out lDecTranslation);
//decomposed values
?lDecScale
{X:1 Y:1 Z:1}
?lDecRotation //quat
{X:-0.5000003 Y:-0.4999996 Z:-0.4999996 W:0.5000004}
?lDecTranslation
{X:0.03756338 Y:37.46099 Z:2.230549}从分解后的值重新组合矩阵,我尝试了所有的组合SRT
//lDecRotation.Normalize();
Matrix lRecompose = Matrix.CreateScale(lDecScale) *
Matrix.CreateFromQuaternion(lDecRotation) * Matrix.CreateTranslation(lDecTranslation);四元数未使用SRT标准化结果,与原始矩阵不匹配
?lRecompose
{{M11:1.430511E-06 M12:-5.960464E-08 M13:0.9999999 M14:0}
{M21:0.9999999 M22:1.192093E-07 M23:-1.370907E-06 M24:0}
{M31:-5.960464E-08 M32:0.9999999 M33:1.192093E-07 M34:0}
{M41:0.03756338 M42:37.46099 M43:2.230549 M44:1} }使用SRT的四元数归一化结果与原始矩阵不匹配
?lRecompose
{{M11:1.192093E-06 M12:-5.960464E-08 M13:1 M14:0}
{M21:1 M22:-1.192093E-07 M23:-1.370907E-06 M24:0}
{M31:-5.960464E-08 M32:1 M33:-1.192093E-07 M34:0}
{M41:0.03756338 M42:37.46099 M43:2.230549 M44:1} }这是我的模型导入器读到的内容
?this.ModelNew.Bones[0].Scale
{X:1 Y:1 Z:1}
?this.ModelNew.Bones[0].Rotation
{X:-0.0002303041 Y:-8.604798E-05 Z:-5.438289}这一结果与XNA分解后的结果有一点不同
//My importer, based on the above Rotation Vector, converted to radians
?lQuat {X:-0.4999999 Y:-0.5 Z:-0.5 W:0.4999999}
//XNA
{X:-0.5000003 Y:-0.4999996 Z:-0.4999996 W:0.5000004}
?this.ModelNew.Bones[0 ].Translation
{X:0.03756338 Y:37.46099 Z:2.230549}发布于 2014-12-17 13:06:35
根据图形API管理矩阵的方式以及建模软件导出矩阵的方式,您可能需要在分解矩阵之前转置矩阵,然后在重新组合后转置结果,以获得与原始矩阵相同的结果。
顺便说一下,重组的正确顺序是先平移,然后旋转,然后缩放。
https://stackoverflow.com/questions/9649479
复制相似问题