Historique des modifications - Message

Message #10531

Sujet: Objets destructibles avec Newton


Type Date Auteur Contenu
Création du message 14-06-2012 19:21:51 johnplayer
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.

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
544 invités en ligne
membre en ligne: -
RSS Feed