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

GLUT Discussion :

insertion d'objet dynamique


Sujet :

GLUT

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 270
    Points : 123
    Points
    123
    Par défaut insertion d'objet dynamique
    bonjour à tous,
    je voudrais savoir comment insérer des objet glut de façon dynamique.
    Je m'explique :

    j'ai une fenêtre glut dans laquelle j'ai un cube qui définie mon espace.

    je souhaiterais ajouter dans mon cube des sphères via la touche "n" (les sphere seront stockées dans un tableau).

    Pour cela j'ai créer une classe sphere :
    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
     
     
    float sphere::lieuDeNaissance(float P_min,float P_max){
        P_x = ((P_max-P_min)*((float)rand()/RAND_MAX))+P_min;
        P_y = ((P_max-P_min)*((float)rand()/RAND_MAX))+P_min;
        P_z = ((P_max-P_min)*((float)rand()/RAND_MAX))+P_min;
     
    }
    void sphere::affiche(){
     
        sphere::lieuDeNaissance(0.0,30.0);
     
        glTranslatef(0.0f, 0.0f, -100.0f);
     
        glPushMatrix();
            glColor3f(5.0, 34.0, 1.0);
            glTranslated(P_x,P_y,P_z);
            glutSolidSphere(5.0, 60,60);
        glPopMatrix();
     
    }
    Voici ma fonction d'affichage du main:
    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
     
    void Affichage_Scene()
    {
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT |
                                GL_STENCIL_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    Positionne_Camera();
     
     
    	// on déplace tous les objets pour qu'ils soient visibles
    	glTranslatef(0.0f, 0.0f, -100.0f);
            glRotatef(xcam, ycam, xcam, ycam);
     
    sphere S; //création d'un objet S
    S.affiche(); //appel de la fontion affiche de la classe sphere
     
    	// Activation du blending
    	glEnable(GL_BLEND);
    	glDepthMask(GL_FALSE);	// mode lecture seul pour le tampon de profondeur
    	glBlendFunc(GL_ONE, GL_ONE);	// fonction utilisé pour la transparence
     
     
     
    	// Dessin du cube transparent
    	glPushMatrix();
    		glColor4f(0.0, 0.0, 5.7, 0.0);
    		glutWireCube(tailleEspace);
    	glPopMatrix();
     
    	glDepthMask(GL_TRUE);	// mode écriture pour le tampon de profondeur
    	glDisable(GL_BLEND);	// Arrêt du blending
     
    	glFlush();
    	glutSwapBuffers();
     
    }
    Pour l'instant lorsque je compile une sphère est créer avec une position aléatoire mais elle est aussitôt détruite et une autre apparait infiniment.

    Je souhaiterais savoir comment stocké mes sphères dans un tableau vector et pouvoir les afficher depuis ma fonction Affichage_Scene.

    Merci pour vos réponse!

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 899
    Points : 219 808
    Points
    219 808
    Billets dans le blog
    125
    Par défaut
    Bonjour,

    Déjà y a deux choses qui me semble très très étrange
    Ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void sphere::affiche(){
     
        sphere::lieuDeNaissance(0.0,30.0);
        // ....
    Pour moi il n'y aucune raison d'avoir le lieu de naissance dans une fonction d'affichage. (Cela voudrait dire qu'elle nait plusieurs fois ? )
    Conséquence dans votre code, une sphère qui a une position aléatoire tout le temps ( à chaque image nouvelle position )

    Et puis ici aussi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sphere S; //création d'un objet S
    S.affiche(); //appel de la fontion affiche de la classe sphere
    ( Dans la fonction d'affichage de la scène )

    Qui veut dire que vous crée la sphère ( en statique ) donc vous allez aussi la détruire à la fin de l'affichage ( et perte de toute les données associées )

    En conclusion, je vous conseillerai d'avoir un sphère manager ( ou un truc dans le genre ).
    Qui contiendrai la liste ( vector ) de sphère , une fonction pour ajouter ( crée ) une sphère, une fonction pour afficher les sphères, et une fonction de mise à jour des sphères.
    Le manager serai construit au début du programme, détruit à la fin.
    Dans la fonction d'affichage , on appelerai la fonction de dessin, et celle de la mise à jour.
    Lorsque l'on veut ajouter une sphère ( appuie sur la touche 'N' ) on appelerai la fonction d'ajout de sphère.

    Et hop tout est plus facile

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 270
    Points : 123
    Points
    123
    Par défaut
    Oui un peu d'ordre et on y voit tout de suite plus clair. Je vais faire tout ça et je donne des news.
    encore merci

Discussions similaires

  1. [C#] Accéder à un objet dynamiquement ?
    Par webtheque dans le forum ASP.NET
    Réponses: 10
    Dernier message: 14/04/2005, 15h54
  2. [Reflection] Créer un tableau d'objets dynamiquement.
    Par salome dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 25/03/2005, 18h59
  3. Réponses: 4
    Dernier message: 30/01/2005, 14h23
  4. [FLASH MX2004] Création d'objet dynamiquement
    Par noarno dans le forum Flash
    Réponses: 3
    Dernier message: 15/12/2004, 11h00
  5. Evenement sur objet dynamique
    Par CanardJM dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 19/11/2004, 13h56

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