6. è¡çªæ¤œå‡º

ゲーム開 発やロボットã®ç ”究者ã«ã‚‚使ã‚れã¦ã„るオープンソースã®ç‰©ç†è¨ˆç®—エンジンODE (Open Dynamics  Engineã€ã‚ªãƒ¼ãƒ—ン ダイナミクスエンジン)を学ã¶ODEåˆç´šè¬›åº§ã®ç¬¬ï¼–回目ã§ã™ã€‚

今回ã¯è¡çªæ¤œå‡ºæ©Ÿèƒ½ã«ã¤ã„ã¦å‹‰å¼·ã—ã¾ã™ã€‚å‰å›žå‹‰å¼·ã—ãŸã‚ˆã†ã«ODEã§ã¯å‹• 力学計算ã¨è¡çªæ¤œå‡ºè¨ˆç®—ãŒåˆ¥ã€…ã«å®Ÿè£…ã•れã¦ã„ã¾ã™ã€‚動力学計算をã™ã‚‹ãŸã‚ã«ã¯ã€ãƒ¯ãƒ¼ãƒ«ãƒ‰worldã‚’dWorldCreate()ã§ç”Ÿæˆã—ã€ãã®ä¸­ã«å‰›ä½“ bodyを生æˆã—ã€dWorldStep()ã§å‹•力学計算をã—ã¾ã—ãŸã­ã€‚

ジオメトリ

ジオメトリã¨ã¯ç‰©ä½“ã®å½¢çжã¨ã„ã†æ„味ã§ã€ä¸‹å›³ã®å·¦ã‹ã‚‰sphere(çƒï¼‰ã€box(直方体)ã€cylinder(円柱)ã€capsule(カプセル)ãªã©ã®ç¨®é¡žãŒã‚りã¾ã™ã€‚

  • è¡çªæ¤œå‡ºã«é–¢ã™ã‚‹API
    • dSpaceID dHashSpaceCreate(0) è¡çªè¨ˆç®—用スペースを生æˆã—ã€ãã®ID(識別å­ï¼‰ã‚’è¿”ã™ã€‚

    • dGeomID dCreatePlane(dSpaceID space ,dReal a, dReal b, dReal c, dReal d) spaceã«ax+by+cz=dã®å¹³é¢ã‚¸ã‚ªãƒ¡ãƒˆãƒªã‚’生æˆã™ã‚‹ã€‚

    • dGeomID dCreateSphere(dSpaceID space, dReal r) spaceã«åŠå¾„rã®çƒã‚¸ã‚ªãƒ¡ãƒˆãƒªã‚’生æˆã™ã‚‹ã€‚

    • void dGeomSetBody(dGeomID geom, dBodyID body) 物体ã®2ã¤ã®å±žæ€§ã§ã‚るジオメトリgeomã¨å‰›ä½“bodyを関連ã¥ã‘る。

    • dJointGroupID dJointGroupCreate(0) 接触点ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‚’æ ¼ç´ã™ã‚‹ã‚¸ãƒ§ã‚¤ãƒ³ãƒˆã‚°ãƒ«ãƒ¼ãƒ—を生æˆã—ã€ãã®IDã‚’è¿”ã™ã€‚

    • void dJointGroupEmpty(dJointGroupID) æŽ¥è§¦ç‚¹ãŒæ ¼ç´ã•れã¦ã„るジョイントグループを空ã«ã™ã‚‹ã€‚

以下ã«ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’示ã—ã¾ã™ã€‚ å‰å›žã®ãƒ—ログラムã¨é•ã†ã¨ã“ã‚ã ã‘コメントを入れã¦ã„ã¾ã™ã€‚

ã•ã¦ã€ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’ã•ã£ãã読ã¿ã¾ã—ょã†ã€‚ãªãŠã€å‰å›žã®sample1 ã¨å…¨ãåŒã˜start関数やprepDrawStuff関数ã¯çœç•¥ã—ã¦ã„ã¾ã™ã€‚

#include <ode/ode.h>
#include <drawstuff/drawstuff.h>

static dWorldID world;
static dSpaceID space;
static dGeomID  ground;
static dJointGroupID contactgroup;
static int flag = 0;
dsFunctions fn;

const dReal   radius = 0.2;
const dReal   mass   = 1.0;

typedef struct {
  dBodyID body;
  dGeomID geom;
} MyObject;
MyObject ball;

static void nearCallback(void *data, dGeomID o1, dGeomID o2)
{
  const int N = 10;
  dContact contact[N];

  int isGround = ((ground == o1) || (ground == o2));

  int n =  dCollide(o1,o2,N,&contact[0].geom,sizeof(dContact));

  if (isGround)  {
    if (n >= 1) flag = 1;
    else        flag = 0;
    for (int i = 0; i < n; i++) {
      contact[i].surface.mode = dContactBounce;
      contact[i].surface.mu   = dInfinity;
      contact[i].surface.bounce     = 0.0; // (0.0~1.0) restitution parameter
      contact[i].surface.bounce_vel = 0.0; // minimum incoming velocity for bounce
      dJointID c = dJointCreateContact(world,contactgroup,&contact[i]);
      dJointAttach (c,dGeomGetBody(contact[i].geom.g1),dGeomGetBody(contact[i].geom.g2));
    }
  }
}

static void simLoop (int pause)
{
  const dReal *pos,*R;

  flag = 0;
  dSpaceCollide(space,0,&nearCallback);

  dWorldStep(world,0.01);

  dJointGroupEmpty(contactgroup);

  if (flag == 0) dsSetColor(1.0, 0.0, 0.0);
  else           dsSetColor(0.0, 0.0, 1.0);
  pos = dBodyGetPosition(ball.body);
  R   = dBodyGetRotation(ball.body);
  dsDrawSphere(pos,R,radius);
}

int main (int argc, char *argv[])
{
  dReal x0 = 0.0, y0 = 0.0, z0 = 2.0;
  dMass m1;

  prepDrawStuff();

  dInitODE();
  world = dWorldCreate();
  space = dHashSpaceCreate(0);
  contactgroup = dJointGroupCreate(0);

  dWorldSetGravity(world,0,0,-0.5);

  // Create a ground
  ground = dCreatePlane(space,0,0,1,0);

  // Create a ball
  ball.body = dBodyCreate(world);
  dMassSetZero(&m1);
  dMassSetSphereTotal(&m1,mass,radius);
  dBodySetMass(ball.body,&m1);
  dBodySetPosition(ball.body, x0, y0, z0);

  ball.geom = dCreateSphere(space,radius);
  dGeomSetBody(ball.geom,ball.body);

  dsSimulationLoop (argc,argv,352,288,&fn);

  dWorldDestroy (world);
  dCloseODE();

  return 0;
}

オブジェクトも動力学計算用ã®body(ボディ)ã®ä»–ã«è¡çªæ¤œå‡ºè¨ˆç®—用ã«geom(ジオメトリ)を設定ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã®ã§MyObject 構造体ã§ãれらをメンãƒã¨ã—ã¦å®šç¾©ã—ã¦ã„ã¾ã™ã­ã€‚

main関数ã®ä¸­ã§çŽ‰ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã®geomã‚’dCreateSphere()ã§ä½œã‚Šã€dGeomSetBodyã§bodyã¨geomを関連付ã‘ã¦ã„ã¾ã™ã®ã§ã‚ªãƒ–ジェクトã®ä½ç½®ã¨å§¿å‹¢ã¯bodyã ã‘ã§è¨­å®šã™ã‚Œã°OKã§ã™ã€‚ã“れをã—ãªã„ã¨å¹½ä½“離脱ç¾è±¡ã«é™¥ã£ã¦ã—ã¾ã„ã¾ã™ã€‚

è¡çªæ¤œå‡ºé–¢æ•°dSpaceCollideã¯ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã®å„ステップã§å®Ÿè¡Œã•れるsimLoop関数ã®ä¸­ã§å‘¼ã³å‡ºã•れã¦ã„ã¾ã™ã€‚注æ„ã™ã‚‹ç‚¹ã¨ã— ã¦ã¯ã€å¿…ãšsimLoopã®ä¸€ç•ªå§‹ã‚ã§å‘¼ã³å‡ºã—ã¦ãã ã•ã„。ã“れを後ã®ã»ã†ã«ã‚‚ã£ã¦ã„ãã¨çމãŒåœ°é¢ã‚’çªã抜ã‘ã¦ã—ã¾ã„ã¾ã™ã‚ˆã€‚dSpaceCollide ã§ã¯ã‚³ãƒ¼ ルãƒãƒƒã‚¯é–¢æ•°nearCallbackを呼ã³å‡ºã—ã¦ã„ã¾ã™ã€‚31è¡Œç›®ã§æŽ¥è§¦ã™ã‚‹å¯èƒ½æ€§ã®ã‚ã‚‹ï¼’ã¤ã®ç‰©ä½“ã®ã†ã¡ã€ã©ã¡ã‚‰ã‹ãŒåœ°é¢groundãªã‚‰ isGroundã‚’trueã«ã‚»ãƒƒãƒˆã—ã¾ã™ã€‚32行目ã®dCollide()ã®æˆ»ã‚Šå€¤ã¯æŽ¥è§¦ç‚¹æ•°ã§ã™ã€‚

29行目ã®if (isGround)æ–‡ã¯ï¼Œè¡çªã™ã‚‹å¯èƒ½æ€§ã®ã‚る物体ã®ã†ã¡ã©ã¡ã‚‰ã‹ãŒåœ°é¢ãªã‚‰30行目ã‹ã‚‰43行目ã¾ã§ã®å‡¦ç†ã‚’ã—ã¾ã™ï¼Žã¤ã¾ã‚Šï¼Œåœ°é¢ã¨ã®è¡çªä»¥å¤–ã¯è€ƒãˆã¦ã„ã¾ã›ã‚“.地é¢ä»¥å¤–ã¨ã®è¡çªã‚’考慮ã™ã‚‹å ´åˆã¯ï¼Œã“ã®if文を削除ã—ã¦ãã ã•ã„.

30行目ã§åœ°é¢ã§ã‹ã¤æŽ¥è§¦ç‚¹æ•°ãŒï¼‘以上ãªã‚‰ã€åœ°é¢ã¨æŽ¥è§¦ã—ãŸã“ã¨ã‚’示ã™flagを1ã«ã‚»ãƒƒãƒˆã—ã¦ã„ã¾ã™ã€‚

一方ã€è¡çªæ¤œå‡ºè¨ˆç®—ã‚’ã™ã‚‹ãŸã‚ã«ã¯ã€ã‚¹ãƒšãƒ¼ã‚¹spaceã‚’dHashSpaceCreate()ã§ç”Ÿæˆã—ã€ãã®ä¸­ã«å‰›ä½“bodyã«å¯¾å¿œã™ã‚‹ã‚¸ã‚ªãƒ¡ãƒˆãƒª geometryを生æˆã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。以下ã®ã‚µãƒ³ãƒ—ルプログラムã§ã¯ã€85行目ã§çƒã«å¯¾å¿œã™ã‚‹ã‚¸ã‚ªãƒ¡ãƒˆãƒªã‚’dCreateSphere()ã§ç”Ÿæˆ ã—ã¦ã„ã¾ã™ã€‚86行目ã§ã€å‹•力学計算ã®å¯¾è±¡ã¨ãªã‚‹ãƒœãƒ‡ã‚£ball.bodyã¨è¡çªæ¤œå‡ºè¨ˆç®—ã®å¯¾è±¡ã¨ãªã‚‹ball.geomã‚’çµã³ã¤ã‘ã¦ã„ã¾ã™ã€‚ã“れ㧠ODEã®ç‰©ä½“ãŒå®Œæˆã§ã™ã€‚

次ã«ã€simLoop関数ã®ä¸­ã§ã€dSpaceCollide()を呼ã³å‡ºã—ã¾ã™ã€‚ã“ã®APIã¯è¡çªã—ãã†ãªï¼’ã¤ã®ã‚¸ã‚ªãƒ¡ãƒˆãƒªãŒç™ºç”Ÿã—ãŸã‚‰ã€ãれらを nearCallbacké–¢æ•°ã«æ¸¡ã—ã¾ã™ã€‚nearCallback関数ã®å¼•æ•°o1, o2ãŒè¡çªã™ã‚‹å¯èƒ½æ€§ã®ã‚ã‚‹ï¼’ã¤ã®ã‚¸ã‚ªãƒ¡ãƒˆãƒªã§ã™ã€‚nearCallback関数ã§ã¯ã€æŽ¥è§¦ç‚¹ã‚’算出ã—ãŸã‚Šã€æŽ¥è§¦ç‚¹ã®æ€§è³ªãªã©ã‚’設定ã—ã¾ã™ã€‚ ãªãŠã€æ³¨æ„ã—ãªã‘れã°ã„ã‘ãªã„ã“ã¨ã¯ã€å¼•æ•°o1ã€o2ã¯æŽ¥è§¦ã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ã ã‘ã§ã€å®Ÿéš›ã«æŽ¥è§¦ã—ã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚ˆãã‚ã‹ã‚‰ãªã„ã“ã¨ã§ã™ã€‚ãれを知るãŸã‚ã«ã¯dCollide()ã®æˆ»ã‚Šå€¤ã€ã¤ã¾ã‚Šã€æŽ¥è§¦ç‚¹æ•°ãŒï¼‘以上ã‹ã©ã†ã‹ãƒã‚§ãƒƒã‚¯ã™ã‚Œã°è‰¯ã„ã®ã§ã™ã€‚

ã¾ãŸã€71行目ã«ã‚るよã†ã«æŽ¥è§¦ç‚¹ã®é›†ã¾ã‚ŠãŒæ ¼ç´ã•れる入れ物をdJointGroupCreate()ã§ç”Ÿæˆã—ã€ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ«ãƒ¼ãƒ—ã§æ¯Žå›žã れをdJointGroupEmpty()を使ã£ã¦ç©ºã«ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。サンプルプログラムã§ã¯52行目ã§ã‚„ã£ã¦ã„ã¾ã™ã€‚ã“れを忘れるã¨ï¼‘ステップ å‰ã®æŽ¥è§¦ç‚¹é”ãŒæ‚ªã•ã‚’ã—ã¾ã™ã®ã§ãŠå¿˜ã‚Œãªãï¼

ã§ã¯ã€ã“ã“ã‹ã‚‰ã‚µãƒ³ãƒ—ルプログラム6をダウンロードã—ã¦å®Ÿè¡Œã—ã¦ãã ã•ã„。

練 習

上ã®ä¾‹ã§ã¯ãƒœãƒ¼ãƒ«ï¼‘個をè½ä¸‹ã•ã›ã¾ã—ãŸãŒï¼Œå¤šãã®ãƒœãƒ¼ãƒ«ã‚’è½ä¸‹ã•ã›ã‚‹ãƒ—ログラムを書ã„ã¦ã¿ã¾ã—ょã†ï¼Žå›žç­”例sample6multi-100817.zipã¯ã“ã“ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã§ãã¾ã™ï¼Ž

ã§ã¯ã€ã¾ãŸæ¬¡å›žï¼

9 Responses to 6. è¡çªæ¤œå‡º

  1. odessa MonsterID Icon odessa on 2012-05-17

    ã¯ã˜ã‚ã¾ã—ã¦ã€‚
    ç§ã¯ç¾åœ¨ODEを使ã£ã¦ãƒ­ãƒœãƒƒãƒˆã®ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’行ã„ãŸã„ã¨è€ƒãˆã€å‹‰å¼·ã—ã¯ã˜ã‚ãŸåˆå¿ƒè€…ã§ã™ã€‚

    一ã¤è³ªå•ãŒæœ‰ã‚Šã¾ã™ã€‚
    本記事ã®ã‚µãƒ³ãƒ—ルをビルドã™ã‚‹ã¨ode/ode.hã«å¯¾ã—ã¦No such file or directoryã¨ãªã‚Šã€
    以下50個ã®ã‚¨ãƒ©ãƒ¼ãŒåã出ã•れã¾ã™ã€‚
    æã‚‰ãã€ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã‚¨ãƒ©ãƒ¼ã ã¨æ€ã†ã®ã§ã™ãŒã€å…·ä½“çš„ãªå¯¾å‡¦ãŒåˆ†ã‹ã‚Šã¾ã›ã‚“。

    ç§ã®æ§˜ãªã‚¨ãƒ©ãƒ¼ã«ã¤ã„ã¦è³ªå•ãªã•ã£ã¦ã„ã‚‹æ–¹ãŒä»–ã«ã‚‚散見ã•れã¾ã—ãŸãŒã€
    読んã§ã‚‚解決ã™ã‚‹äº‹ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚

    解決法ã«ã¤ã„ã¦ã®ã”回答をよã‚ã—ããŠã­ãŒã„ã—ã¾ã™ã€‚

  2. syan MonsterID Icon syan on 2010-10-06

    ã¯ã˜ã‚ã¾ã—ã¦ã€ã“ã®ã‚µã‚¤ãƒˆã¨è²´è‘—ã§ODEを勉強ã—ã¦ã„ã‚‹ã‚‚ã®ã§ã™ã€‚
    今ã€è½ä¸‹ç‰©ã¨åºŠã¨ã¯åˆ¥ã®å‰›ä½“ã¨ã®è¡çªã®ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’作æˆã—よã†ã¨ã—ã¦ã„ã‚‹ã®ã§ã™ãŒã€è½ä¸‹ç‰©ãŒå‰›ä½“ã‚’ã™ã‚ŠæŠœã‘ã¦ã—ã¾ã„ã¾ã™ã€‚
    ã“ã®å ´åˆã¯nearCallbackã‚’ã‚‚ã†ä¸€ã¤ä½œã‚‰ãªã‘れã°ãªã‚‰ãªã„ã®ã§ã—ょã†ã‹ï¼Ÿãれã¨ã‚‚nearCallback関数内ã«è¡çªè¨ˆç®—を複数作らãªã‘れã°ãªã‚‰ãªã„ã‚“ã§ã—ょã†ã‹ï¼Ÿ

    • demu MonsterID Icon demu on 2010-10-07

      syanã•ã‚“ã€

      ã¯ã˜ã‚ã¾ã—ã¦ã€‚

      nearCallbackã®é–¢æ•°å†…ã§ã€ã™ã¹ã¦ã®ã‚¸ã‚ªãƒ¡ãƒˆãƒªã®ãƒšã‚¢æ¯Žã«è¡çªæ¤œå‡ºã«é–¢ã™ã‚‹å±žæ€§ã€ä¾‹ãˆã°ã€æ‘©æ“¦ä¿‚æ•°ã‚„å発係数ãªã©ã€ã‚’変ãˆã‚‹å ´åˆã¯ã€ifæ–‡ã§æ¡ä»¶åˆ†ã‘ã‚’ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚nearCallbackã¯ï¼‘個ã§ï¼¯ï¼«ã§ã™ã€‚

      御回答ã«ãªã£ãŸã§ã—ょã†ã‹ã€‚

      ã§ã‚€

      • syan MonsterID Icon syan on 2010-10-07

        返信ã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ã€‚
        nearCallbackãŒï¼‘個ã§ã„ã„ã®ã¯åˆ†ã‹ã£ãŸã‚“ã§ã™ãŒå‰›ä½“åŒå£«ã®è¡çªã«ã¤ã„ã¦ã¯ã©ã†ã—ã¦ã‚‚分ã‹ã‚Šã¾ã›ã‚“。
        ã“ã®å ´åˆã¯ã‚µãƒ³ãƒ—ルã§ã‚ã£ãŸ((ground == o1) || (ground == o2)); ã¨ã¯åˆ¥ã«((ground == o1) || (ground == o3));ã¨ã„ã£ãŸæ„Ÿã˜ã«if文を増やã›ã°ã‚ˆã‚ã—ã„ã®ã§ã—ょã†ã‹ï¼Ÿ

        • demu MonsterID Icon demu on 2010-10-08

          ã„ã„ãˆã€‚

          nearCallbackã«ã¯æŽ¥è§¦ã™ã‚‹å¯èƒ½æ€§ã®ï¼’ã¤ã®ã‚¸ã‚ªãƒ¡ãƒˆãƒªï¼ˆã¤ã¾ã‚Šã€o1, o2)ãŒå…¥åŠ›ã•れã¾ã™ã€‚o3ã¨ã„ã£ãŸæ„Ÿã˜ã«å¢—ã‚„ã™ã®ã§ã¯ãªãã€ä¾‹ãˆã°ã€çƒã¨ãƒœãƒƒã‚¯ã‚¹ã‚¸ã‚ªãƒ¡ãƒˆãƒªã®è¡çªã«é–¢ã™ã‚‹å±žæ€§ã‚’変ãˆãŸã„å ´åˆã¯ã€if (((o1==sphere)&&(o2==box))||((o2==sphere)&&(o1==box))) ã¨ã—ã¦ãã ã•ã„。

          ãªãŠã€ç‰©ä½“é–“ã®è¡çªã«é–¢ã™ã‚‹å±žæ€§ãŒå…¨ã¦åŒã˜å ´åˆã¯æ¡ä»¶ã‚’分ã‘ã‚‹å¿…è¦ãŒã‚りã¾ã›ã‚“。

          ã§ã‚€

  3. mel MonsterID Icon mel on 2009-12-07

    >if (!(g1 ^ g2)) return;
    è¡çªç‚¹ã®ä¸¡æ–¹ãŒåœ°é¢ã‚ã‚‹ã„ã¯éšœå®³ç‰©ï¼Œã‚ã‚‹ã„ã¯ã©ã¡ã‚‰ã¨ã‚‚地é¢ã§ã‚‚障害物ã§ã‚‚ãªã„ã¨ãè¡çªå‡¦ç†ã‚’行ã‚ãªã„ã€ã¨ã„ã†ã“ã¨ã§ã™ã­ã€‚
    短ã„コードãªã®ã«ç†è§£ã™ã‚‹ã®ã«æ™‚é–“ãŒã‹ã‹ã£ã¦ã—ã¾ã„ã¾ã—ãŸãŒã€ä¾‹å¤–処ç†ã‚‚ã†ã¾ãã„ãã€æœ›ã‚“ã§ã„ãŸæŒ™å‹•ã‚’ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã—ãŸã€‚

    本当ã«ã‚りãŒã¨ã†ã”ã–ã„ã¾ã—ãŸã€‚

  4. mel MonsterID Icon mel on 2009-12-06

    ã¯ã˜ã‚ã¾ã—ã¦ã€‚ã„ã¤ã‚‚ã“ã®ã‚µã‚¤ãƒˆã¨è²´è‘—ã«ãŠä¸–話ã«ãªã£ã¦ã„ã¾ã™ã€‚
    ã„ããªã‚Šã§ã™ãŒç‰©ä½“é–“ã®è¡çªå‡¦ç†ã«ã¤ã„ã¦åˆ†ã‹ã‚‰ãªã„ã“ã¨ãŒã‚ã‚‹ã®ã§è³ªå•ã•ã›ã¦ã„ãŸã ãã¾ã™ã€‚

    今ODEã®ã‚µãƒ³ãƒ—ルコードã®demo_buggyã‚’ã‚‚ã¨ã«ã—ã¦è‡ªä½œã®ãƒ—ログラムを作æˆä¸­ãªã®ã§ã™ãŒï¼Œ
    設定ãŒã†ã¾ãã„ã‹ãšï¼Œç‰©ä½“åŒå£«ãŒè¡çªã›ãšã«ã™ã‚Šã¬ã‘ã¦ã—ã¾ã„ã¾ã™ã€‚
    ジオメトリã®è¨­å®šã¯ã—ã¦ã‚り,地é¢ã¨ã¯æŽ¥è§¦ã™ã‚‹ã“ã¨ãŒç¢ºèªæ¸ˆã¿ãªã®ã§ã™ãŒã€
    ãƒã‚®ãƒ¼ãŠã‚ˆã³æ–°ãŸã«è¿½åŠ ã—ãŸãƒ‘ーツåŒå£«ã¯ã™ã‚Šã¬ã‘ãŒç™ºç”Ÿã—ã¦ã—ã¾ã„ã¾ã™ã€‚

    ã“ã®ã‚ˆã†ãªç—‡çжãŒãŠãã¦ã—ã¾ã†åŽŸå› ï¼ŒãŠãらãã¯è‡ªåˆ†ã®è¨­å®šãŒè¶³ã‚Šã¦ã„ãªã„ã‹ã‚‰ã§ã™ãŒï¼Œ
    解決方法ã«å¿ƒå½“ãŸã‚ŠãŒã‚りã¾ã—ãŸã‚‰ã”教授ã„ãŸã ã‘ãªã„ã§ã—ょã†ã‹ã€‚

    よã‚ã—ããŠé¡˜ã„ã—ã¾ã™ã€‚

  5. demu MonsterID Icon demu on 2009-12-06

    melã•ã‚“ã€

    ã¯ã˜ã‚ã¾ã—ã¦ã€‚demura.netã¨æ‹™è‘—ã‚’ã”æ„›èª­ã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ã€‚

    ã•ã¦ã€ã”質å•ã§ã™ãŒã€if (!(g1 ^ g2)) return;ã®è¡Œã‚’コメントアウトã™ã‚‹ã¨å•題ã¯è§£æ±ºã™ã‚‹ã¨æ€ã„ã¾ã™ã€‚

    ã§ã‚€

    static void nearCallback (void *data, dGeomID o1, dGeomID o2)
    {
    int i,n;

    // only collide things with the ground
    int g1 = (o1 == ground || o1 == ground_box);
    int g2 = (o2 == ground || o2 == ground_box);
    if (!(g1 ^ g2)) return;

  6. demu MonsterID Icon demu on 2009-12-07

    正確ã«ã¯è¡çªã™ã‚‹å¯èƒ½æ€§ã®ã‚るジオメトリãŒï¼’ã¤ã¨ã‚‚地é¢ã‚ã‚‹ã„ã¯åœ°é¢ãƒœãƒƒã‚¯ã‚¹ï¼Œã‚ã‚‹ã„ã¯åœ°é¢ã§ã‚‚地é¢ãƒœãƒƒã‚¯ã‚¹ã§ãªã„ã¨ãè¡çªæ¤œå‡ºã‚’ã—ãªã„ã§ãƒªã‚¿ãƒ¼ãƒ³ã™ã‚‹ã¨ã„ã†ã“ã¨ã§ã™ï¼Ž

    排他的論ç†å’Œ^を使ã£ã¦ã„ã‚‹ã®ã§å°‘ã—ã‚ã‹ã‚Šã¥ã‚‰ã„ã§ã™ã­ï¼Ž

    今後ã¨ã‚‚ã”æ„›èª­ã‚„コメントよã‚ã—ããŠé¡˜ã„ã—ã¾ã™ï¼Ž

    ã§ã‚€

コメントをã©ã†ãž

メールアドレスãŒå…¬é–‹ã•れるã“ã¨ã¯ã‚りã¾ã›ã‚“。

5,534 views