如何将四元素转化成矩阵
Unity提供了一个方法可以将四元素转化成矩阵
Matrix4x4.TRS(Vector3.zero, rotation, Vector3.one);
如果觉得这个方法不放心,也可以手动计算
private Matrix4x4 ConvertQuaternionToMatrix(Quaternion rotation)
{
float qw = rotation.w;
float qx = rotation.x;
float qy = rotation.y;
float qz = rotation.z;
float n = 1.0f / Mathf.Sqrt(qx*qx+qy*qy+qz*qz+qw*qw);
qx *= n;
qy *= n;
qz *= n;
qw *= n;
Matrix4x4 m = new Matrix4x4();
m.m00 = 1.0f - 2.0f * qy * qy - 2.0f * qz * qz;
m.m01 = 2.0f * qx * qy - 2.0f * qz * qw;
m.m02 = 2.0f * qx * qz + 2.0f * qy * qw;
m.m03 = 0.0f;
m.m10 = 2.0f * qx * qy + 2.0f * qz * qw;
m.m11 = 1.0f - 2.0f * qx * qx - 2.0f * qz * qz;
m.m12 = 2.0f * qy * qz - 2.0f * qx * qw;
m.m13 = 0.0f;
m.m20 = 2.0f * qx * qz - 2.0f * qy * qw;
m.m21 = 2.0f * qy * qz + 2.0f * qx * qw;
m.m22 = 1.0f - 2.0f * qx * qx - 2.0f * qy * qy;
m.m23 = 0.0f;
m.m30 = 0.0f;
m.m31 = 0.0f;
m.m32 = 0.0f;
m.m33 = 1.0f;
return m;
}
以上两个方法返回的结果是一样的。

6104

被折叠的 条评论
为什么被折叠?



