XNA 摄像机场景大小

本文关键字:机场 XNA | 更新日期: 2023-09-27 18:36:50

我似乎想不通。因此,相机正在看世界,例如位于(0,0,0)的位置(0,0,5.0f)。假设屏幕分辨率为 800x600。现在,既然世界中心是(0,0,0),相机可见的极值点(比如在x轴上,右侧)是什么?

如果相机定位在 (0,0,50.0f),值是多少?基本上,我该如何弄清楚?

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

XNA 摄像机场景大小

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

这在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);

视锥体包含一个名为 Intersects 的方法,该方法具有相当多的覆盖来测试边界框等内容是否在视锥体内。