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

我正在研究一个3D XNA项目,我一直在考虑这个问题2周。 所以我决定问你。

基本上我有一个平面平面,我想将鼠标位置投射到那个平面,但是怎么样? 我尝试了很多方法,计算角度……但我发现,距离必须影响X位置,也许需要一些我以前从未听过的数学。

谢谢你的时间。

在这里,您可以观看完整的源代码示例,做您想要的….

http://www.youtube.com/watch?v=axHp1f3RlHM

它以与konrad相同的方式计算光线……但是光线交叉是用平面对象完成的……没有优化,更容易理解如何完成。

几年前我做了一些代码,在给定鼠标状态的情况下返回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的一个实例。

希望对你有效。