我正在研究一個3D XNA項目,並且我一直在考慮這個問題2周。 所以我只是決定問你。C#XNA投影到3D平面的鼠標位置
基本上我有一個平面飛機,我想把鼠標位置投影到那架飛機上,但是怎麼樣? 我嘗試了很多方法來做到這一點,計算角度... 但我想通了,距離必須影響X的位置,也許一些數學是需要我從來沒有聽說過。
謝謝你的時間。
我正在研究一個3D XNA項目,並且我一直在考慮這個問題2周。 所以我只是決定問你。C#XNA投影到3D平面的鼠標位置
基本上我有一個平面飛機,我想把鼠標位置投影到那架飛機上,但是怎麼樣? 我嘗試了很多方法來做到這一點,計算角度... 但我想通了,距離必須影響X的位置,也許一些數學是需要我從來沒有聽說過。
謝謝你的時間。
在這裏,你可以觀看完整的源代碼示例做你想要什麼....
http://www.youtube.com/watch?v=axHp1f3RlHM
它計算在康拉德做......但光線交點做了同樣的方式射線與飛機對象...沒有優化,更容易理解如何完成。
謝謝這個真的很成功,我剛剛意識到Y軸是我的深度,我認爲它更符合邏輯,習慣了3D建模。無論如何,謝謝你,讓我的一天。 – 2012-07-16 16:15:02
我做了一些代碼,幾年前它返回位置的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;
}
希望它適合你。
這段代碼是完美的。你是最棒的! – Wallstrider 2014-05-09 20:40:17
您如何表現飛機?康拉德的回答是一個好的開始。鼠標位置實際上是場景中的一束光線。你想找到那架光線與你的飛機的交點。康拉德的答案計算與xz平面的交點。 – 2012-07-16 13:34:16
是的,射線的東西在工作,我只是混淆了Z軸和Y軸 – 2012-07-16 16:17:47