所以我在XNA 4.0中制作游戏,我遇到了将鼠标坐标转换为3D世界的问题。我使用了Viewport.Unproject()方法,它几乎可以工作。问题是我的投影是一个“视野”,因此远离中心轴的距离是指数的。如果我将投影更改为标准透视,而不是我的3D对象变形。是否存在使用视野和鼠标坐标翻译数据的数学修正?
我目前正在做一些触发。根据摄像机位置,宽度和宽度计算远平面的宽度和高度。视口的高度和fieldOfView角度。有更好的方法吗?这几乎已经死了。
答案 0 :(得分:0)
我有同样的问题,我只是不明白它的技术解释,直到我读到你的问题。我所做的是翻译鼠标坐标的来源和然后多次或除以一个因子,这样小鼠的移动可以放大到远远落后的更大规模,
坚韧我不明白我的问题是透视&视野,即鼠标在屏幕或相机镜头上移动,我想要移动的比例远远落后和更大,我仍然做了数学运算。仅仅因为我看到了指数缩放差异,很简单
这就是我做的
translated-X = { mouse-X + (screenwidth/2) } / 2.7;
translated-Y = {-mouse-Y + (screenHeight/2)} / 2.8;
和具有当前值的方法对于我当前的设置(
)进行良好翻译仅针对上述三个条件我的方程式。
但如果改变上述任何一个值,我将不得不根据情景调整方程式,因此这些硬编码值为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的官方代码示例中实现。该项目不是专门针对光标的,但解决方案是在中