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

问题描述 投票:3回答:1

我工作的一个3D XNA项目,我一直在思考这个问题像2周。所以我决定要问你。

基本上我有一个平面上,我希望以鼠标的位置,以那架飞机,但如何?我尝试过很多办法做到这一点,计算出的角度...但我想通了,那距离必须在X位置的影响,也许需要一些数学是我从来没有听说过。

c# 3d xna
1个回答
5
投票

我做了一些代码,几年前它返回位置的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的的一个实例。

希望对你有效。

© www.soinside.com 2019 - 2024. All rights reserved.