Box2D C++ 教程-射線投射
阿新 • • 發佈:2019-02-10
射線投射經常用來找出部分物理世界當中已經存在的物件。所謂射線就是一條直線,我們可以通過使用Box2D當中提供的方法來檢測是否與某個定製器(fixture)有交點。我們也可以找出與定製器交點的法線。
下面就是上面我提到的方法,如果射線與某個定製器發生碰撞則返回true。這裡需要注意的是此方法是b2Fixture類的一個成員,這也就是說首先我們滿足一個射線對兒這個基本條件才行。
1
|
|
現在讓我們看一下輸入、輸出引數。直接從原始碼中可以看出b2RayCastInput包含了哪些引數:
1 2 3 4 5 6 |
|
p1和p2點確定了射線的方向。maxFraction表示了射線檢測到交點的距離。下面的圖可能能夠讓人一目瞭然。maxFraction等於1意味著射線段是從p1點到p2點,在此例子中顯然不能與多邊形有交點,但是maxFraction等於2就可以。
下面是b2RayCastOutput包括的引數:
1 2 3 4 5 6 7 |
|
如果射線確實與多邊形相交,b2Fixture::RayCast將會返回true,而且我們可以通過這個輸出結構體裡的fraction引數找出交點段值(詳見上圖),還有在多邊形定製器表面生成的法線:
例子
為了嘗試一下這個很方便實用的功能,讓我們建立一個場景,場景的條件為失重狀態,其中漂浮著一些多邊形。現在建立這些你應該很順手了,接下來我們在四周建立一些牆來代替四方盒子作為邊界,為的是看起來更好看。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
|