Hi,
I have added the physics to my demo application. I'm using ODE and i have taken the ideas from phystut tutorial.
I have the plane terrain:
...
csRef<iMeshWrapper> terrain (engine->CreateSectorWallsMesh (mainsect, "terrain"));
terrain_object = m_mesh->GetMeshObject ();
terrain_factory = terrain_object->GetFactory();
terrain_state = scfQueryInterface<iThingFactoryState> (terrain_factory);
terrain_state->AddQuad (csVector3 (0.0f, 0.0f, 0.0f), csVector3 (30.0f, 0.0f, 0.0f), csVector3 (30.0f, 0.0f, -30.0f), csVector3 (0.0f, 0.0f, -30.0f));
...
terrain_body = dynsys->CreateBody ();
terrain_body->SetPosition (csVector3 (15.0f, 0.0f, -15.0f));
terrain_body->SetMoveCallback (0);
terrain_body->MakeStatic ();
dynsys->AttachColliderMesh (terrain, csOrthoTransform (), 10.0f, 0.0f);
int i;
for (i = 0; i < terrain_state->GetPolygonCount(); i++) {
terrain_body->AttachColliderPlane (terrain_state->GetPolygonObjectPlane (i), 10.0f, 0.0f, 0.0f);
}
...
And this is the object that must fall down:
...
csVector3 meshpos (10.0f, 20.0f, -15.0f);
...
csRef<iMeshWrapper> asteroid (engine->CreateSectorWallsMesh (m_world, "asteroid"));
asteroid_object = asteroid->GetMeshObject ();
asteroid_factory = asteroid_object->GetFactory();
asteroid_state = scfQueryInterface<iThingFactoryState> (asteroid_factory);
asteroid_state->AddOutsideBox (csVector3(0.0f, 0.0f, 0.0f), csVector3(0.5f, 0.5f, 0.5f));
...
moveast = asteroid->GetMovable ();
moveast->SetPosition (meshpos);
moveast->UpdateMove ();
...
ast_body = dynsys->CreateBody ();
ast_body->SetProperties (1.0f, csVector3 (0), csMatrix3 ());
ast_body->SetPosition (meshpos);
ast_body->AttachMesh (asteroid);
ast_body->AttachColliderBox (csVector3 (0.5f, 0.5f, 0.5f), csOrthoTransform (csMatrix3 (), csVector3 (0)), 0.0f, 1.0f, 0.0f);
...
It seems to work fine but when the object collide with the terrain the application crashes.
I have seen this (on phystut):
csVector3 size (10.0f, 10.0f, 10.0f); // This should be the same size as the mesh.
t.SetOrigin(csVector3(10.0f,0.0f,0.0f));
dynSys->AttachColliderBox (size, t, 10, 0);
t.SetOrigin(csVector3(-10.0f,0.0f,0.0f));
dynSys->AttachColliderBox (size, t, 10, 0);
t.SetOrigin(csVector3(0.0f,10.0f,0.0f));
dynSys->AttachColliderBox (size, t, 10, 0);
t.SetOrigin(csVector3(0.0f,-10.0f,0.0f));
dynSys->AttachColliderBox (size, t, 10, 0);
t.SetOrigin(csVector3(0.0f,0.0f,10.0f));
dynSys->AttachColliderBox (size, t, 10, 0);
t.SetOrigin(csVector3(0.0f,0.0f,-10.0f));
dynSys->AttachColliderBox (size, t, 10, 0);
But i don't understand how it works. (I have understood that can be the solution to my problem)
Many thanks for you help!!