ODE質åã»èŠæåé6!
ãŸãïŒããã«ããODEã®FAQãèªãã§ããã³ã¡ã³ããé¡ãããŸãïŒ
ODE質åã»èŠæ5ïŒã®ã³ã¡ã³ããã¡ãããšïŒïŒïŒä»¶ã«ãªããŸããã®ã§ïŒæ°ãã質åãèŠæã¯ãã¡ãã«ãé¡ãããŸãïŒãã質åã®å 容ã詳ãã説æããŠé ãããšç確ã«åçã§ããŸãã®ã§ïŒæéãç¯çŽã§ãããšæããŸãïŒ
ãŸããç§ã®ã³ã¡ã³ãããèªåã®åªåã«ããåé¡ã解決 ãããå Žåã«ãåé¡ã®åå ããããã°æçš¿ããŠé ããšå€§å€å©ãããŸãããã®æ å ±ã¯ODEã®åå¿è ã«ãšã£ãŠéèŠãªãã®ã§ããããçšåºŠããŸããŸãããFAQã«æ² èŒããããšæããŸãã®ã§ãååã®ã»ã©ãããããé¡ãããŸãã
ããã¿ãŒããïŒ
èšèè¶³ããã§ãã¿ãŸããïŒäœåºŠããŠã€ã³ããŠãéããŠã¯éãããšããæå³ã§ããïŒããã¿ãŒããã®çŸè±¡ã確èªã§ããŸããïŒç¢ºãã«ïŒçã ãšïŒåç®ä»¥éã¯è¡šç€ºãããŸããïŒLinuxã§ãåæ§ãªçŸè±¡ã確èªã§ããŸãããïŒåå ãç¹å®ã§ããŠããŸããïŒ
ãŠã€ã³ããŠãè©Šè¡æ¯ã«éãããéãããããå¿ èŠã¯ãªããšèããŸãã®ã§ïŒä»¥äžã®ã³ãŒãã§ã¯ã ãã§ããããïŒå€§ããïŒè³ªéïŒåçºä¿æ°ãªã©ã¯simLoop颿°ã® if (simtime > 3000)ã{ãã}ã®äžã§ã奜ããªããã«èšå®ããŠãã ããïŒ
void simLoop(int pause)
{
static int simtime = 0;
dWorldStep(world, 0.01);
dsSetColor(1.0, 0.0, 0.0);
const dReal *pos = dBodyGetPosition(apple);
const dReal *R = dBodyGetRotation(apple);
dsDrawSphereD(pos,R,r);
printf(“apple position z=%f\n”,pos[2]);
simtime++;
if (simtime > 3000)
{
//dsStop();
simtime = 0;
dBodyDestroy(apple);
apple = dBodyCreate(world);
dMass mass;
dMassSetZero(&mass);
dMassSetSphereTotal(&mass,m,r);
dBodySetMass(apple,&mass);
dBodySetPosition(apple, 0, 0, 2);
}
}
int main(int argc, char **argv)
{
setDrawStuff();
world = dWorldCreate();
dWorldSetGravity(world, 0, 0, -0.01);
//while (1)
//{
apple = dBodyCreate(world);
dMass mass;
dMassSetZero(&mass);
dMassSetSphereTotal(&mass,m,r);
dBodySetMass(apple,&mass);
dBodySetPosition(apple, 0, 0, 2);
dsSimulationLoop(argc, argv, 640, 480, &fn);
//}
dWorldDestroy(world);
return 0;
}
ã§ã
ã§ãããïŒ
質åã§ããïŒç§ãèŒããããã°ã©ã ãã§ãããã®ç°å¢ã§å®è¡ããå ŽåïŒæç»ãŠã€ã³ããŠããããã衚瀺ãããã®ã§ããããïŒ
ç§ã®ç°å¢ïŒwindows xp, msys, ode0.9ïŒã®å ŽåïŒæç»ãŠã€ã³ããŠã衚瀺ãããŠïŒæéãæ¥ããšéããŠïŒæ¹ããŠãŠã€ã³ããŠã衚瀺ãããŠããŸãïŒãã®ãšãïŒçã ãšäºåç®ä»¥éã®ãŠã€ã³ããŠã§èµ€ãçãæç»ãããïŒããã¯ã¹ã ãšæç»ãããŠããŸãïŒ
ç³ãèš³ãªãã§ããïŒç°¡åãªç¹°ãè¿ãèšç®ã®ããã°ã©ã ãæããŠããã ããŸãããïŒ
äŸãã°åãappleãèœäžããããã°ã©ã ã§ïŒ1åç®ãš2åç®ã§å€§ãããéãïŒåçºä¿æ°ãªã©ã®ãã©ã¡ãŒã¿ãå€åãããã®ãè¯ãã®ã§ããïŒïŒïŒ
å®ãããé¡ãããŸãïŒ
ããããïŒ
ããŒããŠã§ã¢ããŒã¹ã®DEPãµããŒãã§ãããå匷ã«ãªããŸããããŸãïŒäœããããŸãããã³ã¡ã³ããã ããã
ã§ã
ã§ãããïŒããã«ã¡ã¯
è¿çããããšãããããŸããã
è¿äºãé ããªã£ãŠãããŸããã
ïŒæåã«ããŒã¿å®è¡é²æ¢ã«ã€ããŠè³ªåããä»¶ã§ãããç¡äºdemo_basket.exeãèµ·åã§ããŸãããã·ã¹ãã ããããã£ããã¯è§£æ±ºã§ããªãã£ãã®ã§ããã
BIOSã®èšå®å€æŽããã§ããŸãããçç±ã¯ããã»ããµãããŒããŠã§ã¢ããŒã¹ã®DEPããµããŒãããŠããããã§ããã
ãã£ãšããã§ã¯ãããããŸãã
ããããšãããããŸããã
ãããŒããïŒ
ãä¹ ãã¶ãã
ODEã¯ãªãŒãã³ãœãŒã¹ã§ãããïŒãèªåã§ãœãŒã¹ãæžãæããã°äœã§ãã§ããŸãã
drawstuff.cppã®1080è¡ç®ã«ããdsDrawFrame()ã®1114è¡ç®ããå æºã®èšå®ãªã®ã§ããã倿Žããã°è¯ããšæããŸãããªãïŒdrawstuffã¯OpenGLã䜿ã£ãŠããã®ã§OpenGLã®ç¥èãå¿ èŠã§ãã
ã§ã
ãœã£ããŒããïŒ
ã質åã誀解ããŠããŸãããããŠïŒèŠããŠé ããããã°ã©ã ã®ããã«whileã«ãŒãã®äžã«ïŒdsSimulationLoopãå ¥ãããšãŠã€ã³ããŠãããã€ãéããŠããŸãã®ã§ãããªãæ³ãè¯ããšèããŸãã
ã¹ããŒããããŸãæ°ã«ããªãã®ãªãïŒsimLoop颿°ã®äžã®æç»åœä»€ãããŒããŒããç¹°ãè¿ãåæ°ã§ON/OFFããã°è¯ãã§ããããã¹ããŒããæ°ã«ããå Žåã¯drawstuffã倿Žããå¿ èŠããããŸãã
ãªãïŒdrawstuffã®ãã°ãã©ããã«é¢ãã質åã¯è¯ãããããŸãããç§ã®ç°å¢ã§ã¯åé¡ãªãçãããã¯ã¹ã衚瀺ãããŸãããåèãŸã§ã«ç°å¢ãæããŠãã ããã
ãã ïŒçŸåšïŒdrawstuffäžäœäºæã©ã€ãã©ãªãäœã£ãŠããŠïŒçã ãšè¡šç€ºãããŸããïŒããã¯ã¹ã ãšè¡šç€ºãããªãçŸè±¡ãçããŠããŸããdrawstuffã®ã³ãŒããåèã«Irrlichtã§äœã£ãŠããã®ã§ïŒdrawstuffã®ãã°ãããããŸãããïŒåå ãç¹å®ã§ããŠããŸããã
ã§ã
ã§ãããïŒ
ããããããšïŒç§ã®è³ªåãæªããŠæå³ãäŒãã£ãŠããªãã£ããããããŸããïŒïŒïŒç³ãèš³ãªãã§ãïŒ
åçŽã«while(1)ãã¯ãããšïŒdsStop()ã®åŠçã®ããšã·ãã¥ã¬ãŒã·ã§ã³ãçµäºããŠããŸããŸãïŒããã§ã¯ãªãïŒäŸãã°éºäŒçã¢ã«ãŽãªãºã ãªã©ã®ã·ãã¥ã¬ãŒã·ã§ã³ã®ããã«ïŒäœåãç¹°ãè¿ããŠã·ãã¥ã¬ãŒã·ã§ã³ãããããšèããŠããŸãïŒ
ãã®å Žåãwhile(1)ã䜿çšããªãã»ããããããã§ããããïŒ
ã¡ãªã¿ã«åå質åããããã°ã©ã ã§ïŒæç»ãçããããã¯ã¹ã«å€æŽãããšwhile(1)ã§ç¹°ãè¿ããŠãæç»ãããŸããïŒïŒããæå³ç®çãéæã§ããŸããïŒïŒ
ãã¡ãã¯drawstuffã®ã»ãã®ãã°ã§ããããïŒïŒïŒ
ãä¹ ãã¶ãã§ããã§ãããã
äžã€è³ªåããããŸãã®ã§ãåçããã ããã°å¹žãã§ãã
ODEã®ã·ãã¥ã¬ãŒã·ã§ã³ã®ç»é¢ã®ç §ææ¡ä»¶ãå€ããŠ
å®è¡ããããšã¯ã§ããã®ã§ããããïŒ
å ·äœçã«ã¯ãå šäœãæããããããæãããããªã©ã§ãã
æç»é¢é£ã ããdrawstuffããããèŠãŠããã®ã§ãããããŸãã¡
ããããŸããïŒ
demu ããïŒ
drawstuff.cpp ãèŠããç°¡åãªèšè¿°ã§ãã©ãããã°ãªãããæç»ããŠããã®ã§ïŒããã«å€æŽã§ããŸãïŒ
ããããšãããããŸããïŒ
ãœã£ããŒããïŒ
OFFäŒïŒãããŸããããã
ããŠïŒãœãŒã¹ã³ãŒããèªãã ãšããdsSimulationLoopãwhileæã«å ¥ããŠãããšãããããããã§ãããdsSimulationLoopã®äžèº«ã¯whileæã«ãªã£ãŠããã®ã§å¿ èŠãããŸãããwhileã«å ¥ãããšãŠã€ã³ããŠãããã€ãçæãããŠããŸããŸãã
ç§ã®ç°å¢(Windows Vista, g++, ODE0.10.1)ã§ã¯ïŒwhileæãåããšåé¡ãªãããŸããã£ãŠããŸããwhileæããšã£ãŠè©ŠããŠã¿ãŠãã ãããä»ã®ããšãåå ãããããŸããã
ã§ã
skasaiããïŒ
drawstuff.cppã®ã³ãŒãããããå¿ èŠããããŸããå°é¢ã®ããŒã«ãŒã¯ãã©ãããã°ãªãããšåŒã°ããŠããŸãã
1044è¡ç®ãã1077è¡ç®ã«ããdrawPyramidGrid()ã®foræããããã°ç°¡åã«å€æŽå¯èœã ãšæããŸããã倧ãããç°¡åã«å€æŽã§ããŸãã1061è¡ç®ã®kã®å€ã倿ŽããŠã¿ãŠãã ããã
ã§ã
ã§ããã
ãä¹ ãã¶ãïŒïŒïŒã§ãïŒãœã£ããŒã§ã
æè¿ïŒç¹°ãè¿ãèšç®ãå¿ èŠãšããã·ãã¥ã¬ãŒã·ã§ã³ãããã°ã©ã ãããšããïŒãªããã·ãã¥ã¬ãŒã·ã§ã³ã®1åç®ã®ã¿ç©äœãæç»ããïŒ2åç®ä»¥éæç»ãããªããªããŸããïŒç¢ºèªã®ããïŒhello.cppãããšã«ç¹°ãè¿ãèšç®ããããã°ã©ã ã«ãããŠãåæ§ã®çµæãšãªããŸããïŒ
ãœãŒã¹ãã¡ã€ã«ãèŒããŸãã®ã§ïŒç¢ºèªãããŠé ããŸããïŒ
ãå¿ããããšæããŸããïŒå®ãããé¡ãèŽããŸãïŒ
/*———- 以äžãœãŒã¹ãã¡ã€ã« ———-*/
#include
#include
dWorldID world;
dBodyID apple;
dReal r = 0.2, m = 1.0;
dsFunctions fn;
void simLoop(int pause)
{
static int simtime = 0;
dWorldStep(world, 0.01);
dsSetColor(1.0, 0.0, 0.0);
const dReal *pos = dBodyGetPosition(apple);
const dReal *R = dBodyGetRotation(apple);
dsDrawSphereD(pos,R,r);
printf(“apple position z = %f\n”, pos[2]);
simtime++;
if(simtime > 3000) {
simtime = 0;
dsStop();
}
}
void stop()
{
}
void start()
{
}
void setDrawStuff()
{
fn.version = DS_VERSION;
fn.start = &start;
fn.step = &simLoop;
fn.stop = &stop;
fn.path_to_textures = “../../drawstuff/textures”;
}
int main(int argc, char **argv)
{
setDrawStuff();
world = dWorldCreate();
dWorldSetGravity(world, 0, 0, -0.01);
while(1) {
apple = dBodyCreate(world);
dMass mass;
dMassSetZero(&mass);
dMassSetSphereTotal(&mass,m,r);
dBodySetMass(apple,&mass);
dBodySetPosition(apple, 0, 0, 2);
dsSimulationLoop(argc, argv, 640, 480, &fn);
}
dWorldDestroy(world);
return 0;
}
ãäžè©±ã«ãªããŸãïŒ
å°é¢(z=0ã®é¢)ã«ã¯é»è²ãèµ€ãéã®ããŒã«ãŒããããŸãïŒ
ãããããŒã«ãŒãå¶åŸ¡ããæ¹æ³ãç¥ãããã§ãïŒ
ç¹ã«æåŸ ãããã®ã¯ïŒz軞æ¹åãå«ã衚瀺ã®ONOFFïŒééãšæ°ã®å€æŽã§ãïŒ
è²ïŒå€§ããããããããšãã§ãã®ã§ãããïŒå°ããããã§ãïŒ
ãã©ã¡ãŒã¿ã倿ŽããŠïŒå®¹æã«å€æŽå¯èœã§ããããïŒ
drawstuffã®ãœãŒã¹ããããå¿ èŠãããã®ã§ãããïŒã©ã®ãããã§ããããïŒ
ãææããã ãããšã§ããŸãããïŒ
yoshiããïŒ
ãã¿ãŸãããïŒéçºç°å¢ïŒWindows, ã³ã³ãã€ã©ïŒãšã©ã®ããŒãžãæé ã©ãããã£ããæããŠãã ããã
ããããincludeãã¡ã€ã«ã®ãã¹ãèšå®ãããŠããªãããã«æãããŸããã
ã§ã
demuããã¯ãããŸããŠã
C++ã§æé éãã«ãã£ãŠãpro1-1ã®ããã°ã©ã ããã«ããããš
fatal error C1083: include ãã¡ã€ã«ãéããŸããã’ode/ode.h’: No such file or directory
ãšããããšã©ãŒãåºããã§ããã©ãããã°è¯ãã§ããïŒ
éããïŒ
ã³ã¡ã³ãããããšãããããŸãïŒ
è峿·±ã埡ææãªã®ã§èª¿ã¹ãŠã¿ããã®ã§ããïŒïŒæïŒæ¥ããããããåŠäŒããããã®æºåã®ãã調ã¹ãæéããããŸããïŒ éçºäžã®drawstuffäºæã©ã€ãã©ãªã«ã€ããŠã話ããäºå®ã§ããããŸãé²ãã§ããŸããïŒïŒïŒ
ããŠïŒãŠã§ãã§ã¯ä»¥äžã®ãµã€ããå°ãé¢ä¿ããããã§ãã詊ããŠããªãã®ã§ããããŸããïŒ
http://homepage1.nifty.com/herumi/prog/prog90.html
äžã®ããŒãžã«ããWindowsã®æŒç®ç²ŸåºŠãLinuxãšåãïŒïŒãããã«å€æŽãããã©ããªããŸããïŒ
ãŸãïŒWindowsäžã§ã¯VC++ãšgccã®å€ã¯ç°ãªãã§ããããïŒ
ãæéãããã°è©ŠããŠçµæãæããŠé ãããšãããããã§ãïŒ
ã§ã
ã§ãããã床ã ç³ãèš³ãããŸããã
å ã»ã©ïŒode-src-0.8.zipãã€ã³ã¹ããŒã«ãçŽããŠtest_basketã®äŸã§
ãã¹ã±ããããŒã«ã®åã¹ãããããšã®äœçœ®ãååŸãããšããïŒ
ãã¯ãVC++ãšLinuxãšã§ã»ã³ãµã®ååŸçµæã®éããã§ãŸããã
ããã¯ïŒOSã®éãããæ¥ããã®ãªã®ã§ããããïŒ
ã§ããã.ã¯ãããŸããŠ.
ãã£ãã質åãªã®ã§ããïŒVC++ãšLinuxãšã§åãããã°ã©ã ãã³ã³ãã€ã«ãããšããïŒåŸ®åŠã«éãèšç®çµæãçŸããŸãã.
éãèšç®çµæãšèšã£ãŠãïŒäŒŒãå€ã¯åºåãããŠããã®ã§ããïŒããã¯ã©ã®ãããªããšãåå ã§èµ·ãã£ãŠããã®ã§ããããïŒ
ã¡ãªã¿ã«ïŒãã®ãµã€ãã«ä¹ã£ãŠããã»ã³ãµã®ååŸå®éšã§ç¢ºãããŸãã.
toshiããïŒ
ãã¿ãŸãããïŒVC#ã¯äœ¿ã£ãããšããªãã®ã§ããããŸããïŒ
ã§ã
demuããåããŸããŠ.
ããããODEã䜿ã£ãŠç ç©¶ãè¡ãã®ã§ãã,VC++ã§ã¯ãªã,VC#ã䜿ãããšèããŠããŸãã
VC#ã§ODEã䜿ããããã«ããæ¹æ³ãæããŠãã ãã.
ã§ãããã
ãã£ããè¿äºãããã ããããããšãããããŸããã
æããŠé ããODE Wikiã®ããŒãžãèªãã§ã¿ãŸããã
OPCODEãšGIMPACTãã©ã€ãã©ãªã«ããŠããã®ã§ãçŽæ¥äœ¿ã£ãŠããã®ããšæã£ãŠããŸããã
Trimeshã䜿ã£ãå Žå以å€ã¯äœ¿çšããŠããªãããã§ããã
ãŸã質åãããŠé ããŸãã
YamaããïŒ
ã¯ãããŸããŠïŒ
ODEã§ã¯ïŒAABBãããµããŒãããŠããŸããïŒã€ãŸãïŒãèªåã§å®è£ ãããããããŸããïŒ
ãªãïŒè¡çªæ€åºç©ºéãšããŠã¯ïŒdSimpleSpace, dQuadTreeSpace, dHashSpace, dSAPSpaceãéžæå¯èœã§ãïŒè¡çªæ€åºã«é¢ããŠã¯ODE Wikiã®æ¬¡ã®ããŒãžãæ¯éïŒèªé¡ããŸãïŒ
http://opende.sourceforge.net/mediawiki-1.6.10/index.php/How_Collision_Detection_Works
ã§ã
ãããããïŒ
Windows Vista Business, Visual C++ 2008 EEã§ã¯åé¡ãªããã«ãã§ããŸããïŒã䜿çšã®ç°å¢ãæããŠãã ããïŒ
ã§ã
ã§ãããïŒããã«ã¡ã¯ïŒ
åããŠè³ªåããŸãã
OBBã«ããè¡çªæ€åºã詊ãããã®ã§ãããã©ã®ããã«ãããããã§ããããã
ãããããé¡ãããŸãã
ã§ãããïŒãææããããšãããããŸãïŒ
ã§ããïŒåé¡ã®ç®æãä¿®æ£ããŠãåããšã©ãŒãåºãŠããŠããŸããŸããïŒïŒïŒïŒïŒ
éããŠã®è³ªåã«ãªã£ãŠããŸãã®ã§ããïŒ
ããªãŽã³ã®æç»ã«äœ¿çšããŠããdsDrawTriangleã§æç»ãããäžè§åœ¢ã«
衚ãè£ãšãã£ãæŠå¿µã¯ããã®ã§ããããïŒ
dsDrawTriangleã§æç»ããå³åœ¢ã§
æãéãã«é¢ãæãããŠããéšåãšããã§ãªãéšåããã£ãã®ã§ã»ã»ã»
ãããããïŒ
ãœãŒã¹ã³ãŒããæèŠããŸãããïŒODEã®åé¡ã§ã¯ãªãé åã®å®£èšã«åé¡ãããããã§ãïŒ
ã§ã
tetuããïŒ
è¯ãæ¬ãã玹ä»é ãããããšãããããŸãïŒODEã¯åäœã®åååŠèšç®ãšã³ãžã³ãªã®ã§ïŒäººäœãåäœè¿äŒŒã§ããªãå Žåã®éåè§£æã«å©çšããã®ã¯é£ãããããããŸããïŒ
ãŸãïŒåé³ãã¯ã®æåããããããšããçŸè±¡ã¯èŠãŠããªãã®ã§ããããŸãããïŒæããè¡çªæ€åºã®éšåã ãšæãããŸãïŒODEã¯è¡çªã©ã€ãã©ãªãšããŠOPCODEãæšæºãšããŠäœ¿ã£ãŠããŸããïŒGimpactãOPCODEãæ¹åãããã®ããã«ãã®ãªãã·ã§ã³ã§å©çšã§ããã®ã§è©ŠããŠã¿ãŠã¯ãããã§ããããïŒ
ããã§ãïŒã ããªå Žåã¯ïŒODEã®æ¬å®¶ã¡ãŒãªã³ã°ãªã¹ãã«æçš¿ãããšæ¬¡ã®ããŒãžã§ã³ã§ã¯æ¹åãããããããŸããïŒODEã¯ãªãŒãã³ãœãŒã¹ãªã®ã§ïŒå©çšè ããã£ãŒãããã¯ãããšçã è¯ããªããŸãïŒ
ã§ã
ç³ãèš³ãããŸããã以åã«è³ªåããã®ã§ãã解決ããŸããã
dInitODE();
dCloseODE();
ãmain颿°ã«å ¥ããããšã§ERRORã¯ãªããªã解決ããŸããã
demuãã
ãœãŒã¹ããã°ã©ã ãéä»ããŸããïŒ
ãããããé¡ãããŸãïŒ
ODE0.9ã§åããŠãããèªåã§äœæããcppãã¡ã€ã«ïŒsegwey.cppïŒãode0.10.1ã§åããããšããã®ã§ããã
ODE INTEANAL ERROR 2
colliders array not initialized in dcollide()
ãšè¡šç€ºããåããŸããã
ãããåé¿ããã«ã¯ã©ããããããã§ããããïŒ
ãããããé¡ãããŸãã
ãããããïŒ
é£çµ¡å ã®ã¡ãŒã«ã¢ãã¬ã¹ã«ãé¡ãããŸãïŒ
ã§ã
demuããïŒè¿äºãé ããŠãã¿ãŸããïŒ
è¶£å³ã§äœã£ãããã°ã©ã ãªã®ã§ãœãŒã¹ã®å ¬éã¯åé¡ãããŸããïŒ
éä»å ã¯âé£çµ¡å ã®ã¡ãŒã«ã¢ãã¬ã¹âã§ããããã§ããïŒ
ã§ã人äœã®ååŠèšç®ãããŸã£ããæã€ãããšããã®ã¯ããŸãã«æããã
人äœã®éååŠã®æç§æžãšããæã«åã£ãŠã¿ãŠã
http://www.ishiyaku.co.jp/search/details.cfm?bookcode=215320
ïŒïŒ€ïŒ£ïŒ§ã®åäœãã©ãããŠããããã®ãèããŠã»ããã§ãã
åé³ãã¯ãšããã
ãããããïŒ
ç§ãåå ãç¥ãããã®ã§ïŒå·®æ¯ãããªããã°ãœãŒã¹ã³ãŒããéã£ãŠé ããŸããïŒ
å·®æ¯ããããå Žåã¯ïŒãã®éšåãåãé€ããŠéã£ãŠãã ããïŒ
åºæ¬çã«ã¯ãã®ããŒãžã§å ¬éããŸãïŒ
ã§ã
ãã£ã¹ãã®ä»¶ã§ããïŒ
(const dReal *)ã§åŒæ°ããã£ã¹ãããŠãåæ§ã®ãšã©ãŒãåºãŠããŸããïŒ
floatã§pos[3]ãšR[12]ãå®çŸ©ããŠïŒdBodyGetPositionãšdBodyGetRotationãä»£å ¥ãããšãã£ãç¡çãããªæ¹æ³ã§äžå¿ã¯å®è¡ã§ããããã«ãªããŸããïŒ
ãµã³ãã«ããã°ã©ã ã¯åé¡ãªãå®è¡ã§ããŸããïŒ
ä»åŸãåå ãç©¶æããŠããããšã¯æããŸãïŒ
ããããã
ç§ã詊ãããšãã¯ããŒã¿å®è¡é²æ¢ãåããªãã£ãã®ã§åå ãããããããŸããã
ããŒã¿å®è¡é²æ¢(DEPïŒãç¡å¹ã«ããæ¹æ³ã¯ããããæ¢ããšãããããããŸãããåå ãããããªãã®ã§ãå§ãã¯ã§ããŸãããèªå·±è²¬ä»»ã§ãé¡ãããŸãã
ã³ã³ãããŒã«ããã«âã·ã¹ãã ãšã¡ã³ããã³ã¹âã·ã¹ãã âã·ã¹ãã ã®è©³çްèšå®âããã©ãŒãã³ã¹âèšå®âããŒã¿ã®å®è¡é²æ¢âéèŠãªWindowsã®ããã°ã©ã åã³ãµãŒãã¹ã€ããŠã®ã¿æå¹ã«ãã(T)ã«ãã§ãã¯ãå ¥ãã
ã§ã
ã§ãããïŒã¯ãããŸããŠ
ã€ã³ã¹ããŒã«ã«ã€ããŠæããŠããã ãããããšããããŸãã
è¬çŸ© Visual C++ 2008 Expression Editionã«æ²¿ã£ãŠã€ã³ã¹ããŒã«ããŸãããã
ããŒã¿å®è¡é²æ¢ãåããŠãdemo_basket.exeã®èµ·åã«å€±æããŠããŸããŸããã
䜿çšç°å¢ã¯ä»¥äžã®ãšããã§ãã
OSïŒvista
CPUïŒintel core2 duo
èµ·åãããè¯ãæ¹æ³ã¯ãªããã®ã§ããããã
ãããããé¡ãããŸãã
ã§ãããïŒæ©éã®ãè¿äºããããšãããããŸãïŒ
ãçæéã¯å€§åŠã®é»æºãèœãšãããŠããããïŒçŸåšã¯è©Šããç°å¢ããããŸããïŒ
æ¥é±ã®æææ¥ã«ã¯ïŒçµéå ±åã§ãããšæããŸãïŒ
ããããã,
åããŸããŠ
(const dReal *)ã§åŒæ°ããã£ã¹ãããŠãã ããã
ãšã©ãŒãã§ããšããããšã¯ãODEæ¬ã®ãµã³ãã«ããã°ã©ã ããšã©ãŒãã§ãŸããïŒãç§ããVisual C++ 2008 EEã§è©Šãããšãã¯åé¡ã¯ãªãã£ããšèšæ¶ããŠããŸããâŠ
ã§ã
ã§ãããïŒã¯ãããŸããŠïŒ
ä»å¹ŽåºŠããç ç©¶ã«ODEãå°å ¥ããŠçŸåšå匷äžã®è ã§ãïŒ
æç»ã«ã€ããŠã®è³ªåãªã®ã§ããïŒ
dsDrawSphereïŒdsDrawCylinderã䜿çšãããšãã«
â1 çªç®ã®åŒæ°ã ‘const dReal *’ ãã ‘const float []‘ ã«å€æã§ããŸããïŒ(æ°ããæ©èœ ; ãã«ããåç §)
æç€ºãããåã¯é¢é£ããããŸããã倿ã«ã¯ reinterpret_castãC ã¹ã¿ã€ã« ãã£ã¹ããŸãã¯é¢æ°ã¹ã¿ã€ã«ã®ãã£ã¹ããå¿ èŠã§ãïŒâ
ãšãã£ããšã©ãŒã¡ãã»ãŒãžãåºãŠããŠããŸãå®è¡ã§ããªããªã£ãŠããŸããŸãïŒ
åŒæ°ãšããŠã¯dBodyGetPosition(torso.body)ãªã©ã䜿çšããŠããŸãïŒ
monoBot.cppãªã©ã®dsDrawSphereã䜿çšããŠããä»ã®ããã°ã©ã ã¯ã¡ãããšå®è¡ã§ããŸãïŒ
éçºç°å¢ã¯Visual Stadio 2005 Professional ã§ãïŒ
ãå¿ãããšæããŸããïŒã©ãããããããé¡ãããããŸãïŒ
tadaããïŒ
ã€ãã°åžãžåºåŒµããŠããŠè¿äºãé ããªããŸããïŒ
ããŠïŒåé¡ã¯å šéšè§£æ±ºããã®ã§ããããïŒ
ã§ã
å ã»ã©ã®è³ªåã¯è§£æ±ºããŸããã
dInitODE();ããšãdCloseODE();
ãã¡ã€ã³é¢æ°ã«ãããŠãããã°ããã ãã§ããã
ããã°ã©ã ïŒïŒïŒïŒãããã³ã°ãããããäœããïŒã«ãããŠãã«ãã¯æåããã®ã§ããã
âcolliders array not initialized (c:\ode-0.10.0\ode\src\colision_kernel.cpp:256)â
ãšãããšã©ãŒãåºãŠããŸããŸãã
ã©ã®ããã«ããã°è§£æ±ºããã®ã§ããããïŒ
ãæå°ãã ããã
å ã»ã©ã®åé¡ã¯åã«ãœãŒã¹ã³ãŒãã®ééãã§ããã
ç¢ç¶ãæ©ã§ç³ãèš³ãããŸããããžã§ã€ã³ããHingeãããã®ä»ïŒBallãªã©ïŒã«å€æŽããæããããããããããããããããããâèå¥åãèŠã€ãããŸããã§ããâã
ãšãªãã³ã³ãã€ã«ãšã©ãŒãšãªã£ãŠããŸããŸããã©ãããã°ããã®ã§ããããïŒæããŠãã ããã
ç»åã衚瀺ããé
âBadãargument(s)(c:\ode-0.10.0\src\collision_kernel.cpp:462)â
ãªã衚瀺ãåºãŠããŸããŸãããã«ãã¯æåããŠãã®ã«ã©ãããŠãã®ããã«ãªã£ãŠããŸãã®ã§ããããïŒ
ã§ãããããè¿çããããšãããããŸãã
è¿äºãé ããªã£ãŠãããŸããã
ããããŸãããããããšãããããŸãã
ãŸã質åãããŠããããããããŸãããããã®ãšãã¯ãŸããé¡ãããŸãã
ãã€ããïŒ
ãã¯ããããããŸãïŒ
dWorldStep(dWorldID World, dReal stepsize)ã®stepsizeã¯ã·ãã¥ã¬ãŒã·ã§ã³ãé²ããæéãªã®ã§å®æéãšã¯çŽæ¥é¢ä¿ãããŸããïŒ
ã·ãã¥ã¬ãŒã·ã§ã³ã®æéãšå®æéãåäžç²ŸåºŠã§çµããããããã«ã¯ïŒã·ãã¥ã¬ãŒã·ã§ã³ã®ïŒã¹ãããã«èŠãã宿éãšstepsizeã®æéãåãã«ããå¿ èŠããããŸãïŒ
ã€ãŸãïŒïŒã¹ãããïŒè¡çªæ€åºïŒåååŠèšç®ïŒå¶åŸ¡ïŒæç»çãå šãŠå«ãïŒã®æéãæ¯åèšæž¬ãïŒãããšstepsizeãšã®æéå·®åã ãSleep()ãªã©ã䜿ã£ãŠæéã調æŽããã°è¯ãã§ãããïŒ
以äžã§ãïŒ
ã§ã
demuããïŒããã«ã¡ã¯ïŒ
ODEè¬åº§12ã®ãã«ã¯ã»ã³ãµã®ããã°ã©ã ã§ïŒx軞åšãã®ãã«ã¯ã®è¡šç€ºãfeedback->t1[0]ããfeedback->t2[0]ã«å€æŽãããšTx=4.9ãšãªãã®ã¯ãªãã§ããããïŒè»žåšãã«åãã€ãããã®ãªãã°ïŒTx=9.8ãšãªãã®ã§ã¯ãªãããšæãã®ã§ããïŒãã åã«ç§ã«ç©çã®ã»ã³ã¹ããªãã ãã§ãããã(^ ^;)
ãã§ããïŒ
ODEã¯åååŠèšç®ãšã³ãžã³ãªã®ã§ïŒãã®ãããªAPIã¯ãããŸããïŒåçããããŒããŒãã®å ¥åã¯ODEã§ã¯ãªãïŒdrawstuffãšããODEä»å±ã®ïŒDã°ã©ãã£ã¯ã¹ã©ã€ãã©ãªã®æ©èœã§ãïŒ
ãªãïŒPCããå é床ã»ã³ãµã®å€ãèªããã°ïŒãã®æ å ±ãODEã§äœæããã¯ãŒã«ãã«åæ ããããšã¯å¯èœã ãšã¯æããŸãïŒ
ãããªåçã§ããããã§ããïŒ
ã§ã
ïŒãåçããããšãããããŸãã
ïŒèšèãè¶³ããªããŠãããŸãããããŒããŒãããã®æäœã¯ã§ããŠããã®ã§ããã
ïŒå é床ã»ã³ãµãŒãªã©ã䜿ã£ãŠPCã®å€éšãããæäœåºæ¥ããã§ããïŒ
ã§ãããïŒããã«ã¡ã¯ïŒ
èšç®åšæïŒã¹ãããïŒã«ã€ããŠè³ªåããããŸãïŒ
P11ã«ãããŸããïŒODEã§èšå®ããŠãã0.01ç§ïŒ10msïŒãšããã®ã¯ïŒãããŸã§èšç®äžã®ã¹ãããã§ããïŒå®æéãšã¯ãªã³ã¯ããªãïŒ
ã€ãŸãïŒèšç®è² è·ã軜ãã»PCã®ã¹ããã¯ãé«ããã°èšç®ããã ãèšç®ã¹ããŒãã¯æ©ããªãããã§ãããïŒ
ããã§è³ªåãªãã§ããïŒèšç®åšæïŒã¿ã€ãã³ã°ïŒãWindowsã¿ã€ããäœããåç §ããŠïŒå®æéã®ã¿ã€ãã³ã°ã§èšç®ãããããšã¯ã§ããã®ã§ããããïŒ
ãã¡ããé«ã粟床ã¯ç¡çã§ããããïŒ10ç§ã®ã·ãã¥ã¬ãŒã·ã§ã³ãçŽ10ç§ã§çµããããããšãã§ãããè¯ããªãšæã質åããŸããïŒ
ãããããé¡ãããŸãïŒ