IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ODE Discussion :

Problème de link ODE/OpenGL sous Dev-cpp


Sujet :

ODE

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 16
    Points
    16
    Par défaut Problème de link ODE/OpenGL sous Dev-cpp
    Bonjour, j'ai un problème dans mon programme,
    j'utilise Devcpp, je fais de la programmation 3d avec OPENGL et j'utilise glut.Pour ce qui est de la programmation 3d pas de problème, c'est dès que j'ai voulu utiliser un moteur physique, j'utilise ODE.
    Dès que je compile, j'ai des problème du genre :
    [Linker error] undefined reference to `dWorldCreate'
    [Linker error] undefined reference to `dHashSpaceCreate'
    [Linker error] undefined reference to `dMassSetZero'
    ...
    [Linker error] undefined reference to `WinMain@16'


    Cependant, j'ai bien fait attention, et j'ai rajouté les librairies, les includes tous ce qu'il faut pour ode.

    J'avais eu le meme genre de problème avec glut, mais je l'avais résolu en faisant : Option du Projet/Paramètre/Editeur de liens et j'avais rajouté : -lopengl32 -lglut32 -lglu32

    et je n'ai plus eu de problème.

    Donc est-ce que pour ODE, le problème est le même ??

    ps : je suis sur un programme tout simple pour apprendre à se servir d'un moteur physique, j'ai fait un cube et une sphére et je fait tomber la sphere sur le cube

    MERCI

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Il faut lier avec la bibliothèque ODE. Pour la dernière erreur, voir les FAQ C/C++ (me souviens plus laquelle contient la réponse).

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    Merci, j'ai trouvé pour la dernière erreur, par contre, même si ça me parait logique et que je comprends bien, je ne vois pas comment faire dans devcpp pour lier avec la bibliothéque ODE, sachant que j'ai déja rajouté toutes les LIB dans les options du projet et que j'ai bien vérifié que les lib étaient présentes dans le dossier sur mon disque dur.

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonsoir,

    Je suis nouveau sur ODE également, d'ailleur je remerci toutes les personnes ayant donné des conseils sur ODE dans le forum, cela m'as beaucoup aidé.

    En fait, j'ai un peu un problème similaire à Milanber9999, j'ai pour l'instant simplement une balle que je contrôle au clavier et un cube qui tombent sur une plateforme.
    Le problème est que la plateforme (faite avec un dCreateBox(space, 20, 0.3, 20)), bascule lorsque le cube l'atteint.
    Pourtant, j'ai bien fait attention à ne pas attribuer de body à la Box représentant la plateforme.

    Voici la déclaration de mes objets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //Plateforme
    dGeomID ground = dCreateBox(space, 20, 0.3, 20);
     
    // Cube 
    body_cube = dBodyCreate (world);
    dMassSetBox (&m,1,1,1,1);	//  dMassSetBox (dMass *, densité, longueur x, longueur ly, longueur lz);
    dMassAdjust (&m,20); 		// ajuster la masse 
    dBodySetMass(body_cube,&m);	// Mise en place de la masse de l'objet
    dBodySetPosition (body_cube,10,3,6); 	// Position du cube
    geom_cube = dCreateBox (space,1,1,1);	// Création de la géométrie dans l'espace avec les longueurs x/y/z correspondantes
    dGeomSetBody(geom_cube,body_cube);		// Affecte la géométrie crée au corps
    Et voilà la fonction nearCallback que j'utilise, je ne l'ai pas faite moi même, mais c'est une combinaison de ce que j'ai pu trouevr un peu partout (d'ailleurs, merci encore pour les bouts de code que j'ai trouvé ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    /**
    * Fonction appelée par dSpaceCollice lorsque deux objets dans l'espace entre
    * potentiellement en contact
    *****/
    static void nearCallback (void *data, dGeomID o1, dGeomID o2)
    {
    	int i;
    	int numc;
    	// Création d'un tableau d'objets dContact pour retenir les joints entre eux
            dContact contact[MAX_CONTACTS];
     
    	// On récupère le corps de chaque geométrie
        dBodyID b1 = dGeomGetBody(o1);
        dBodyID b2 = dGeomGetBody(o2);
     
    	// Test si les deux corps sont déjà connectés, si oui, on sors de la fonction
    	//if(b1 && b2 && dAreConnected(b1,b2))
    	//	return; 
     
     
     
     
    	// Mise en place des popriétés de chaque point de contact.
    	// i.e. la façon dont chaque point de contact doit réagir lors d'une collision
    	// See section 7.3.7 of the ODE manual and have fun experimenting to learn more.  
        for (i = 0; i < MAX_CONTACTS; i++)
        {
    		// CFM activé en soft (rendre la surface molle) et bounce activé (rendre la surface rebondissante)
            contact[i].surface.mode = dContactBounce | dContactSoftCFM; 
    		// Mettre le coefficient de friction à infinity ( 0 : surface sans friction, dInifinity : le maximum de friction)
            contact[i].surface.mu = dInfinity;
    		// Optionnel au cas où mu marche pas, s'applique sur la direction 2
            contact[i].surface.mu2 = 0; 
    		// Valeur de rebond (avec pour max = 1, min = 0)
            contact[i].surface.bounce = 0.01;
    		// Vélocité minimal de l'objet entrant en contact pour qu'il y ai rebond
            contact[i].surface.bounce_vel = 0.1;
    		// Douceur de la surface
            contact[i].surface.soft_cfm = 0.01;
        }
     
     
    	if ( !dGeomGetBody(o1) && !dGeomGetBody(o2));
    	// Ici, on effectue le véritable test de collision en appelant dCollidesur les 2 géométries o1 et o2
    	// dCollide retourne le nombre de points de contact (zéro si aucun contact)
    	// Outre les géométrie des objets que l'ont veux calculer et le nombre de points de contacts à considérer, on passe
    	// également en paramètre un dContactGeom.
    	// dContactGeom est une sous structure qui nous permet de passer notre tableau de contact en envoyant seulement
    	// le premeir élément puis on passe l'offset du prochain dContactGeom en dernier paramètre.
        else if (numc = dCollide(o1, o2, MAX_CONTACTS, &contact[0].geom, sizeof(dContact)))
        {
    		// Ajout de chaque point de contact trouvé dans notre groupe(contactgroup) en appelant la fonction dJointCreateContact
            for (i = 0; i < numc; i++)
            {
    			// dJoinCreateContact a besoin de connaître le monde, le groupe et l'objet de contact et renvoi un dJointID
    			// que l'on utilise pour créer un contact temporaire entre deux géométries
                dJointID c = dJointCreateContact(world, contactgroup, contact + i);
                dJointAttach(c, b1, b2);
            }
        }
    }
    En espérant que vous pourriez m'éclairer, merci d'avance

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème de compilation sous dev cpp
    Par small45 dans le forum C
    Réponses: 3
    Dernier message: 04/05/2009, 09h17
  2. classe iostream sous dev-cpp
    Par yashiro dans le forum Dev-C++
    Réponses: 3
    Dernier message: 18/04/2006, 17h34
  3. tuts IHMs sous dev-cpp
    Par yashiro dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 03/04/2006, 21h43
  4. Probleme de compilation sous Dev-Cpp
    Par Guldin dans le forum Dev-C++
    Réponses: 2
    Dernier message: 09/02/2006, 08h34
  5. OpenGL et dev cpp
    Par pourquoipas dans le forum OpenGL
    Réponses: 7
    Dernier message: 02/01/2006, 14h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo