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 回答