ODE質åã»èŠæåé8!
ããã®ã³ã¡ã³ããïŒïŒïŒä»¶ãè¶ ããŸããã®ã§ïŒæ°ãã質åãèŠæã¯ODE質åã»èŠæåéïŒïŒã«ãé¡ãããŸãïŒããã®ã³ã¡ã³ãã¯ã¯ããŒãºããŸããã
ã§ã
ããã®ã³ã¡ã³ããïŒïŒïŒä»¶ãè¶ ããŸããã®ã§ïŒæ°ãã質åãèŠæã¯ODE質åã»èŠæåéïŒïŒã«ãé¡ãããŸãïŒããã®ã³ã¡ã³ãã¯ã¯ããŒãºããŸããã
ã§ã
ã¯ãããŸããŠãããã°ãã¯
ãããã¯ã«ã€ããŠã質åãªã®ã§ãã
cmd.exe ã®èµ·åäžã«ãšã©ãŒãçºçããŸããã
ãšãããšã©ãŒãã§ãŸãã
ã©ããããããã®ã§ããããïŒ
å®ãããã°ããåçãããããé¡ãããŸãã
ãå©ããã ããã
å®è¡äžã®ïŒ¯ïŒ€ïŒ¥ã®ç¶æ ããå¥ãã©ãŒã ãã«ã°ã©ããæ°å€è¡šç€ºã§ç¢ºèªã§ããããã«ãããã®ã§ãã
å¥ãã©ãŒã ïŒãŠã£ã³ããŒïŒã®ã¯ãªãšã€ãã®ä»æ¹ãããããŸããã
äœæ¹ãå®ãããææãã ãããŸãã
å ã¿ã«ç°å¢ã¯VisualC++2008EEã§ãã
å®ãããé¡ãããããŸãã
ãä¹ ãã¶ãã§ãã
æ¬ããã®ãµã€ããç ç©¶ã®åèã«ãããŠããã ããŠãããŸãã
ããããšãããããŸãã
ããããŸã ãŸã èªåã®å匷äžè¶³ã§ãããããã¡ãããæ©ãããããšãã§ããŸããã
kensei.cppã®ã©ã®éšåãã©ã®ããã«å€ãããšããããã¡ããã¯æ©ããŠãããŸããïŒ
ã§ããã°ãžã£ã³ãããããããã¡ããã®ä»ã«æ©ãããããã¡ããã®ããã°ã©ã ãã¢ããããŠããã ãããšãããããã§ãã
ãåçãé¡ãããŸãã
ããã«ã¡ã,床ã 倱瀌ããŸã.ä»åºŠODEã§äºéæ¯ãåã®ã·ãã¥ã¬ãŒã·ã§ã³ã«é¢ããŠç ç©¶ããããšã«ããã®ã§ãã, æžè¡°ã®ããããŒãžã§ã³ãšãªãããŒãžã§ã³ãäœãããã®ã§ãã,æ©æŠåãç¡ããã«ã¯ã©ãããã°ããã§ãããã.ããšODEãã©ã®ãããªåŸ®åæ¹çšåŒãè§£ããŠãããã¯å ã«ãªã£ãè«æãèªã¿èŸŒããããªãã§ããã?
ã¯ãããŸããŠïŒ
èªåã§odeã®ããã°ã©ã ãcode::blocksã§æžããŠ
ãã®ãŸãŸãã«ãããããšããã®ã§ãã
ode.hãdrawstuffã®ããããèªèããŠãããŸããã§ããã
ãããžã§ã¯ãã®å ŽæãODEã®ãã©ã«ãå ã«ããŠããã®ã§ããã
ãªããåå¿ããŠãããŸãããäœãè¯ãè§£æ±ºæ¹æ³ãããã°æããŠãããŸãããïŒ
åããŸããŠïŒODEãå©çšããŠããåããããã®ç ç©¶ãè¡ãªã£ãŠãããã®ã§ãïŒ
æ©é質åããããŠããã ãããã®ã§ããïŒODEã64bitã®OSã§åäœãããããšã¯å¯èœã§ããããïŒ
ãåçãããããé¡ãããããŸãïŒ
é£ç¶ã®è³ªåç³ãèš³ãããŸãããæ¥è§Šç¹ã«ã€ããŠæããŠãã ããã
æ¥è§Šç¹æ°ãšã¯ããæ¥è§Šç©äœåå£«ã®æ¥è§Šããé ç¹ã®æ°ããšèããŠããã®ã§ããããïŒ
以åã®ã質ååéïŒãã§
ãïŒã€ã®åäœãè¡çªãç¹°ãè¿ã现ããæ¯åããå ŽåããããŸãïŒã
ãšãããŸãããããã®ããšã«ã€ããŠããå°ã詳ããæããŠãã ãããã©ã®ãããªãšãã«ãããã®ããã©ãããåå ã§ãããã®ããç¥ãããã§ãã
ã¯ãããŸããŠãæè¿ODEã®å匷ãå§ããŸããåå¿è ã§ãã
質åãããŠãã ããã
ODEåçŽè¬åº§8( ERPãšCFM)ã®sample3ã«ERP=0.0ãèšå®ããŠãããã©ãã©äºä»¶ãçºçããïŒå»¶ã ãžã£ã³ããç¹°ãè¿ãããŠããŸããŸãã
ä»ã®éšåã¯ããã£ãŠããªãã®ã§ãããããã¯ç°å¢ãåå ãªã®ã§ããããïŒ
ãŸããODEæ¬ãåèã«ãããŠããã ããŠããã®ã§ããããããã1.1ããããããã1.2èé¢ç¯ãäœãããšããŠãåæ±ãšåæ±ã®éã«ãã³ãžãžã§ã€ã³ããæ¥ç¶ããŠã¿ãŠããé¢ç¯ãæ²ãããã«å°é¢ã«çªãåºãã£ãŠããŸããŸãã
å転軞ã¯(1,0,0)ã§èšå®ããŠããŸãã
èããããåå ãªã©ãããŸãããã¢ããã€ã¹ããã ããã°å¹žãã§ãã
ãããããé¡ãããããŸãã
å転ã«é¢ãã質åã§ãïŒãããããé¡ãããŸãïŒ
ããç©äœã®yawå転éã調ã¹ãããã«ïŒdGeomGetRotationã§yawè§ãåºåããŠããŸãïŒ
ãã®ãšãåºåãããŠããyawè§ã¯äžç座æšã§ã®X軞Z軞ã«å¯ŸããïŒç©äœã®é¢ã®æ³ç·ã®è§åºŠå·®ã§ããããïŒèª¬æãäžæã§ãããŸããïŒ
ããã«ã¡ã¯demuãã
ããŸã®ããã§ãïŒ
å æ¥ã¯ããããšãããããŸããïŒ
ãŸãã²ãšã€æããŠãã ããïŒ
ãŸã ODEãã¡ãããšäœ¿ããŠããªãã®ã§æ ¹æ¬ãªè³ªåã§æçž®ã§ããïŒä»¥äžã®ãããªå ŽåïŒODEã§ã·ãã¥ã¬ãŒã¿ãã€ããããšãã§ããŸããïŒ
çµç«äœæ¥ãè¡ããããã¥ã¬ãŒã¿ãšããç©äœãåäžå°é¢(äœæ¥å¹³é¢)äžã«ãã£ããšããŸãïŒ
å°äžã«ããç©äœãïŒæã¡äžããããšãªãå°é¢ã«æ²¿ã£ãŠéã¶æïŒåžžã«ãããã¥ã¬ãŒã¿ãšå°é¢ãšç©äœãæ¥è§ŠããŠããŠïŒéã«ãŒãã¿ããã«ãªããšæããŸãïŒãã®ãšãïŒç§»åæ¹åãéãããŠããŠãããã¥ã¬ãŒã¿ã«ããããããšææãå ãããšæãã®ã§ããïŒåé¡ãªãã·ãã¥ã¬ãŒã·ã§ã³ã§ããŸããïŒ
ææ§ãªè¡šçŸã§äŒãããªãã£ããç³ãèš³ãããŸããïŒ
ãããç¯å²ã§åçããã ããŸããïŒ
ããã«ã¡ã¯,å§ããŸããŠ.
ãã£ããã§ããODEã§æ¯ãåãã·ãã¥ã¬ãŒããããã®ã§ããçŽéšåãåäœã§ã¯ãªãå®éã®çŽã®ããã«ããã¿ãåºãããã®ã§ããã©ãããã°ããããã§ãããã?
ããã«ã¡ã¯ãODEæ¬æŽ»çšãããŠããã ããŠãããŸãã
ODEã䜿ã£ãŠå»ºè𿩿¢°ã®è§£æãè¡ã£ãŠããŸãã倧äœããŸãè§£æã§ããããã«ãªã£ãã®ã§ãããèŠçŽ æ°ãå€ãè§£æã«æéãæããããã«ãªã£ãŠããŸããŸãããããã§Visual Studio2008TeamSystemã«å«ãŸãããããã¡ã€ã©ã䜿ã£ãŠã©ã®éšåã§èšç®ã«æéãããã£ãŠãããã調ã¹ããšããdSolveL1ãšdSolveL1Tãšãã颿°ã§ããããšãçªãæ¢ããŸãããèšç®æéãççž®ããããããã®éšåã®ãœãŒã¹ã³ãŒããæžãæããŠOpenMPã«ãããã«ãã¹ã¬ããåã詊ã¿ãŸãããäœãšãOpenMPã«ãããã«ãã¹ã¬ããåã¯ã§ããã®ã§ããã倧åçéšåããã«ãã¹ã¬ããåã§ããŸããã§ããã®ã§ã¹ã¬ããçæã®ãªãŒããŒãããã倧ãããçããªãã©ãããããã£ãŠè§£ææéãé·ããªã£ãŠããŸããŸãããããã§ãdSolveL1ãšdSolveL1Tãšãã颿°ãé£ç«æ¹çšåŒãè§£ããŠããã®ã§ããã°ãSuperLUãOpneCVã䜿ã£ãŠæžãæããã°ãšæããåãæž¡ããããåŒæ°ã®æ§é ãšèšç®çµæãè§£æäžã«æžãåºããŠã¿ãŸããããããããã®èгå¯ãããããã®é¢æ°ã¯é£ç«æ¹çšåŒãè§£ããŠããããã§ã¯ãªãããšãããããŸãããå眮ããé·ããªã£ãŠããŸããŸãããLCPãè§£ãäžã§ãã®dSolveL1ãšdSolveL1Tãšãã颿°ãã©ããªèšç®ãããŠããã®ããããåãã§ããã°ãææé¡ããããšæããŸãããŸããè§£æéåºŠãæ¹åããããã®æ¹çããåç¥ã§ãããããã«ã€ããŠããããããé¡ãããŸãã
ã§ããã
äœéšèªæµ·ïŒæ¥œãããã§ããïŒ
æè¿PS3ã§ODEãåãããŠã¿ãããšææŠããŠããŸãïŒ
premake4 –help
ãå®è¡ãããšïŒ
cannot execute binary file
ãšãªããŸãïŒ
ã³ãã³ããtabã§è£å®ã§ãããïŒpathã®èšå®ã¯å€§äžå€«ã ãšæãã®ã§ããïŒïŒïŒ
ç°å¢ã¯ïŒPS3ãšyellow dog linux 6.1ã§ãïŒ
ã¢ããã€ã¹ããé¡ãããŸãïŒ
demuãã
ããŸã®ããã§ã
è¿ éãªãè¿äºããããšãããããŸã.
æ°ããVC++ãäœ¿ãæ¹æ³ã§ãã£ãŠã¿ãããšæããŸãïŒ
ãŸãïŒãªã«ããããŸããã質åãããŠããã ããŸãïŒ
ããããšãããããŸããïŒ
demuãã
ã¯ãããŸããŠïŒæè¿ç ç©¶ã§ODEãå°å ¥ããããšæ€èšäžã®åŠçã§ãïŒ
demuããã®æ¬ãèªã¿ïŒåãããããïŒODEã®é åãååã«æãïŒãã²äœ¿ãããã§ãïŒãã®ããã«ããã€ãæããŠããã ããŸããïŒ
ããã°ã©ã ã«ã€ããŠåå¿è ã§ãã®ã§ïŒããããªè¡šçŸããããããããŸãããïŒä»¥äžã®3ç¹ã«ã€ããŠãããããé¡ãããŸãïŒ
1.ODEãVC++6.0ã§èµ·åããæ¹æ³ãæããŠãã ããïŒ
2.ODEãšä»ã®APIïŒã©ã€ãã©ãªã䜵çšã§ããŸãã?
3.çŸåšïŒVC++6.0äžã§Smart Collision SDKãšåŒã°ããå¹²æžèšç®ã©ã€ãã©ãªã䜿ã£ãŠäœæããããã°ã©ã ãããã®ã§ããïŒãã®ããã°ã©ã ã«ODEãå°å ¥ããããšãã§ããŸããïŒ(ODEãšSmart Collision SDKã䜵çšã§ããŸããïŒ)
demuãã,ããã«ã¡ã¯.
IrrlichtãšODEãçµã¿åãããããšæã£ãŠ,ä»ã®ãµã€ãã§ã®ãµã³ãã«ããã°ã©ã ãåããããšæã£ãã®ã§ãã,ãšã©ãŒãåºãŠããŸããŸãã.
ãã®ãšã©ãŒã,ãæªè§£æ±ºã®ããŒã¯ã³ïœ”extern “C”ïœããšãæªè§£æ±ºã®å€éšã·ã³ãã«”extern “C”ïœããšãããã®ã°ããã§ãã.
extern “C”ã®ãšã©ãŒã¯,CãšC++ãäžç·ã«äœ¿ãããŠãããšãã«åºããšã©ãŒã ãšæã£ãŠããã®ã§ãã,ODEã¯ã©ã¡ãã«ã察å¿ããŠããã®ã§ãããïŒ
includeã®ããããŒãã¡ã€ã«ãèŠãŠã
#ifdef __cplusplus
extern “C” {
#endif
ã§å šãŠã®é¢æ°ãå²ã£ãŠãã£ãã®ã§,ãªããšã©ãŒãåºãã®ãããããŸãã.
åå ããããã°æããŠããããªãã§ããããïŒ
ãããããé¡ãããŸã.
ODEæ¬ã®æ¹ã«ãã¯ã¹ãã£ãå€ããã®ã«ïŒ
ãµããŒããµã€ãããã°ãªãããã¯ã¹ãã£ã
ããŠã³ããŒãããŠãã ãããšãããŸãããïŒ
ã©ãã«çœ®ããŠããã®ãåãããŸããïŒ
æããŠé ããŸãã§ããããïŒ
ãã¿ãŸãããèªå·±è§£æ±ºããŸããã
ãã Boxã®ãžãªã¡ããªãçæããŠãªãã ãã§ããã
ã¯ãããŸããŠã
ODEæ¬ã®ãµã³ãã«ãªã©åããããããŠããã®ã§ãããããããªãããšããã質åãããŠããã ããŸãã
çŽæ¹äœã§èãããããäœãããšããŠããã®ã§ããdWorldStep(world,0.01);ãå ¥ãããšç»é¢ã«ãããããæ ããªããªã£ãŠããŸããŸãã
dWorldStep(world,0.01);ãæããšããããã¯è¡šç€ºãããŸããããã¡ããåããŸããã
ãžã§ã€ã³ãã®å¶åŸ¡ãééã£ãŠãããããããŸãããdWorldStep(world,0.01);ãå ¥ããªããšç¢ºèªãã§ããŸããã
ã©ãããåå ãèããããã§ããããïŒ
ãåçãããããé¡ãããŸãã
ãã¿ãŸããODEã¯é¢ä¿ãããŸããã§ããã
ä»ã®ãµã€ãã調ã¹ãã解決ã§ããŸããã
ãéšããããŠãã¿ãŸããã
bããïŒ
ã¯ãããŸããŠïŒ
ãã¿ãŸãããïŒïŒ¯ïŒ€ïŒ¥ã®ããã°ã©ã ããã¡ã€ã«åå²ã®æå³ãããããããŸããïŒããïŒå°ãå ·äœçã«æããŠé ããŸãããïŒ
ODEãšãã¡ã€ã«åå²ã¯é¢ä¿ããŠããªããšæãã®ã§ããïŒïŒïŒ
ã§ã
åããŸããŠãODEã䜿ã£ãŠç ç©¶ãè¡ã£ãŠãããã®ã§ãã
æè¿ODEã®ããã°ã©ã ããã¡ã€ã«åå²ãããããŠããã®ã§ããããŸããããŸããã
ããæ¹æ³ãç¥ã£ãŠããããããããé¡ãããŸãã
ãœã£ããŒããïŒ
ãä¹ ãã¶ãã§ãïŒ
åå€ã¯è¯ãè¡ã§ããïŒ
ããŠã埡ææããããšãããããŸããdReal dJointGetUniversalAngle1Rateã®ä»¶ã¯ïŒå·ã§ã¯ä¿®æ£ããŠããŸãïŒãªãïŒãã¥ãŒããã€ãã®è¡é¢ç¯ããŠãããŒãµã«ãžã§ã€ã³ãã§å®è£ ããããšæïŒïŒïŒïŒå¹ŽåããªïŒããŸãããïŒæãããã«å¶åŸ¡ã§ããªãã£ãã®ã§æ¢ããçµéšããããŸãïŒãã以æ¥ïŒãŠãããŒãµã«ãžã§ã€ã³ãã¯äœ¿ã£ãŠããŸããïŒ
䜿çšãããŠã¿ãŠåé¡ããªããã°æããŠé ããã°ãããããã§ãïŒ
ã§ã
demuããïŒ
äœåºŠãã¹ããã»ã³ïŒ
ODEæ¬ã®ç¬¬1çã䜿çšããŠããŸãïŒ
p.87ã®ãŠãããŒãµã«ãžã§ã€ã³ãã®è§é床ãååŸããAPIã¯
dReal dJointGetUniversalAngleRate1
dReal dJointGetUniversalAngleRate2
ã§ã¯ãªãïŒ
dReal dJointGetUniversalAngle1Rate
dReal dJointGetUniversalAngle2Rate
ãæ£ããããã§ãïŒ
demuããïŒ
å çšã®ãŠãããŒãµã«ãžã§ã€ã³ãã®ä»¶ã§ããïŒ
u_joint = dJointCreateUniversal(world, contactgroup);
ã
u_joint = dJointCreateUniversal(world, 0);
ãšããããšã§è§£æ±ºã§ããããã§ãïŒ
ãéšããããŸããïŒ
ãŸãåãããªãç¹ãã§ãã質åãããŠããã ããŸãïŒ
demuããïŒãã²ããã¶ãã§ãïŒ
åå€ã¯ãããã§ãããïŒ
ãŠãããŒãµã«ãžã§ã€ã³ãã«ã€ããŠè³ªåããããŸãïŒ
2æ¬ã®ãªã³ã¯ããŠãããŒãµã«ãžã§ã€ã³ããšæ¥ç¶ããŠïŒ
dJointAddUniversalTorques()
ãçšããŠé¢ç¯ã«ãã«ã¯ãå ¥åãããšïŒã³ã³ãã€ã«ã¯éãã®ã§ããïŒå®è¡æã«ãšã©ãŒãåºãŠããŸããŸãïŒ
ãžã§ã€ã³ãçæã¯
u_joint = dJointCreateUniversal(world, contactgroup);
dJointAttach(u_joint, mylink[0].body, mylink[1].body);
dJointSetUniversalAnchor(u_joint, 0.0, 0.0, 0.5);
dJointSetUniversalAxis1(u_joint, 0, 1, 0);
dJointSetUniversalAxis2(u_joint, 0, 0, 1);
ãšããŠããŸãïŒ
äœãèšå®ãè¶³ããªãã®ã§ããããïŒ
ãå¿ããããšæããŸããïŒå®ãããé¡ãããŸãïŒ
ãã¿ãŸããã
äœåºŠã確èªããã®ã§ããèšèŒãã¹ã§ããã
ãéšããããŸããã
ããããšãããããŸãïŒdemuãã
linuxã®æ¹ã¯
#define dsDrawSphere dsDrawSphereDãå®çŸ©ãããŠããŸããã§ããïŒ
codeblocsã®æ¹ã¯ã¯ãŒã¯ïœœïŸïŸïœ°ïœœã®ä¿åããã£ãããšããŠããŸããã§ããã
èšå®ããåŸä¿åããããŠããŸããã§ããã
質åã§ãã
ã³ã³ãã€ã«ã¯éããŸãããå®è¡ãããš
Bad argument(s) in dBodyGetPosition()ãšè¡šç€ºããå®è¡ã§ããŸããã
èŠæåéïŒã«ããdInitODE();ãšdClodseODE();ãå ¥ããŠãå€ãããŸããã
ä»ã®èŠå ã¯ãããŸããïŒ
tatsuyaããïŒ
>cannot convert `const dReal*â to `const double*â for
>argument `1â² to `void dsDrawSphereD(const double*, const double*, float)â
ãã®ãšã©ãŒã®åå ã¯ããã€ããããŸãïŒ
ïŒïŒODEãå粟床ã§ã€ã³ã¹ããŒã«ããŠããªã
ïŒïŒ #define dsDrawSphere dsDrawSphereDãå®çŸ©ãããŠããªã
äžã®åé¡ã¯ãããŸãããïŒãããã§ã解決ããªãå Žåã¯(const double *)ã§ãã£ã¹ãããŠãã ããïŒã
ãŸãïŒcodeblocksã§ã³ã³ãã€ã«ããæ¹æ³ã¯ä»¥äžã«æžããŠããŸãã®ã§ïŒãã®ãšããããã°åé¡ãããŸããïŒode.h, drawstuff.hãç¹å¥ã«ã³ããŒããŠå¥ã®å Žæã«ããå¿ èŠã¯ãããŸããïŒãã®ããã°ã«ããã©ãã®èšäºã®ãšãããã£ããïŒãã®ãããªãšã©ãŒãåºããšããããã«ã³ã¡ã³ãé ãããåå ãããããšæããŸãïŒ
http://demura.net/tutorials/ode2
æåŸã«ODEã¯ã§ããã ãææ°çã䜿ãããããšããå§ãããŸãïŒ.0.9ãšæ¯èŒããŠ0.11.1ã¯è¡çªæ€åºãªã©ãæ¹åãã倧ããé²åããŠããŸãïŒ
ããã§è§£æ±ºããã°è¯ãã®ã§ããïŒè³ªåãããã°æ°è»œã«ãé¡ãããŸãïŒ
ã§ã
ãã¿ãŸããïŒlinuxã®odeã¯version0.5ãæ¢ã,version0.9ãã€ã³ã¹ããŒã«ãããŠããŸãïŒ
ãå¿ããäžããããšãããããŸãïŒ
äºã€è³ªåããããŸã.
linuxã®æ¹ã¯ïŒãïŒåºŠå ¥ãçŽããŸãã.
çŸåšã¯æ¬ã«æžããŠããããã°ã©ã ãåããããšããŠããŸã.
ïŒã€ç®ïŒ
ODEã®è¯ãèŠæãããšã©ãŒã«ãããŸãã
cannot convert `const dReal*’ to `const double*’ for
argument `1′ to `void dsDrawSphereD(const double*, const double*, float)’
ã¯å ·äœçã«ã©ã®ãããªå¯ŸåŠãããã°ããã§ããããïŒ
ãã¿ãŸãã.codeblocksã®æ¹ã¯DebugDoubleLibãåå ã§ããïŒ
DebugsignalLibãéžãã ã®ã ãšæããŸãïŒæåã®Debugãš
æåŸã®Libãåãã§ãã£ãã®ã§äœåºŠã確èªããã®ã§ããééããã®ã ãš
æããŸã.
codeblocksã¯windowsã«å ¥ã£ãŠããã®ã§ããæ¬éãã®ããã°ã©ã ã
æžã,ã³ã³ãã€ã«ããããšããŠããŸãïŒ
2ã€ç®
codeblocksã§ã³ã³ãã€ã«ããã«ã¯ode.h&drawstuff.hãäœåŠã«ããã°ããã®ã§ããããïŒ
ãããã䜿ããããéãã®ã§ããããïŒ
é·ã ãšãã¿ãŸããïŒåŸ¡åçãé¡ãããŸãïŒ