C# XNA 鼠标位置投影到 3D 平面

标签 c# 3d xna

我正在从事一个 3D XNA 项目,我已经考虑这个问题大约 2 周了。 所以我决定问问你。

基本上我有一个平面,我想将鼠标位置投影到该平面,但是如何呢? 我尝试了很多方法来做到这一点,计算角度...... 但我想通了,距离一定会影响 X 位置,也许需要一些我以前从未听说过的数学。

最佳答案

几年前我写了一些代码,在给定鼠标状态的情况下将位置返回为 Vector3(x,y,z):

private Vector3 FindWhereClicked(MouseState ms)
{
    Vector3 nearScreenPoint = new Vector3(ms.X, ms.Y, 0);
    Vector3 farScreenPoint = new Vector3(ms.X, ms.Y, 1);
    Vector3 nearWorldPoint = device.Viewport.Unproject(nearScreenPoint, cam.projectionMatrix, cam.viewMatrix, Matrix.Identity);
    Vector3 farWorldPoint = device.Viewport.Unproject(farScreenPoint, cam.projectionMatrix, cam.viewMatrix, Matrix.Identity);

    Vector3 direction = farWorldPoint - nearWorldPoint;

    float zFactor = -nearWorldPoint.Y / direction.Y;
    Vector3 zeroWorldPoint = nearWorldPoint + direction * zFactor;

    return zeroWorldPoint;
}
  • device 是 GraphicsDevice 的实例。

希望它对你有用。

关于C# XNA 鼠标位置投影到 3D 平面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11503226/

相关文章:

c# - 以编程方式将控件插入窗体

c# - Form1 Load Event 仅执行第一条语句

3d - 将 2d 图像转换为 3d 模型

c# - XNA GS 安装程序无法识别 c#?

c# - 委托(delegate)细节

c# - 使用 bool 来同步多个线程是否安全?

c# - 一个 DbContext Instance 跨越多个 Repositories

algorithm - 将 3D 矩阵中的数据与另一个矩阵聚类

java - 在 3D 结构中添加新顶点

c# - xna c# 陷阱并取消关闭窗口 (x) 按钮和 Ctrl F4