我正在开发一个3D XNA项目,我一直在考虑这个问题2周。 所以我决定问你。
基本上我有一个平面飞机,我想将鼠标位置投射到那个平面,但是怎么样? 我尝试了很多方法,计算角度...... 但我发现,距离必须影响X位置,也许需要一些我以前从未听过的数学。
答案 0 :(得分: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;
}
希望它适合你。