【问题标题】:How can I translate the mouse coordinates to 3D coordinates, with a overhead camera, in XNA 4.0?在 XNA 4.0 中,如何使用顶置摄像头将鼠标坐标转换为 3D 坐标?
【发布时间】:2010-11-19 01:43:14
【问题描述】:

所以我在 XNA 4.0 中制作游戏,但在将坐标从鼠标转换到 3D 世界时遇到问题。我使用了 Viewport.Unproject() 方法,它几乎可以工作。问题是我的投影是一个“视野”,所以离中心轴的距离是指数级的。如果我将投影更改为标准透视图,那么我的 3D 对象就会变形。将视野与来自鼠标​​坐标的翻译数据一起使用是否有数学修复?

我目前正在做一些触发。根据相机位置、视口的宽度和高度以及 fieldOfView 角度计算远平面的宽度和高度。有没有更好的方法?这几乎是死了。

【问题讨论】:

  • 您的问题标题应该是:如何将鼠标移动缩放到具有特定深度的视野范围内。

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


【解决方案1】:

我有同样的问题,我只是在阅读您的问题之前不理解它的技术解释。我所做的是翻译鼠标坐标的原点,然后将其乘以或除以一个因子,以便可以在远处放大较大的鼠标移动,

虽然我不明白我的问题是透视和视野,即鼠标在屏幕或相机镜头上移动,而我试图移动的比例远远落后且更大,但我还是做了数学让它工作。仅仅因为我看到了指数缩放差异,很简单

这就是我所做的

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 将必须是变量,并且必须根据相机和屏幕的位置进行计算分辨率

现在这个 2.7 和 2.8 将比例保持到某个点

翻译的通用公式,我可以通过称为数值分析的技术来表述,我很擅长,但为此我需要我无法获得的数据自己一个人,我需要找出相机距离,视角设置,某个分辨率完全在视野中。

也就是说,如果我的分辨率是 1024x768,那么从相机看原点的距离来看,我们实际上可以看到 x 轴周围的 1024 个点和 y 轴周围的 768 个点。同样,我需要至少两个读数才能获得更高的分辨率。

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

【讨论】:

  • p.s 这并不是一个答案,只是对问题的讨论和可能的解决方案。
  • 微软开发人员在开发 Microsoft Surface 时解决了这个问题,这也让我感到震惊。因为它有同样的问题,但以相反的方式将输出投影到屏幕上,输入是根据投影屏幕进行的,而实际分辨率要低得多。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2018-05-25
    • 2012-09-12
    • 1970-01-01
    • 2014-06-12
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    相关资源
    最近更新 更多