Bonjours voila je travail sur un petit projet perso et j'ai choisi Irrlicht et la physique de newton mais je block a un endroit :
Les collision
enfaite pour faire une collision avec un objet pas de probleme mais quand c'est pour la camera ... le je suis sur le c*** ^^
donc je vien vous demandez de l'aide pour gerée les collision de ma camera avec newton
voice mon code :
//Geré les touche
SKeyMap keyMap[4] = {
{EKA_MOVE_FORWARD, KEY_KEY_Z},
{EKA_MOVE_BACKWARD, KEY_KEY_S},
{EKA_STRAFE_LEFT, KEY_KEY_Q},
{EKA_STRAFE_RIGHT, KEY_KEY_D},
};
// On crée la cam et on la place
cam = smgr->addCameraSceneNodeFPS(0, 200.0f, 250.0f, -1, keyMap, 4);
et pour charger la carte :
// add skybox
smgr->addSkyBoxSceneNode(driver->getTexture("data/irrlicht2_up.bmp"),driver->getTexture("data/irrlicht2_dn.bmp"),driver->getTexture("data/irrlicht2_lf.bmp"),driver->getTexture("data/irrlicht2_rt.bmp"),driver->getTexture("data/irrlicht2_ft.bmp"),driver->getTexture("data/irrlicht2_bk.bmp"));
// Load level in Quake3 format
device->getFileSystem()->addZipFileArchive("./data/chiropteraDM.pk3");
scene::IAnimatedMesh* q3levelmesh = smgr->getMesh("maps/chiropteradm.bsp");
scene::ISceneNode* q3node = smgr->addOctTreeSceneNode(q3levelmesh->getMesh(0));
//LevelNewtonCollision
NewtonCollision* nmapcollision = NewtonCreateTreeCollision(nWorld, NULL);
NewtonTreeCollisionBeginBuild(nmapcollision);
u32 cMeshBuffer, j;
int v1i, v2i, v3i;
IMeshBuffer *mb;
float vArray[9]; // vertex array (3*3 floats)
int tmpCount = 0;
scene::IMesh *mesh = q3levelmesh->getMesh(0);
for (cMeshBuffer=0; cMeshBuffer<mesh->getMeshBufferCount(); cMeshBuffer++)
{
mb = q3levelmesh->getMesh(0)->getMeshBuffer(cMeshBuffer);
S3DVertex2TCoords* mb_vertices = (S3DVertex2TCoords*)mb->getVertices();
u16* mb_indices = mb->getIndices();
// add each triangle from the mesh
for (j=0; j<mb->getIndexCount(); j+=3)
{
v1i = mb_indices[j];
v2i = mb_indices[j+1];
v3i = mb_indices[j+2];
vArray[0] = mb_vertices[v1i].Pos.X;
vArray[1] = mb_vertices[v1i].Pos.Y;
vArray[2] = mb_vertices[v1i].Pos.Z;
vArray[3] = mb_vertices[v2i].Pos.X;
vArray[4] = mb_vertices[v2i].Pos.Y;
vArray[5] = mb_vertices[v2i].Pos.Z;
vArray[6] = mb_vertices[v3i].Pos.X;
vArray[7] = mb_vertices[v3i].Pos.Y;
vArray[8] = mb_vertices[v3i].Pos.Z;
box.addInternalPoint(mb_vertices[v1i].Pos.X, mb_vertices[v1i].Pos.Y, mb_vertices[v1i].Pos.Z);
box.addInternalPoint(mb_vertices[v2i].Pos.X, mb_vertices[v2i].Pos.Y, mb_vertices[v2i].Pos.Z);
box.addInternalPoint(mb_vertices[v3i].Pos.X, mb_vertices[v3i].Pos.Y, mb_vertices[v3i].Pos.Z);
NewtonTreeCollisionAddFace(nmapcollision, 3, &vArray[0], 12, 1);
}
}
NewtonTreeCollisionEndBuild(nmapcollision, 0);
NewtonBody* nmapbody = NewtonCreateBody(nWorld, nmapcollision);
box = q3node->getTransformedBoundingBox();
NewtonSetWorldSize (nWorld, (float*)&(box.MinEdge.X), (float*)&(box.MaxEdge.X));
NewtonReleaseCollision(nWorld, nmapcollision);
le code pour la map se trouve dans une fonction "Prepare()" et celui de la cam dans "Init"
Voila merci de bien vouloir aider un newbie comme moi