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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#XNA鼠标的位置投射到3D平面相关的知识,希望对你有一定的参考价值。

我工作的一个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;
}
  • 设备是GraphicsDevice的的一个实例。

希望对你有效。

以上是关于C#XNA鼠标的位置投射到3D平面的主要内容,如果未能解决你的问题,请参考以下文章

将纹理 3d 模型和纹理从搅拌机导出到 xna 4.0

OpenGL 鼠标在 3D 空间中的位置

Three.js 从鼠标位置投射光线

XNA 3D Skybox模拟问题,包括相机位置和模型转换

鼠标坐标的3d点三角形交点?

平面图无法投射到右侧