英吋 C++

ODE – Chapter 6 《Rigid Body Functions》 Part II

    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為零則不影響。新創造的剛體預設會被世界重力所影響。

–End

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.