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

OpenGL Discussion :

réinitialisation de la scène


Sujet :

OpenGL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2004
    Messages : 10
    Points : 6
    Points
    6
    Par défaut réinitialisation de la scène
    salut,
    pour des raisons trop longues à expliquer cette fois ci (si vous voulez des détails, zavez qu'a demander), je cherche à faire apparaitre tout les objets de ma scène un par un, et sans tout les autres, pour ensuite réaliser effectivement ma scène avec tout mes objets. Je réalise ce petit truc un peu lourd pour pouvoir récupérer toutes les coordonnées 3D de chaques objets de ma scène.

    pour cela, j'ai fait cette fonction :
    ****************************************************
    /* draw the objects */
    for (count = 0 ; count < MAXOBJECT ; count ++)
    {
    object = Scene.objects[count] ;
    if (object)
    {
    /* clear the window with current color */
    glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
    glLoadIdentity() ;
    glPushMatrix() ;

    /* movement of the object */
    if(Stage)
    MoveObject(object) ;

    /* position of the object */
    glTranslatef( object->pos[X] ,
    object->pos[Y] ,
    object->pos[Z] ) ;
    /* orientation of the object */
    Orientate( object->or[X] , object->or[Y] , object->or[Z] ) ;

    /* graphic parameters */
    glColor4fv (white) ;
    glMaterialfv( GL_FRONT , GL_SPECULAR , object->ref ) ;
    glMateriali( GL_FRONT , GL_SHININESS , object->shininess ) ;

    DrawShape(*object) ;
    glFlush() ;
    glutSwapBuffers() ;
    /* save the coordinates */
    Save3DCoordinates(*object) ;

    glPopMatrix () ;

    }
    }

    /* clear the window with current color */
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) ;
    glLoadIdentity() ;


    **********************************************
    mais voilà, ca marche pas tellement, lorsque je sauve mes coordonnées 3D, je ne trouve aucun objet, quel que soit l'étape (je "trouve" un objet en analysant l'image avec glReadPixels et GL_DEPTH_COMPONENT, si la profondeur est<1 alors un objet est sous le pixel).

    mais voilà, ce code pas très beau ne marche pas... c comme s'il n'y avait aucun objet...

    please help

  2. #2
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 15
    Points : 17
    Points
    17
    Par défaut
    Je suppose que tu récuppéres tes données dans Save3DCoordinates ?
    ... il me semble que appeller glut swapbuffer ne fasse que lancer un message de swap et qu'il n'est pas effectif tant que ta fonction de boucle principale et rendu le control pour la frame courante.

    Essaye de récupéré tes données dans front plutot que back... si c'est ce que tu fais ...

    Une autre chose, tu veux récupéré les coordonnées de combien de points par objet ?

    Et les coordonnées tu les veux dans le référentiel de la fenétre c'est ca ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2004
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    désolé pour ma réponse tardive, je suis au canada, ya un certain décalage horaire ....

    que veut tu dire par récuperer les coordonnées dans le front et non pas dans le back ?

    ok je vais enlever le glutswapbuffers, mais ca ne change pas grand chose à vrai dire...

    j'essaie de récupérer toutes les coordonnées visibles de mon objet. je stocke en fait toutes les coordonnées appartenant à ma fenetre 512*512, et donc je stocke la coordonnée 3D correspondant au pixel que je veut.
    et si il ya des objets transparents, j'ai besoin d'avoir toutes les coordonnées visibles, je construit donc une liste de coordonnées 3D...
    et le pire dans tout ça c'est que je dois savoir à quel objet appartient chaque coordonnées 3D, c'est pour ça que je réalise cette boucle qui devrait me permettre d'afficher les objets un par un, analyser toute la fenêtre et récuperer toutes les coordonnées 3D correspondant à chaque pixel.
    le problème est donc qu'a chaque tour de boucle, c comme si je n'avais pas affiché d'objet, je ne trouve dans ma fenêtre aucun objet qui devrait donc baisser ma valeur GL_DEPTH_COMPONENT...

    ... je pense que je suis pas très clair là... n'hésitez pas à m'en demander plus...

  4. #4
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 15
    Points : 17
    Points
    17
    Par défaut
    Ca va, je vois ce que tu veux dire, (mais c pour faire quoi au juste, je me demande si t obligé de sortir cette artillerie).

    Tjrs est il que si tu utilise glreadpixel, ache qu'il existe glReadBuffer qui selectionne le buffer ou tu lis, comme tu utilise glutswapbuffer c que t en double buffering, et si je ne me trompe pas, le dessin que tu viens juste de faire et et dans le buffer front, et readpixel lit dans le back(celui qui est affiché au moment ou tu fait ton dessin, hors a ce moment là y'a ce que tu as demandé à étre afficher la frame d'avant, je suppose que pour l'instant tu l'as laissé à vide ) du coup, voilà, essaye ca...


    ... de mon coté, j'ai un autre probléme, avec read buffer, ce que je veux faire c exporter au format bmp un screen shoot de l'écran, je suis a peut prés 100% sur que mon exportateur marche, mais j'ai qd meme quelques gros problémes... je voudrais donc savoir si dans un tablo qu'on a envoyer à glreadbuffer en rgb si il n'y a que du RGBRGBRGB et pas de 0 en fin de ligne pour compléter modulo 4 ou une connerie dans le genre ... merci

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2004
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    je crois que j'ai a peu près résolu mon problème... il y a que je devais réinitialiser également la vue de la caméra, car elle influe sur les matrices de projection et modelview utilisée par gluUnproject dans ma fonction Save3DCoordinates.

    pour ton problème, assure toi que tu lis bien en RGB et pas en RGBA (dans ce cas il faudra lire un octet de plus). De plus certains formats d'image nécessite également d'échanger les composants R et B. J'i une fonction qui réalise un sccreenshot de la fenetre opengl si ca t'intéresse, mais elle enregistre au format SUN rasterfile.

  6. #6
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 15
    Points : 17
    Points
    17
    Par défaut
    Thanks pour ta réponse, g trouvé ma solution : cT glPixelStorei(GL_PACK_ALIGNMENT, 1);


    C sur que si t matrice son pas bonne

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

Discussions similaires

  1. réinitialiser un DBLookupCombobox
    Par piscine dans le forum Bases de données
    Réponses: 4
    Dernier message: 09/06/2007, 19h50
  2. [FLASH MX] Transparence de la scène sur flash
    Par knecmotet dans le forum Flash
    Réponses: 11
    Dernier message: 02/10/2005, 18h50
  3. réinitialiser clé primaire
    Par guegré dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 20/08/2004, 11h36
  4. Tourner autour d'une scéne
    Par apdsi dans le forum OpenGL
    Réponses: 3
    Dernier message: 19/08/2004, 12h53
  5. Réinitialisation
    Par kacedda dans le forum C
    Réponses: 3
    Dernier message: 13/12/2002, 04h56

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