3

私は 3D XNA プロジェクトに取り組んでおり、この問題について 2 週間ほど考えてきました。だから私はあなたに尋ねることにしました。

基本的に平面があり、マウスの位置をその平面に投影したいのですが、どうすればよいですか? 私はそれを行うために多くの方法を試し、角度を計算しました...しかし、距離がX位置に影響を与える必要があることがわかりました。おそらく、これまで聞いたことのない数学が必要になるでしょう。

4

1 に答える 1

6

マウスの状態を指定すると、位置を 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 のインスタンスです。

それがうまくいくことを願っています。

于 2012-07-16T12:43:26.870 に答える