ODE質åã»èŠæåé4!
æ°ãã質åãèŠæã¯ãã¡ãã«ãé¡ãããŸãïŒ
ãªããç§ã®ã³ã¡ã³ãããèªåã®åªåã«ããåé¡ã解決 ãããå Žåã«ãåé¡ã®åå ããããã°æçš¿ããŠé ããšå€§å€å©ãããŸãããã®æ å ±ã¯ODEã®åå¿è ã«ãšã£ãŠéèŠãªãã®ã§ããããçšåºŠããŸããŸãããFAQã«æ²èŒããããšæããŸãã®ã§ãååã®ã»ã©ãããããé¡ãããŸãã
LycorisããïŒ
ã¯ãããŸããŠïŒ
ODEã®é¢ç¯ã«ã¯æ©æŠããªãã®ã§ïŒãèªåã§å®è£ ããå¿ èŠããããŸãïŒ
ODEæ¬P33ã®ããã°ã©ã 2.2ã«æ©æŠãã«ã¯ãäžããã³ãŒãããããŸãã®ã§åèã«ããŠãã ããïŒããã§ã¯ïŒå転éåºŠã«æ¯äŸããŠæ©æŠãã«ã¯ãäžããç°¡åãªæ©æŠã¢ãã«ãé¢ç¯ã«å®è£ ããŠããŸãïŒ
ã§ã
ã¯ãããŸããŠLycorisãšèšããŸã
æ€ åãªã©ã«ã€ããŠãããã£ã¹ã¿ãŒéšåãäœã£ãŠããã®ã§ããããžã§ã€ã³ãéšåã«æµæãç¡ãããåãåºããšãšãŸããŸããã
æžè¡°çäœçšã®é¢æ°ã¯èªåã§äœããªããã°ç¡ãã®ã§ããããïŒ
tiroããã
ä»ãŸã§ãããã¹ããšãã£ã¿ã«é¢ããèšäºãäžåãªãã£ãããšã«æ°ã¥ããããŸãããterapadã®ã€ã³ã¹ããŒã«ãšèšå®ã«é¢ããèšäºãODEæ¬ã®ã«ããŽãªã«è¿œå ããŸããã®ã§ãè¯ãã£ããèªãã§ãã ããã
å šãã®åå¿è ã§ãODEæ¬ãšæ¬ãµã€ããèªãã°ãç°¡åãªããããã·ãã¥ã¬ãŒã¿ãäœãããšãç®æšãšããŠããŸãã®ã§ãä»åŸãšããããããé¡ãããŸãã
ã§ãããã
解説ããããšãããããŸãã
TERAPADãã€ã³ã¹ããŒã«ããœãŒã¹ã³ãŒããæã¡èŸŒãã§ããããšãã§ããŸããã
tiroããã
ODEæ¬ããè³Œå ¥é ããŸããŠãããããšãããããŸãã
åå¿è ã察象ã«å·çããŠããã®ã§ããããã¥ããç®æãããã°ãææãã ããã
ããŠã以äžåçããŸãã
ïŒïŒãcppãã¡ã€ã«ã®ãœãŒã¹ã³ãŒãåã倿Žããªããã°makefileã®äžèº«ãæžãæããå¿ èŠã¯ãããŸããããã ãéåžžã¯å顿¯ã«ãã©ã«ãïŒãã£ã¬ã¯ããªïŒãäœãããœãŒã¹ã³ãŒãåã倿ŽããŸãã
ãã®å Žåãhello.cppã®ãã¡ã€ã«åãhello2.cppã«å€æŽããããmakefileã®ïŒè¡ç®ã«ããTARGET = ã®å³èŸºãhello2ã«å€æŽããŸãã
2. ãèªåã§ãœãŒã¹ã³ãŒããäœæãããšãã¯ãäœãã®ãšãã£ã¿ãŒã䜿ã£ãŠãã ãããç§ã®ææ¥ã§ã¯terapadã䜿ã£ãŠããŸããããããæ€çŽ¢ãããšèŠã€ãããŸãããªããã¡ã¢åž³ã¯æ¹è¡ã«åé¡ãããã®ã§ãå§ãã§ããŸããã
3. makefileã¯terapadãªã©ã®ãšãã£ã¿ãŒã§éããŠãã ããã
ã§ã
mommaããã
ã€ãã³ãã§è¿·è·¯ã奜è©ã ã£ããšã®ããšãããã£ãã§ããã
äœããã£ããããŸãèããŠãã ããã
ã§ã
ã¯ãããŸããŠãã貎æ¹ã®åŸ¡æ¬ãè³Œå ¥ãããã°ã©ãã³ã°ãšããããã·ãã¥ã¬ãŒã·ã§ã³ã«ããããã§ãããŸããçè§£ããããäžå¯§ãªèª¬æã¯ãåå¿è ã§ããç§ã«ãšã£ãŠå€§å€ããããããã®ã§ããããããšãããããŸãããšããã§ïŒïŒïŒè³ªåããããŸãã
ãŸãäžã€ç®ã¯ãæ¬ã®äžã®EXã詊ããããããšãã°ïœïŒïŒããŒãžã®ïŒ¥ïŒžïŒïŒïŒã§ãéåå é床ã倿ŽããŠïœãã®ããã«ãœãŒã¹ã³ãŒãã倿Žããªããã°ãªããªããšãããµã€ãããããŠã³ããŒããããŠé ãããã¡ã€ã«ã®äžã§å€æŽããªããã°ãªããªãã®ã¯ãïœïœïœãã¢ã€ã«ã®ãœãŒã¹ã³ãŒãã®ã¿ã§ããã®ã§ããããïŒã»ãã®ãã¢ã€ã«ïŒäŸãã°makefileãªã©ã¯ããããªããŠãè¯ãã®ã§ããããïŒ
äºã€ãã¯ãè¯ããã質åã®ã³ãŒããŒã®ïŒïŒã«ã€ããŠãªã®ã§ããããŸãèªåã§ãœãŒã¹ã³ãŒããã€ãããšããã¡ã¢åž³ã«ãœãŒã¹ã³ãŒãããã¡ããã§ããããmyprogãã©ã«ããŒå ã«ãããã°ããã®ã§ããïŒ
次ã¯èª¬ææå ã®èšè¿°ã§ããšãã£ã¿ãŒã䜿ãmakefileã®TARGETã倿Žãã»ã»ã»ããšæããŸãããmakefileãéãããšãã§ããªãã®ã§ãããã©ãããã°ããã®ã§ããããïŒ
質åã®å 容ãåæ©çã§å€§å€æçž®ã§ããããããããé¡ãããŸãã
幎æ«ã§ãå¿ããã§ãããããã幎æãã«ã§ããããããé¡ãããããŸãïœïŒïŒãïŒïŒïœ
ã§ããã
ãç¡æ²æ±°ããŠãããŸããmommaã§ãã
ããããã§ãããAã¢ãŒã¿ã®ãœãŒã¹ããäœæãããéã³ã®è¿·è·¯ã²ãŒã ã®ãœãŒã¹å ¬éãšãªããŸããã
(ãŽããŽããã£ã€ããã®ã§å¥ç©ã«ãªãã€ã€ãããŸãã)
å®éã«ã¯Joysticçã®ã»ã³ãµã§ã³ã³ãããŒã©ãäœæããŠãè¿·è·¯ãåããããã«ããŠããŸãã
ã€ãã³ãã§ããªããªã奜è©ã§ããã
ç©çèšç®ãšã³ãžã³ã®ãèã§ããããªã®ã楜ã«äœããŠé©ãã§ãã
toshiãã
ãå°é¢ãšã®æ©æŠä¿æ°ãç©äœæ¯ã«èšå®ãããã®ã§ãããå¯èœãªã®ã§ããããïŒããšããã質åã§ããïŒå¯èœã§ãïŒ
nearCallback颿°ã®åŒæ°ã¯æ¥è§Šããå¯èœæ§ãããïŒã€ã®ãžãªã¡ããªã®IDçªå·ã§ãïŒãifæãªã©ã䜿ã£ãŠãžãªã¡ããªæ¯ã«å¥œããªæ©æŠä¿æ°ãèšå®ããŠãã ããïŒ
ã§ã
ãã£ããŒãã³ãã
ã€ãã¿ãŒãã³ãšã¯æãããé¿ã…
ããŠã
1. ãã¿ãŸããããã質åã®æå³ãããããããŸããã
ããå¹³é¢ãæç»ããAPIã¯dsDrawPlane()ã§ãã
ïŒïŒvoid dsDrawTriangle(const float p[3],const float R[12],const float *v0,const float *v1,ãconst float *v2,int solid);
p[3]ã¯äœçœ®ïŒR[12]ã¯å転è¡åïŒv0, v1, v2ã¯äžè§åœ¢åé ç¹é åãªã©ãžã®ãã€ã³ã¿ïŒsolidã0ãªãã¯ã€ã€ãŒãã¬ãŒã ïŒ1ãªãé¢ã衚瀺ããŸãïŒ
ãã®çšåºŠã®èª¬æã§ããããã§ããããïŒ
ã§ã
åå¿è ãã
ãè¿äºãé ããªããã¿ãŸããã幎æ«ãªã®ã§ãããããšãããŸã㊅
1.ãODEæ¬ã§ã¯ç°¡åã«ããããã«äŸå€åŠçã¯ããŠããŸããã
ããèªåã§äŸå€åŠçãèããå¿ èŠããããŸãã
ã(6.102)åŒã®å·ŠèŸºã®åæ¯ã«ããS5ãååã«ãã£ãŠããŠãã ããã
ïŒïŒå§¿å¢æ å ±ã¯ã©ãäžããã°è¯ãããšããã質åã§ãã
ãå転è¡åãŸãã¯ã¯ãªãŒã¿ããªã³ã§èšå®ããããšãã§ããŸãã
ã§ã
ã§ãããã以å質åãããŠããã ããtoshiã§ã
å°é¢ãšã®æ©æŠä¿æ°ãç©äœæ¯ã«èšå®ãããã®ã§ãããå¯èœãªã®ã§ããããïŒ
ãŸããã®æ¹æ³ããã³ããæããŠããã ãããšå©ãããŸãã
ããã«ã¡ã¯ãã¯ãããŸããŠã
忥ç ç©¶ã«ãããŠãODEã®æ¬ã»ãµã€ããåèã«ãããŠããã ããŠãããŸãã
ããŠã質åãªã®ã§ãã
â å¹³é¢ã®ãžãªã¡ããªã衚ãéæç»APIã¯å¿ èŠã§ããããïŒ
â¡void dsDrawTriangle(const float p[3],const float R[12],const float *v0,const float *v1,
const float *v2,int solid);ã®äœ¿ãæ¹ãåãããŸããã
ãããããé¡ãããŸãã
äœåºŠãç³ãèš³ããããŸããã
åèæžãç°¡åïŒå®è·µïŒããããã·ãã¥ã¬ãŒã·ã§ã³ãã®ïŒèªç±åºŠã¢ãŒã ããããã®åŠç¿ãããŠããŠäºã€è³ªåããããŸãã
ïŒïŒP179ãåŒ(6.103)ã®-b’z/S5ãšãããŸãããS5(sinΞ5)ã0ã®å€ããšãã®ã§ã忝ã0ãšãªããšã©ãŒãèµ·ãããŸãã
ãããããã質åã«ããããã«ãåæè§åºŠã®èšå®ãã§ããªããããªã®ã§ã©ãããã°ããã®ã§ããããã
ããååã質åãããšã©ãŒã¯ãããåå ã®ããã§ããã
ïŒïŒééååŠãšã¯”æå äœçœ®”㚔姿墔ããããããããšãããããå®çŸãã鿥è§åºŠãæ±ããããšã§ãããã
ããïŒèªç±åºŠã®ã¢ãŒã ããããã«ééååŠãå®è£ ãããã®ã§ãããäœçœ®ã«é¢ããŠã¯drawP()颿°ã«ãã£ãŠäœçœ®æ å ±ãäžããããšãã§ããã®ã§ãããå§¿å¢æ å ±ã¯ã©ã®ããã«äžããã°ããã®ã§ããããã
ãå€å¿ã®äžå€§å€ç³ãèš³ããããŸããã
ã§ãããã倧å€ãå¿ããäžãåçããããšãããããŸãã
ãªãã»ã©ïŒæè¿ãåŒãsinãcosãªã©ãã¡ããã¡ãè€éåããŠããŠããã®ã§ãå®éã«æ°å€ãä»£å ¥ãããªã確èªããŠã¿ãŸãã
ããããšãããããŸããïŒ
åå¿è ããã
assertion “bNormalizaitionResult” failed in _dNormalize4()[../../include/ode/odemath.h]
ãã®ããããããªãã¡ãã»ãŒãžãã§ãã®ã¯ãdBodySetRotation()ãŸãã¯dBodySetQuaternion()ã®äžã§äœ¿ãããŠããã¯ãªãŒã¿ããªã³ïŒïŒå æ°ïŒãæ£èŠåãããšãã«ããªãããã®çç±ã§åèŠçŽ ã®äºä¹åãïŒä»¥äžã«ãªãå Žåã§ãã
ãã®ãšã©ãŒã¡ãã»ãŒãžã ãã§ã¯åå ãããããŸããã
çŸåšãã¢ãŒã ããããé¢é£ã§ããããããã°ã©ã ãäœã£ãŠããŸãã
æè¿ãããªãšã©ãŒã«ããééããŸãã
ã³ã³ãã€ã«ã¯æåããå®è¡ãã¡ã€ã«ãéãããšãããš
ODE INTERNAL ERROR 1
assertion “bNormalizaitionResult” failed in _dNormalize4()[../../include/ode/odemath.h]
ãšè¡šç€ºãããã·ãã¥ã¬ãŒã·ã§ã³ã¯èŠããŸããã
ã©ã®ããã«ããã°è§£æ±ºã§ããã§ããããïŒ
ãããããé¡ãããããŸãã
ããããã
ãææããããšãããããŸãã
P112ã®è»èŒªã®é·è»žæ¹åãïŒ(y軞æ¹åïŒãšããŠããã®ã¯èª€ãã§ãã
24è¡ç®ã®dRFromAxisAndAngle()ã§y軞ãäžå¿ã«ïŒïŒåºŠå転ãããŠãåæ±ïŒè»èŒªã®è»žïŒã®åããx軞ãšå¹³è¡ã«ããŠããŸããã§ãããé·è»žæ¹åã¯ïŒã§ãªããŠ1ã§ãªããã°ãããŸããã
ã§ã
ã§ããããå¿ããäžããããšãããããŸãã
æ £æ§ãã³ãœã«ã«ã€ããŠã
è²ã 調ã¹ãŠã¿ãã®ã§ããã»ã»ã»
ã©ããªãšãã«ã©ããªå€ãå ¥ããã°ããã®ããæ£çŽããããããŸããã§ããã
äŸãã°ODEæ¬ã®p112ã§ãè»èŒªãäœãéã«ãé·è»žæ¹åã 2 ãšãããŠããŸããã
ã©ãããŠããã㯠2 ãªã®ã§ããããïŒ
dJointGetAMotorAngleRateã«ã€ããŠã
ãªãã»ã©ãå®è£ ãããŠãªãã£ããã§ããã
ããŒã«ã«Aã¢ãŒã¿ãã€ããŠåãããŠããã®ã§ããã
ããŒã«ã«ãdJointGetBallAngleRateãªããŠå®è£ ãããŠããŸããããïŒ
dJointGetAMotorAngleRateãå®çžãããæ¥ãåŸ ã£ãã»ãããããããããŸãããã
ãœãŒã¹ã³ãŒããªããŠèªããªãã®ã§æ¬åœã«ãããããã§ããã©ããããããšãããããŸããã
ãããããã
è¿äºãé ããªããã¿ãŸããã
垫走ã ããã£ãŠå¿ããã§ã…
dJointGetAMotorAngleRateã¯ãœãŒã¹ã³ãŒããèªããšãŸã å®è£ ãããŠããŸããã
AMotorã¯é¢ç¯ã«æšæºã§ä»ããŠããã¢ãŒã¿ãã髿§èœãªãšãŒã¢ãŒã¿ã§ãã
䜿ããšãã¯ãã³ãžãªã©ã®ä»ã®é¢ç¯ãšçµã¿åãããŠäœ¿ããŸãã
ãã®é¢ç¯ã®è§é床ãååŸããŠãã ããã
ã§ã
ãããããã
dMassSetCylinder()ã®é·è»žæ¹åãå€ãããšæ £æ§ãã³ãœã«ãå€ãããŸãã鿢ããŠãããšãã¯ããããŸããããç©äœã®æåãå€ãããŸãã
ã§ã
ãããã§ãã
å ã»ã©è³ªåããã°ããã§ç³ãèš³ãªãã®ã§ãããã©ãããŠãåºæ¥ãªãã®ã§ãé¡ãããŸãã
ä»ãAã¢ãŒã¿ã䜿ã£ãŠæ¯ãåã®ãããªãã®ãäœã£ãŠããŸãã
ããã§p33ã®ãããªæ©æŠã¢ãã«ãAã¢ãŒã¿ã«é©çšããããšæãp93ã®Aã¢ãŒã¿ã®è§é床ãåºã颿°
dJointGetAMotorAngleRateã䜿ã£ãŠã¿ãã®ã§ãããå®è¡æã«ãnot yet implementedããšåºãŠããŸããŸãã
ãªããªã®ã§ããããã
ããã«ã¡ã¯ããããã§ãã
åºæ¬çãªè³ªåã§ç³ãèš³ãªãã®ã§ãããã«ãã»ã«ãåæ±ãäœããšãã
æ¹åãšããŠdirã1ïœ3ã«èšå®ããããã«ãªã£ãŠããŸããã
1ã«ããŠã2ã«ããŠã3ã«ããŠããäœãå€ãããªãããã«èŠããŠããŸããŸãã
äžäœã©ãéã£ãŠããã®ã§ããããïŒ
ã§ããã
çè§£ããŸããã
ãå¿ããäžãããããšãããããŸãã
ã§ããããä¹ ãã¶ãã§ãã
以åãäºè¶³æ©è¡ã«ã€ããŠè³ªåãããŠããã£ããžã£ãœãã§ãã
ã·ãã¥ã¬ãŒã·ã§ã³ã¹ããŒãã«ãããåºãŠããŸããšããåé¡ã§ãããã
simLoop()å ã®ã¹ããããµã€ãºãäžããããdWorldQuickStep()ãªã©ã詊ãã
詊è¡é¯èª€ããŸããããããããç²ŸåºŠãæªããªããã£ã©ã¯ã¿ã¯ãããŠããŸããŸãã
ããã§ãç¥äººã®ãã·ã³ã§åãããã°ã©ã ãã·ãã¥ã¬ãŒããããšãããã¹ã ãŒãºã«æ©ããŠãããŸããã
èªåã®ããŒãPCã§ã¯éçãããã®ã§ã¯ïŒãšããããšã§èœã¡çããŸããã
æ©éæ°ããªå£ã«ã¶ã¡ããã£ãŠãŸããçŽé²ã ãã§ãªããå³ãå·Šã«ã«ãŒããæããŠæ©è¡ããããã«ãããã®ã§ããã
ã©ãã«ãããã«ãããæ¹æ³ãæãä»ããŸãã…ãäœããã³ããããã ããã幞ãã§ãã
é·ã ãšå€±ç€ŒããããŸããã
toshiããã
dJointSetHingeParam()ã¯è§é床ã®èšå®ã§ããdJointGetHingeAngleRate()ã§ãã³ãžãžã§ã€ã³ãã®è§é床ãååŸããŠãã ããïŒODEæ¬P33åç §ïŒã
ã§ã
åããŠã¡ãŒã«ããŸãããããããé¡ãããŸãã
ç©äœã®å転é床ã以äžã®åœä»€ã§èšå®ããŸãã
â dJointSetHingeParam (djointID,dParamVel,dreal value);
ãã®å転ã®å®é床ã以äžã®åœä»€ã§èªã¿èŸŒãã ãšãã
â¡const dReal *VER_r = dBodyGetLinearVel(dbodyID);
â ã®é床èšå®å€ã«å¯ŸããŠãâ¡ã¯1/10ã®å€ãšãªã£ãŠããŸã£ãŠããŸãã
äœãèšå®ãåäœã®éããªã©ãããã®ã§ããããïŒ