2012-07-16 85 views
3

我正在研究一個3D XNA項目,並且我一直在考慮這個問題2周。 所以我只是決定問你。C#XNA投影到3D平面的鼠標位置

基本上我有一個平面飛機,我想把鼠標位置投影到那架飛機上,但是怎麼樣? 我嘗試了很多方法來做到這一點,計算角度... 但我想通了,距離必須影響X的位置,也許一些數學是需要我從來沒有聽說過。

謝謝你的時間。

+0

您如何表現飛機?康拉德的回答是一個好的開始。鼠標位置實際上是場景中的一束光線。你想找到那架光線與你的飛機的交點。康拉德的答案計算與xz平面的交點。 – 2012-07-16 13:34:16

+0

是的,射線的東西在工作,我只是混淆了Z軸和Y軸 – 2012-07-16 16:17:47

回答

1

在這裏,你可以觀看完整的源代碼示例做你想要什麼....

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

它計算在康拉德做......但光線交點做了同樣的方式射線與飛機對象...沒有優化,更容易理解如何完成。

+0

謝謝這個真的很成功,我剛剛意識到Y軸是我的深度,我認爲它更符合邏輯,習慣了3D建模。無論如何,謝謝你,讓我的一天。 – 2012-07-16 16:15:02

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的一個實例。

希望它適合你。

+0

這段代碼是完美的。你是最棒的! – Wallstrider 2014-05-09 20:40:17