XNA相机场景大小

时间:2012-06-12 14:01:14

标签: c# xna

我似乎无法弄清楚这一点。因此,相机在(0,0,0)处定位于(0,0,5.0f)。假设屏幕分辨率为800x600。现在,由于世界的中心是(0,0,0)摄像机可以看到的极端点(例如x轴,右侧)是什么?

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

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

1 个答案:

答案 0 :(得分: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的方法,它有很多覆盖来测试边界框之类的东西是否在平截头体内。