我想避免我的玩家能夠站在牆內。每個遊戲都會勾選我的玩家移動一些小距離和/或旋轉。與軌跡網格碰撞
TL; DR請提供經典線段的變體 - > - 三角形相交算法太返回近乎理想的,或以另一種方式線段如果它通過內相交解決問題給定三角形的距離。這個問題有很多微妙之處,比如三角形的軌跡拐角是圓形的,以及線段是否與三角形相切。
我有通常的射線/三角相交碼。
但是,射線對移動的玩家來說是一個非常糟糕的近似值!我的球員中鋒缺少邊緣,但球員網格穿過他們。
你如何有效地確定何時何地玩家與牆壁和障礙物在3D環境中發生碰撞?
一種通用方法是將具有接近未命中三角形代碼,其中該射線是球封端的圓筒。
我試過的一般解決方案是想象玩家是一個球體,把它從裏面翻出來,我試圖做出一個比實際的牆壁更大的半徑的網格,並且在那裏做碰撞射線。我想計算一個在這個網格前面的固定距離的網格,也就是說一個立方體會展開成一個稍大的具有圓形邊和角的立方體。 (我的網格比立方體更不規則,想象一下鍋爐房內部的網格表示,想象一下計算一個距離所有牆壁和鍋爐以及門框等20釐米的網格的那個網格)。這裏是在每桶一個簡單的目:
對於每個面我可以計算表面法線;這就是我知道哪種方式是'出'的。
我的頭腦風暴讓我想象乘以每個面的法線由固定距離,然後發射具有相應偏移量的三角形。
但這會在邊緣處留孔和便叫(?)會導致一些邊經過很緊銳角?
我也可以想象,將每個邊連接成球頭圓柱體等等。
我用於上述槍管的方法是計算平均正常所有面共享一個頂點,然後乘上碰撞半徑。它不能很好地處理銳角,以及如果頂點在相反兩側的面之間錯誤地共享,該怎麼辦?
我將計算這一目,然後執行射線的交點,在Javacsript。所以性能也是一個考慮因素。一個太細的網格物體在進行碰撞檢測時會很昂貴。
如何有效地計算一個足夠好的位點網格?或者做位點感知的模糊三角形交集?或者是否有更好的方法來完成碰撞,並且可以以某種方式模擬物體以弧線而不是直線移動?
你真的需要放大的網格嗎?難道你不能只使用原始網格,並且考慮距離小於閾值(而不是交叉點)的碰撞? –
@ Anony-Mousse我在光線缺少三角形邊緣時遇到了問題,但玩家卻穿過它們。你怎麼能做一個路徑上的球員網格和牆壁相交?可悲的是,這似乎很難。 – Will
我知道的方法只是通過計算距離來工作。如果你的網格是凸的,那麼計算頂點 - 三角形的距離應該很好。如果你假設玩家是球形的,你只需要計算玩家點 - 三角形距離,並從距離中減去玩家大小。 –