c# - 如何使用 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
);
}
现在如何使用这个矩阵?
解决方案
推荐阅读
- sql - Split Overlapping\Merged Dates in SQL
- javascript - 如何将我在 flickity js 中的整个代码包装成一个函数?
- python - Django - 系统在哪里确定“表单”是身份验证表单?
- visual-studio-code - Visual Studio 代码 - 按名称打开下一个文件的快捷方式
- python - TypeError:“DiscreteFactor”对象不可下标
- javascript - Office 365 加载项中是否有任何事件或功能应在不打开加载项的情况下执行?
- laravel - 如何为管理员使用 Spatie 角色和权限?
- linux - 为什么这个 git/grep/vim 快捷方式 bash 代码不能像宣传的那样工作?
- ios - 如何在 Xamarin 中使用条件编译基于 XCODE 版本执行条件
- javascript - 如何在取消选择前一个元素的同时向新元素添加“选择”样式?