【发布时间】:2010-08-22 17:23:25
【问题描述】:
我以为我对矩阵数学的理解足够好,但显然我一无所知
设置如下:
我在世界空间的 [0,0,0] 处有一个对象。我有一个由鼠标移动控制的相机类,可以围绕对象旋转和缩放,以便它始终看着它。以下是我从相机计算 viewMatrix 的方法:
public Matrix viewMatrix {
get {
return
Matrix.CreateFromAxisAngle(Vector3.Up, rotAngle)
* Matrix.CreateFromAxisAngle(Vector3.Left, pitchAngle)
* Matrix.CreateTranslation(0, 0, distance)
;
}
}
我需要能够获得相机在世界空间中的位置,这样我才能获得它与盒子的距离——尤其是它与盒子每个面的距离。 如何获取相机在世界空间坐标中的 xyz 位置?
我试过了:
// all of these only return [0, 0, distance];
Vector3 pos = Vector3.Transform(Vector3.Zero, viewMatrix);
Vector3 pos = viewMatrix.Translation;
Vector3 pos = new Vector3(viewMatrix.M41, viewMatrix.M42, viewMatrix.M43);
似乎旋转信息正在以某种方式丢失。奇怪的是 viewMatrix 代码非常适合定位相机!
【问题讨论】: