Box2D

 

幾個概念:

世界(b2World):世界就是一個環境,所有物理運算都在這個裏面進行。
形狀定義(b2ShapeDef):形狀定義是什麼?說簡單點形狀定義就是定義你這個對象的樣子,它用來做什麼?就是用來確定你的碰撞。
剛體定義(b2BodyDef):剛體定義就是設定剛體的初始具體,在目前來說,最大的功能就是把你定義好的形狀加到你想到的剛體上。
剛體(b2Body):剛體就是物理引擎裏面的東西(對象),它可以受力的作用進行當前位置的變化旋轉等。你要在世界中使用的所有物體目前  來說都是剛體。

 

數據類型:

1、b2Vec://在2bMath.h中定義

就像在3D中Vector3類的使用一樣,b2Vec2在Box2D中也應用廣泛,你幾乎在每個時刻都用到它,比如說定義座標位置,定義Box大小等。類似於向量。

b2Vec2是由float32類型的x,y組成,支持負向量,+=,-=,*=操作符,
支持的方法有
Void SetZero();設置x,y爲0
Void Set(float32 x_, float32 y_);設置x,y爲指定值
b2Vec2 Make(float32 x_, float32 y_),生成一個值指定的b2Vec2
float32 Length()取得向量的長度或模
float32 Normalize()標準化向量
bool IsValid()檢查是否有效

 

2、2b2Mat22://在2bMath.h中定義
其實b2Mat22一個由兩個b2Vec2組成的2*2方陣,類似一個二維數組,可以直接由兩個b2Vec2(col1、col2)構造或者由一個角度值構造。
主要方法有:
void Set(const b2Vec2& c1, const b2Vec2& c2)
void Set(float32 angle),
提供兩種方式賦值方法
void SetIdentity(),設定恆等式
void SetZero(),把col1、col2的x,y都清爲0
b2Mat22 Invert(),轉換相關數據
b2Vec2 Solve(const b2Vec2& b),解決A * x = b

 

3、b2AABB:

b2AABB就是一個盒子,是由兩個向量組成,一個爲minVertex是最小頂點,另一個爲maxVertex是最大頂點,通過這兩個頂點來表示最爲普通的AABB框。

結構體原型:

struct b2AABB
{
    /// Verify that the bounds are sorted.
    bool IsValid() const;

    b2Vec2 lowerBound;    ///< the lower vertex
    b2Vec2 upperBound;    ///< the upper vertex
};

 

4、b2ShapeDef

b2ShapeDef直翻爲形狀定義,它用一個b2ShapeType型量type來表示形狀類型,用函數指針來表示用戶數據(userdata),用一 個b2Vec2向量localPosition來表示當前位置,用float32的localRotation來表示當前角度,用float32的 friction、density、restitution來表示摩擦力、密度、彈性係數,用uint16的categoryBits和maskBits 來表示碰撞位及位標識(可以用來過濾一些碰撞),用int16的groupIndex來表示組號,這個組號可以用來過濾還比位標識優先。

相關常量
enum b2ShapeType
{
e_unknownShape = -1,
e_circleShape,
e_boxShape,
e_polyShape,
e_meshShape,
e_shapeTypeCount,
};
相關形狀定義
b2CircleDef,圓,繼承於b2ShapeDef,type 爲 e_circleShape,另外帶有一個類型爲float32的量radius來表示半徑值。
b2BoxDef,盒子,繼承於b2ShapeDef,type 爲 e_ boxShape,另外帶有一個類型爲b2Vec2的量extents來表示區域值。
b2PolyDef,多邊形,繼承於b2ShapeDef,type 爲 e_ polyShape,另外帶有一個類型爲b2Vec2的數組vertices來表示頂點,並帶有一個int32型的量vertexCount來表示頂點數,目前頂點數最多支持8個。

 

5、b2BodyDef://在b2Body.h中定義

b2BodyDef是剛體定義結構,由一個函數指針userData來表示用戶數據,一組類型爲b2ShapeDef*指針數組shapes來表示形狀隊列,目前形狀數最大支持64個,用一個b2Vec2向量position來表示當前位置,用類型爲float32的量rotation來表示當前角度,用類型爲b2Vec2的量linearVelocity表示線速度,用類型爲float32的angularVelocity來表示角速度,用類型爲 float32的量linearDamping來表示線性阻尼,用類型爲float32的量angularDamping來表示角阻抗,用類型爲bool 的allowSleep 來表示是否可以允許休眠,用一個類型爲bool的isSleeping來表示是否正在休眠,用一個類型爲bool的量preventRotation來表 示是否防止旋轉,支持方法:
AddShape(b2ShapeDef* shape)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章