ODEという物理演算ライブラリで、ゲームを作ろうとしているのですが、ボディーの生成のためにdBodyCreateという関数を呼び出すと
ハンドルされない例外が 0x00FE3C21 (Car.exe) で発生しました: 0xC0000005: 場所 0x00000010 への書き込み中にアクセス違反が発生しました。
とエラーが出ます。
やりたいのは、横倒しにしたカプセルにシリンダ(円筒)を4つジョイントでつけて車にするという実験なのですが、このホイールを生成するところでエラーが出ます。
最初は書き方が悪かったのかと思ったのですが、よくよく考えると、その直前でカプセルを生成するのには成功しているんです。
いままで何回もボディー生成は成功したのですが、今までこんなエラーは出たことがありません。
原因わかる方いますか?
※以下関係ありそうなソースコード
class TestCar
{
public:
dBodyID body_Flame, body_Wheel[4];
dMass mass_Frame, mass_Wheel[4];
dGeomID geom_Flame, geom_Wheel[4];
TestCar(dReal px, dReal py, dReal pz);
void tcarDraw(unsigned int bodyColor, unsigned int wheelColor);
};
TestCar::TestCar(dReal px, dReal py, dReal pz)
{
// int i = 0;
dVector3 Rotation;
//メインとなるボディーを生成
body_Flame = dBodyCreate(world); //ボディーを生成
dBodySetPosition(body_Flame, px, py, pz); //位置を調整
dMassSetZero(&mass_Frame); //質量パラメータの初期化
dMassSetCapsuleTotal(&mass_Frame, 800, 1, 0.5, 4.215); //質量パラメータの設定
dBodySetMass(body_Flame, &mass_Frame); //質量パラメータの適用
geom_Flame = dCreateCapsule(space, 0.5, 4.215); //ジオメトリを生成
dGeomSetBody(geom_Flame, body_Flame); //ジオメトリの適用
Rotation[1] = M_PI / 2;
dBodySetRotation(body_Flame, Rotation); //ボディーを正しい向きにする
//ホイールの生成
dRFromAxisAndAngle(Rotation, 0.25, 0.0, 0.0, 2 * M_PI); //x軸周りに90度回す(y軸方向に向く)
for (int i = 0; i < 4; i++) //ホイールの数だけ繰り返す。
{
body_Wheel[i] = dBodyCreate(world); //ボディーを生成
dMassSetZero(&mass_Wheel[i]); //質量を設定
dMassSetCylinderTotal(&mass_Wheel[i], 25, 2, 0.3, 0.2);
dBodySetMass(body_Wheel[i], &mass_Wheel[i]);
geom_Wheel[i] = dCreateCylinder(space, 0.3, 0.2); //ジオメトリを設定
dGeomSetBody(geom_Wheel[i], body_Wheel[i]);
dBodySetRotation(body_Wheel[i], Rotation); //正しい向きにする
}
//ホイールの位置を調整
dBodySetPosition(body_Wheel[0], px + 1.215, py + 0.710, 0.3);
dBodySetPosition(body_Wheel[1], px + 1.215, py - 0.710, 0.3);
dBodySetPosition(body_Wheel[2], px - 1.215, py + 0.710, 0.3);
dBodySetPosition(body_Wheel[3], px - 1.215, py - 0.710, 0.3);
}
dBodyCreateの問題というよりは、ODE全体的に問題がある感じです。
ネットで調べてもののようなエラーが出ているという情報は見つけられませんでした。
サンプルプログラムは、どれを実行しても同じようなエラーは出ませんでした。
使っているODEのバージョンは、0.13です。