Je sais, c'est juste que je n'ai pas mis tout le code mais quand je créé un newtoncollision avec le NewtonTreeCollision que ça ne marche plus. Tiens je passe le code de création de l'objet avec son insertion dans Newton :
IMesh *Caisse001 = smgr->getMesh("../MEDIAS/caisse/morceau_principal.3ds");
IMeshSceneNode *NodeCaisse001 = smgr->addMeshSceneNode(Caisse001);
if( NodeCaisse001 )
{
NodeCaisse001->setMaterialFlag(EMF_LIGHTING, false);
NodeCaisse001->setMaterialTexture(0, driver->getTexture("../MEDIAS/stones.jpg"));
NodeCaisse001->setPosition( vector3df(0,0,0) );
/// ajout de la physique à NodeCaisse001
NewtonCollision* NC_NodeCaisse001 = NULL;
NewtonBody* NB_NodeCaisse001 = NULL;
/// récupère la taille de la boundingbox du node pour la creation d'une collision de type "BOX"
vector3df size = NodeCaisse001->getBoundingBox().getExtent() * IRR_TO_NEWTON;
#ifdef _DEBUG
printf("NodeCaisse001 - size Newton : X=%f; Y=%f; Z=%f;\
", size.X, size.Y, size.Z);
#endif
/// créé la collision
//------------------------------------- METHODE 1 : OK ------------------------------------//
//NC_NodeCaisse001 = NewtonCreateBox(World, size.X, size.Y, size.Z, -1, NULL);
//------------------------------------- METHODE 2 : OK tant que le mesh est convexe ------------------------------------//
NC_NodeCaisse001 = CreateNewtonConvexHull(World, Caisse001);
//------------------------------------- METHODE 3 : collision OK mais le body ne joue plus son rôle, pas de gravité, le mesh reste là où je l'ai mis avec Irrlicht ------------------------------------//
//NC_NodeCaisse001 = createTreeCollisionFromMesh(World, Caisse001);
if(NC_NodeCaisse001)
{
#ifdef _DEBUG
printf("Newton Collision - NodeCaisse001 : OK\
");
#endif
/// transforme la matrice du node pour NEWTON
matrix4 matrix = NodeCaisse001->getRelativeTransformation();
vector3df origin = NodeCaisse001->getRelativeTransformation().getTranslation() * IRR_TO_NEWTON;
matrix.setTranslation(origin);
/// créé le corps pour l'application d'effets sur le node irrlicht
NB_NodeCaisse001 = NewtonCreateBody(World, NC_NodeCaisse001, matrix.pointer());
if(NB_NodeCaisse001)
{
#ifdef _DEBUG
printf("Newton Body - NodeCaisse001 : OK\
");
#endif
///
NewtonReleaseCollision(World, NC_NodeCaisse001);
///
NewtonBodySetUserData(NB_NodeCaisse001, NodeCaisse001);
///
NewtonBodySetTransformCallback(NB_NodeCaisse001, PhysicsSetTransform);
NewtonBodySetForceAndTorqueCallback(NB_NodeCaisse001, PhysicsApplyForceAndTorque);
/// définit la masse et l'inertie de l'objet
NewtonBodySetMassMatrix (NB_NodeCaisse001, 100.0f, 0.0f, 0.0f, 0.0f);
}
#ifdef _DEBUG
else printf("Newton Body - NodeCaisse001 : PROBLEME\
");
#endif
}
#ifdef _DEBUG
else printf("Newton Collision - NodeCaisse001 : PROBLEME\
");
#endif
#ifdef _DEBUG
printf("NodeCaisse001 : OK\
");
}
else
{
printf("NodeCaisse001 : PROBLEME\
");
#endif
}
En fait, si j'utilise les 2 premières méthodes ça marche, mes objets tombent se heurtent, c'est joli. Mais avec l'arbre de collision, l'objet qui l'utilise se fait heurter par les autres donc il y a collision, mais lui ne bouge pas alors que la création du body reste la même. Au final, je ne change que la création de ma collision.