如何在XNA 4.0中使用高架摄像头将鼠标坐标转换为3D坐标?

时间:2010-11-19 01:43:14

标签: 3d mouse camera 2d xna-4.0

所以我在XNA 4.0中制作游戏,我遇到了将鼠标坐标转换为3D世界的问题。我使用了Viewport.Unproject()方法,它几乎可以工作。问题是我的投影是一个“视野”,因此远离中心轴的距离是指数的。如果我将投影更改为标准透视,而不是我的3D对象变形。是否存在使用视野和鼠标坐标翻译数据的数学修正?

我目前正在做一些触发。根据摄像机位置,宽度和宽度计算远平面的宽度和高度。视口的高度和fieldOfView角度。有更好的方法吗?这几乎已经死了。

2 个答案:

答案 0 :(得分:0)

我有同样的问题,我只是不明白它的技术解释,直到我读到你的问题。我所做的是翻译鼠标坐标的来源和然后多次或除以一个因子,这样小鼠的移动可以放大到远远落后的更大规模,

坚韧我不明白我的问题是透视&视野,即鼠标在屏幕或相机镜头上移动,我想要移动的比例远远落后和更大,我仍然做了数学运算。仅仅因为我看到了指数缩放差异,很简单

这就是我做的

translated-X =  { mouse-X + (screenwidth/2) } / 2.7;
translated-Y =  {-mouse-Y + (screenHeight/2)} / 2.8;

和具有当前值的方法对于我当前的设置(

)进行良好翻译
  • 相机位于(0,0,260)
  • 对于我有坐标(x,y,0)的每个项目,所以它们位于 X & Y 飞机
  • 我的屏幕分辨率, PreferredBackBufferWidthxHeight 是1024 x 768

仅针对上述三个条件我的方程式。

但如果改变上述任何一个值,我将不得不根据情景调整方程式,因此这些硬编码值为2.7& 2.8必须变量&必须根据Camera& amp;的位置计算屏幕分辨率

这2.7& 2.8将比例保持到某一点,现在

翻译通用公式,我可以通过名为数值分析的技术来制定,我很擅长但是因为我需要我无法获得的数据我自己,我需要找出相机距离,透视设置,其中某些分辨率完全在视野中。

也就是说,如果我的分辨率是1024x768,从查看原点的相机距离看,我们实际上会看到围绕x轴的1024个点和围绕y轴的768个点。同样,我需要至少两个更高分辨率的读数。

我无法获得这些值,因为我的愚蠢旧显示器支持最大1024x768,我不能再高了。如果你可以得到多个分辨率的相机距离,我将制定一个关系,并提出一个通用的公式。

答案 1 :(得分:0)

http://create.msdn.com/en-US/education/catalog/sample/picking_triangle

你去吧。光标在Microsoft的官方代码示例中实现。该项目不是专门针对光标的,但解决方案是在