0

我似乎无法弄清楚这一点。因此,相机正在观察世界,例如位于 (0,0,0) 的 (0,0,5.0f)。假设屏幕分辨率为 800x600。现在,由于世界的中心是 (0,0,0) 相机可见的极值点(比如在 x 轴上,右侧)是什么?

如果相机定位在 (0,0,50.0f),值会是多少?基本上,我该如何解决这个问题?

+-------------------+
|         |         |
|         |         |
|         |         |
+---------+---------¤ <-- what's the x-value of this point?
|         |         |
|         |         |
|         |         |
+-------------------+
4

1 回答 1

1

如果我正确理解了这个问题,您想知道屏幕右中心点的世界空间位置吗?

这实际上在 XNA 中很容易做到(感谢 MS!),您可以使用视口类将屏幕空间位置“取消投影”到世界空间。

基本上,游戏中绘制的每个像素都会经过一些转换,以将其转换为可以在我们的 2D 显示器上绘制的 2D 图像,您也可以反向运行这些转换,XNA 有一个方法可以做到这一点。

Vector3 screenLocation = new Vector3(GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height / 2, 0);
Vector3 worldLocation = GraphicsDevice.Viewport.Unproject(screenLocation, camera.ProjectionMatrix, camera.ViewMatrix, camera.WorldMatrix);

编辑:

如果您想查看相机视图中的对象是否可以被绘制,您可以使用边界平截头体进行测试。

BoundingFrustum frustum = new BoundingFrustum(camera.WorldViewProjectionMatrix);

frustum 包含一个名为 Intersects 的方法,它有很多覆盖来测试诸如边界框之类的东西是否在 frustum 内。

于 2012-06-12T14:23:55.797 回答