Unity worldToCameraMatrix
参考资料:
详解MVP矩阵之ViewMatrix
private void OnGUI()
{
if (GUI.Button(new Rect(0, 0, 200, 200), "计算WorldToCameraMatrix"))
{
CameraTransform.position = new Vector3(1, 2, 3);
CameraTransform.LookAt(new Vector3(0, 10, 0), Vector3.up);
Vector3 cameraPos = Camera.main.transform.position;
Vector3 targetPos = new Vector3(0, 10, 0);
//z
Vector3 dir = (cameraPos - targetPos).normalized;
//x
Vector3 N1 = Vector3.Cross(dir, Vector3.up);
N1 = N1.normalized;
//y
Vector3 N2 = Vector3.Cross(N1, dir);
N2 = N2.normalized;
Vector3 T = cameraPos;
Matrix4x4 ViewMatrix = new Matrix4x4();
ViewMatrix.m00 = N1.x; ViewMatrix.m01 = N1.y; ViewMatrix.m02 = N1.z; ViewMatrix.m03 = - Vector3.Dot(N1 , cameraPos);
ViewMatrix.m10 = N2.x; ViewMatrix.m11 = N2.y; ViewMatrix.m12 = N2.z; ViewMatrix.m13 = -Vector3.Dot(N2, cameraPos);
ViewMatrix.m20 = dir.x; ViewMatrix.m21 = dir.y; ViewMatrix.m22 = dir.z; ViewMatrix.m23 = -Vector3.Dot(dir, cameraPos);
ViewMatrix.m30 = 0; ViewMatrix.m31 = 0; ViewMatrix.m32 = 0; ViewMatrix.m33 = 1;
Debug.Log(ViewMatrix);
Debug.Log("---------------------------------------------");
Debug.Log(Camera.main.worldToCameraMatrix);
}
}
输出结果: