首页 > 解决方案 > 如何使用 3D 矩阵进行旋转?

问题描述

我正在使用 WPF 3D 在 Visual3D 端口中显示对象。现在我想根据模型 B 在 XYZ 平面中的位置将模型 A 旋转到模型 B。我试图模仿 Unity 使用它的 LookAt 函数所做的事情。我数学不强,所以我很困惑。

我有一个从以下函数生成的 3D 矩阵

public static Matrix3D CalculateLookAt(Vector3D eye, Vector3D at = new Vector3D(), Vector3D up = new Vector3D())
        {
            if (Math.Abs(up.Length - 0.0) < double.Epsilon) up = new Vector3D(0, 1, 0);
            var zaxis = (at - eye);
            zaxis.Normalize();
            var xaxis = Vector3D.CrossProduct(up, zaxis);
            xaxis.Normalize();
            var yaxis = Vector3D.CrossProduct(zaxis, xaxis);

            return new Matrix3D(
                xaxis.X, yaxis.X, zaxis.X, 0,
                xaxis.Y, yaxis.Y, zaxis.Y, 0,
                xaxis.Z, yaxis.Z, zaxis.Z, 0,
                Vector3D.DotProduct(xaxis, -eye), Vector3D.DotProduct(yaxis, -eye), Vector3D.DotProduct(zaxis, -eye), 1
            );
        }

现在如何使用这个矩阵?

标签: c#matrix3drotation

解决方案


推荐阅读