2012-01-06 7 views
0

我正在嘗試將鼠標x,y座標轉換爲webgl畫布的三維世界座標。我已經部分工作,但是當世界在任何軸上旋轉時遇到一些麻煩。Mouse Coords to Game Coords WebGL

我使用unproject方法獲取光線的起點/終點,然後對正常的0,1,0平面平面進行平面碰撞測試,並且使用的點爲0, 0,0。

你可以做一個視圖源找到wingsofexodus.com代碼。正在使用的功能是RtoW(真實世界,鼠標到世界轉換),lpi(線平面相交測試)和未投影。

它一直年齡,因爲我不得不做任何矩陣/矢量數學和除塵起飛後,只要被證明是困難的書籍。

該網站可能出現緩慢的,因爲我的互聯網連接是不是所有的偉大。如果證明是麻煩一些,我會將代碼複製到這裏。

任何可能有所幫助的幫助或鏈接表示讚賞。

回答

1

你有正確的想法,但我看到了兩個錯誤,一個不必要的併發症:

  • 併發症:而不是重複的代碼來計算從旋轉角度等視圖矩陣,保存它的一個副本當你計算它時(在drawScene的開始處)並使用它來代替mm。或者,確保矩陣堆棧位於正確的位置,並且unproject只使用mvMatrix。這將避免由此產生的錯誤。
  • 你指的是你與逆投影結果做翻譯(中RtoW)。這是一個錯誤,因爲翻譯已經包含在mm;你要麼加倍或取消它。在沒有投影鼠標座標之後,您有世界座標,在進行射線碰撞測試之前不需要進一步修改。
  • 在未投影中,在將其與投影矩陣相乘之前顛倒視圖矩陣。你可以做的(僞)invert(view)*invert(projection),或(更便宜)invert(projection*view),但你目前做invert(projection*invert(view)),這是不對的。

這些是我跳出來,但我沒有審查所有的代碼。當我將其與my own version of the same進行比較時,未投影看起來不錯。

+0

謝謝,我感謝幫助。 – Wolftousen 2012-01-07 03:18:46

+0

在實現了你的建議之後(除了使用我在渲染過程中使用的矩陣之外,我更喜歡在處理扭曲時保持這種方式),但它運行良好,但是當我將鼠標移離畫布的中心。我已將初始旋轉/平移調整爲自頂向下視圖,因此可以更輕鬆地看到它。最近我沒有太多的機會去玩,但是有關如何解決這個問題的建議? – Wolftousen 2012-01-09 17:49:34

+0

我離開我的電腦一段時間,所以我不能看一看,但從您的描述我不知道,如果你沒有看到「真正的」偏心,但你的投影結果 - 考慮如果你'通過自上而下的透視投影重新觀看時,除屏幕中心處的投影光線不與該平面垂直。想一想你想要與光標對齊的位置 - 例如,你的立方體的頂部,底部或中間位置? – 2012-01-09 22:17:26