簡體   English   中英

鼠標坐標到游戲坐標WebGL

[英]Mouse Coords to Game Coords WebGL

我正在嘗試將鼠標的x,y坐標轉換為webgl畫布的3d世界坐標。 我已經使其部分工作,但是當世界在任何軸上旋轉時,都會遇到一些麻煩。

我正在使用unproject方法,該方法獲取射線的起點/終點,然后對法線為0、1、0且使用的點為0、0、0的平面進行線到面碰撞測試。

您可以通過查看源代碼在wingsofexodus.com上找到代碼。 使用的功能是RtoW(現實世界,用於鼠標到世界的轉換),lpi(線平面相交測試)和取消投影。

自從我不得不做任何矩陣/矢量數學並經過很長時間證明很難清除灰塵以來,已經很久了。

該網站的運行速度可能很慢,我的互聯網連接不是很好。 如果證明有麻煩,我將代碼復制到此處。

任何幫助或鏈接可能會有所幫助,不勝感激。

您有正確的主意,但我看到兩個錯誤和一個不必要的麻煩:

  • 復雜性:與其復制代碼以從旋轉角度等計算視圖矩陣,不如在計算時(在drawScene的開頭)保存它的副本,並使用它代替mm 或者,確保矩陣堆棧是在正確的地方,並有unproject只使用mvMatrix 這樣可以避免錯誤。
  • 您在處理非RtoW結果(在RtoW )時參考了翻譯。 這是一個錯誤,因為翻譯已經包含在mm 您將其加倍或取消。 取消投影鼠標坐標后,您將擁有在進行射線碰撞測試之前無需進一步修改的世界坐標
  • 在unproject中,您在將視圖矩陣與投影矩陣相乘之前先將其反轉。 您可以執行(pseudocode) invert(view)*invert(projection)或(cheaper) invert(projection*view) ,但是您當前正在執行invert(projection*invert(view)) ,這是錯誤的。

這些就是讓我大吃一驚的東西,但是我還沒有閱讀您所有的代碼。 當我將其與自己的相同版本進行比較時,取消投影看起來可以。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM