6.6 Miscellaneous Body Functions
void dBodySetData (dBodyID, void *data);
void *dBodyGetData (dBodyID);
取得和設定剛體使用者自訂資料的指標。
void dBodySetFiniteRotationMode (dBodyID, int mode);
設定剛體每次推進時控制旋轉的模式。
mode參數可以是:
• 0: 以『無窮小』的方式更新。計算快速,但在鋼體快速旋轉時偶爾會出現不準確的結果。特別是這些剛體還有連結到其他剛體。新的剛體預設都是使用這個模式。
• 1: 以『有限』的方式更新。需要更多計算,但在剛體快速旋轉時有更好的準確度。儘管如此,高速旋轉的剛體還是會產生各種不同的模擬錯誤,這個模式只會修正最原始的剛體。
int dBodyGetFiniteRotationMode (dBodyID);
回傳目前剛體控制旋轉的模式(0或1)。
void dBodySetFiniteRotationAxis (dBodyID, dReal x, dReal y, dReal z);
設定剛體的無窮小旋轉軸。這個軸只有在使用『有限』模式會使用(詳見dBodySetFiniteRotationMode())。
如果旋轉軸為零(0, 0, 0),所有的有限旋轉將套用到剛體上。
如果旋轉軸為非零,剛體就會根據旋轉軸旋轉。而『無窮小』的模式就是直接沿著直角旋轉。
這樣可以減少剛體在快速旋轉時所造成的錯誤。舉例來說,如果有個汽車輪胎在高速旋轉的時候,你可以呼叫這個方法讓輪胎延著輪胎的轉軸(wheel's hinge axis)轉動,用以改善它的旋轉方式。
void dBodyGetFiniteRotationAxis (dBodyID, dVector3 result);
回傳剛體目前的限制軸。
int dBodyGetNumJoints (dBodyID b);
回傳附加在剛體上的關節(Joint)數量。
dJointID dBodyGetJoint (dBodyID, int index);
依照給予的index,回傳剛體上的關節。有效值範圍從0到n-1,這裡的n可從dBodyGetNumJoints()取得。
void dBodySetGravityMode (dBodyID b, int mode);
int dBodyGetGravityMode (dBodyID b);
設定和取得剛體是否被世界的重力所影響。如果mode為非零則影響,如果mode為零則不影響。新創造的剛體預設會被世界重力所影響。