• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Cpper
            C/C++高級工程師 Android高級軟件工程師 IT集成工程師 音頻工程師 熟悉c,c++,java,c#,py,js,asp等多種語言 程序猿
            常見的物理引擎有ode,newtow,phycisX,Havok以及子彈引擎等等
            本文介紹ode物理引擎中常用的函數:
            1.獲取物理引擎世界,大部分程序我們僅僅需要一個world(返回值為世界句柄)
            dWorldID dWorldCreate();
            2.銷毀給定的物理引擎世界和包含的所有物體和不包含在關節組中的所有關節
            1 dWorldDestroy (dWorldID);
            3.設置和獲取物理世界中的重力加速度
            1 void dWorldSetGravity (dWorldID, dReal x, dReal y, dReal z);
            2 void dWorldGetGravity (dWorldID, dVector3 gravity);
            其單位是m/s^2,假定z軸向上的話,那么地球重力加速度是(0,0,-9.81)
            在ode中默認的重力加速度是(0,0,0)
            4.設置和獲取引擎仿真步修正誤差
            1 void dWorldSetERP (dWorldID, dReal erp);
            2 dReal dWorldGetERP (dWorldID);
            典型的取值為(0.-0.8),默認取值為0.2
            5.設置引擎全局混合約束力(constraint force mixing)
            1 void dWorldSetCFM (dWorldID, dReal cfm);
            2 dReal dWorldGetCFM (dWorldID);
            典型取值為(10e-9,1)之間,
            默認值為單精度時為10e-5,雙精度時為10e-10
            6.物理世界的更新操作
            1 void dWorldStep (dWorldID, dReal stepsize);
            2 void dWorldQuickStep (dWorldID, dReal stepsize);
            stepsize為步進大小一般可取為0.5f
            可簡單描述為dWorldStep:精度高但是速度低
                                    dWorldQuickStep:精度低但是速度快
            7.設置和獲取仿真步迭代器個數
            1void dWorldSetQuickStepNumIterations (dWorldID, int num);
            2int dWorldGetQuickStepNumIterations (dWorldID);
            默認的迭代器個數為20.迭代器越多則結果越精確但是速度會變慢
            8.設置和獲取對象接觸修正速度
            void dWorldSetContactMaxCorrectionVel (dWorldID, dReal vel);
            dReal dWorldGetContactMaxCorrectingVel (dWorldID);
            其默認值是沒有限制的
            簡言之該函數決定了對象碰撞之后對象的速度變化上限
            9.設置對象表面接觸深度
            1 void dWorldSetContactSurfaceLayer (dWorldID, dReal depth);
            2 dReal dWorldGetContactSurfaceLayer (dWorldID);
            默認的大小是0也就是對象不會透過對象
            給定一個極小值比如0.01可以預防振動問題

            接下來是一些剛體函數:
            10.獲取和銷毀給定空間中的剛體對象
            1 dBodyID dBodyCreate (dWorldID);
            2 void dBodyDestroy (dBodyID);
            新生成的剛體質量為默認值,其位置在0點
            銷毀一個剛體其附加的關節點并不會消除也就是說不會影響仿真
            11.剛體的位置和旋轉操作
             1 void dBodySetPosition (dBodyID, dReal x, dReal y, dReal z);
             2 void dBodySetRotation (dBodyID, const dMatrix3 R);
             3 void dBodySetQuaternion (dBodyID, const dQuaternion q);
             4 void dBodySetLinearVel (dBodyID, dReal x, dReal y, dReal z);
             5 void dBodySetAngularVel (dBodyID, dReal x, dReal y, dReal z);
             6 const dReal * dBodyGetPosition (dBodyID);
             7 const dReal * dBodyGetRotation (dBodyID);
             8 const dReal * dBodyGetQuaternion (dBodyID);
             9 const dReal * dBodyGetLinearVel (dBodyID);
            10 const dReal * dBodyGetAngularVel (dBodyID);
            這些函數含義很明顯,需要注意的就是
            dBodyGetRotation返回的是一個4*3的旋轉矩陣
            12.設置,獲取剛體質量
            1 void dBodySetMass (dBodyID, const dMass *mass);
            2 void dBodyGetMass (dBodyID, dMass *mass);
            13.剛體受力
             1 void dBodyAddForce (dBodyID, dReal fx, dReal fy, dReal fz);
             2 void dBodyAddTorque (dBodyID, dReal fx, dReal fy, dReal fz);
             3 void dBodyAddRelForce (dBodyID, dReal fx, dReal fy, dReal fz);
             4 void dBodyAddRelTorque (dBodyID, dReal fx, dReal fy, dReal fz);
             5 void dBodyAddForceAtPos (dBodyID, dReal fx, dReal fy, dReal fz,
             6 dReal px, dReal py, dReal pz);
             7 void dBodyAddForceAtRelPos (dBodyID, dReal fx, dReal fy, dReal fz,
             8 dReal px, dReal py, dReal pz);
             9 void dBodyAddRelForceAtPos (dBodyID, dReal fx, dReal fy, dReal fz,
            10 dReal px, dReal py, dReal pz);
            11 void dBodyAddRelForceAtRelPos (dBodyID, dReal fx, dReal fy, dReal fz,
            12 dReal px, dReal py, dReal pz);
            四個參數的函數表明受力點為剛體質心
            7個參數的函數表明受力點位剛體給定點位置
            1 const dReal * dBodyGetForce (dBodyID);
            2 const dReal * dBodyGetTorque (dBodyID);
            3 void dBodySetForce (dBodyID b, dReal x, dReal y, dReal z);
            4 void dBodySetTorque (dBodyID b, dReal x, dReal y, dReal z);
            注意這是剛體受力和扭矩設置,獲取函數
            這對于清空剛體受力或者扭矩很有作用

            最后是幾個ode空間函數
            14.空間的構造和析構
            1 dSpaceID dSimpleSpaceCreate (dSpaceID space);
            2 dSpaceID dHashSpaceCreate (dSpaceID space);
            3 dSpaceID dQuadTreeSpaceCreate (dSpaceID space, dVector3 Center, dVector3 Extents, int Depth);
            4 void dSpaceDestroy (dSpaceID);
            15.空間平面坐標系設定
            dCreatePlane(space, a, b, c, d);
            參數a,b,c,d滿足以下函數關系
            ax+by+cz = d;
            那么
            1 dCreatePlane(space, 0100);
            2 dWorldSetGravity(world, 0-0.80);
            的含義是
            以空間y軸為重力加速度效果方向
            其重力加速度大小為-0.8速度為沿y軸向下.
            posted on 2010-02-26 11:04 ccsdu2009 閱讀(4148) 評論(2)  編輯 收藏 引用
            Comments
            • # re: ode物理引擎函數介紹(1)
              陳梓瀚(vczh)
              Posted @ 2010-02-26 11:41
              ODE是一個多少年前的博士生的畢業論文的附件,你可以去看看那篇論文。  回復  更多評論   
            • # re: ode物理引擎函數介紹(1)
              footee
              Posted @ 2010-02-26 12:42
              ode除了模擬剛體不錯以外,在模擬軟質物體方面還是有缺陷的。  回復  更多評論   
             
            久久se精品一区精品二区| 久久本道久久综合伊人| 无码超乳爆乳中文字幕久久| 无码日韩人妻精品久久蜜桃| 久久久老熟女一区二区三区| 久久国产视屏| 久久综合精品国产二区无码| 青青草国产精品久久| 久久香综合精品久久伊人| 亚洲国产成人精品无码久久久久久综合 | 久久精品无码av| 成人精品一区二区久久| 久久福利青草精品资源站| 久久无码国产专区精品| 亚洲美日韩Av中文字幕无码久久久妻妇| 三级三级久久三级久久| 狠狠色狠狠色综合久久| 伊人久久精品无码二区麻豆| 久久无码AV中文出轨人妻| 91秦先生久久久久久久| 久久99精品久久久久久野外| 99久久精品九九亚洲精品| 久久久无码精品亚洲日韩软件| 欧美日韩中文字幕久久伊人| 欧美亚洲另类久久综合婷婷 | www性久久久com| 色综合久久天天综合| 久久亚洲国产最新网站| 69久久精品无码一区二区| 久久亚洲国产成人精品无码区| 麻豆AV一区二区三区久久| 国产精品丝袜久久久久久不卡| 亚洲国产成人久久综合区| 人妻无码αv中文字幕久久 | 日韩欧美亚洲综合久久影院Ds | 久久精品国产亚洲Aⅴ香蕉| 久久久久亚洲av综合波多野结衣| 91精品国产色综久久| 久久久久亚洲Av无码专| 久久这里都是精品| 久久国产精品无|