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 :

probleme de perspective


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 70
    Par défaut probleme de perspective
    bonjour
    jai cree une mini salle en 3D avec 3mur et un sol ainsi qu'un cube qui se trouve dans cette piece, lennui cest que cette caisse ne respecte pas du tout les perspective. c est a dire que on a limpression quelle n'est pas incorporé dan la scene, elle est jsute rajouté sur tas et kan on deplace la camera elle est jamai o meme endroit, elle passe a travers les mur et tout. comment peut on regler sa ?
    autre question , les face de ce cube se superpose pas aml aussi, on voit le coté gauche a travers le cube, cest casse-pied je doi dire !
    voici le code en gros :
    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
     
    procedure glDraw();
    begin
      glClearColor(0.0, 0.0, 0.5, 0.0);
      glLoadIdentity();
      glInitNames;
      glClear(GL_COLOR_BUFFER_BIT);
      gluLookAt( cam_ht, cam_dph, cam_vt,   20, 20, 20,   0, 0, 1);
      glColor3f(1.0, 1.0, 1.0);
     
      // mur du fond
      glPushName(8);
      glBindTexture(GL_TEXTURE_2D, MyTextureTex1);
      glBegin(GL_POLYGON);
        glNormal3f( 1.0, 0.0, 1.0);
        glTexCoord2f(0.0, 0.0);glVertex3f( 0, 40, 0);
        glTexCoord2f(1.0, 0.0);glVertex3f(40, 40, 0);
        glTexCoord2f(1.0, 1.0);glVertex3f(40, 40, 40);
        glTexCoord2f(0.0, 1.0);glVertex3f( 0, 40, 40);
      glEnd();
      glPopname;
     
     // sol
     // mur de gauche
     // mur de droite
     
     // cube (une caisse en bois)
      glPushName(55);
      glPushMatrix();
        gltranslatef(0,40,0);
        makeCube(8,MyTextureTex3); 
           { fonction que jai faite pour crée un cube qui prend en paramètre la taille desiré et la texture a appliqué }
      glPopMatrix();
      glPopName();
    end;
    je precise que la geometrie de ma scene est un gros cube de 40 , donc la caisse doit se trouver au fond a gauche, or on a pa du tout limpression quelle y est... (sauf quand on bouge la camera juste au dessus , là on voit quel est bien mais sinon non...)
    pliz HelP

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Salut,

    Eu... au risque de poser une question bête : tu as activé le z-buffer ? Par ce que ça m'a tout l'air d'etre ton probleme. Si tu ne vois pas ce que c'est cherche donc du coté de glEnable(GL_DEPTH_TEST)...

  3. #3
    Membre chevronné
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Par défaut
    Une fois activé pense à le vider à chaque fois dans ton

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 70
    Par défaut
    quand je rajoute (GL_DEPTH_TEST) apres initName() sa me fait un ecran noir... je voi rie ndaffciher dan ma fenetre
    sa menerve...

  5. #5
    Membre chevronné
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Par défaut
    Essaye de changer ton angle de vue avec de grands jeux de test.

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 70
    Par défaut
    je voi pa ce ke tu ve dire Zoso_
    tu ve bien mexpliker un peu mieux ce ke tu voudrai ke je fasse ?

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Oui bon,

    Apparemment tu ne sais pas ce qu'est le z-buffer ou tampon de profondeur en français. Je te conseil vivement de prendre un bon bouquin sur OpenGL pour apprendre les bases, ou au moins qui te servira de référence. Regarde donc du coté du "red book" plusieurs post récents en parlent (y compris celui que tu trouveras en tête de ce forum)

  8. #8
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 37
    Par défaut
    pour faire simple...

    Le Z-buffer est un algorythme d'affichage 3D qui permet de masquer les parties cachées (c'est a dire les polygones qui sont derriere d'autres polygones) afin d'avoir un rendu 3D. En openGL, pour l'utiliser, il faut l'activer.
    tout d'abord il faut l'initialiser dans ton main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
    puis l'activer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      glEnable (GL_DEPTH_TEST);
    et enfin pour chaque image calculée par le programme, il faut vider le tampon de profondeur (z-buffer) pour le réinitialiser, comme on vide le tampon de couleur (color-buffer)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    voila qui devrai t'aider. essaye de te documenter sur le Z-buffer car c'est quelque-chose de tres important a connaitre.

  9. #9
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 70
    Par défaut
    pourkoi doit on mettre un OU entre le buffer de couleur et de profondeur ?

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Attention c'est un ou binaire et non une operation logique (autrement dit le "|" n'est pas à confondre avec le "||").

    Par exemple si tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int x = 1;
    int y = 2;
    int z = 4;
    alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int a = x | y;   //a vaut 3
    int b = y | z;   //b vaut 6
    int c = x | z;   //c vaut 5
    int d = x | x;  //d vaut 1
    Voila pour ce qui est de l'operateur ou binaire. Ensuite on fait ce ou entre le buffer de couleur et celui de profondeur pour indiquer que l'operation va porter sur les deux à la fois.

  11. #11
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 70
    Par défaut
    a ok !
    mai alors on pourrait lecrire en 2 lignes ossi ? sa marcherais pareil ?

  12. #12
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 37
    Par défaut
    oui ca marcherai pareil mais tu sais bien que les ninformatitiens aiment bien en ecrire le moins possible (bon je plaisante) il est possible que la fonction glClear soit optimisée pour que ca aille plus vite en appelant comme ca plutot qu'en l'appelant 2 fois. (a verifier...)

  13. #13
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    c'est effectivement le cas, sur tout les hardware moderne, la carte peut nettoyer plusieurs buffer en même temps donc on gagne du temps !!!

    surtout que le nettoyage des buffer es une operation qui prend du temps et etant donné qu'openGL est une machine a état il ne peut pas effectuer plusieurs operations a la fois (sauf dans certains cas precis quand c'est prevu par le constructeur...) donc ici, en utilisant le |, si le hardware peu effectuer le nettoyage en parallele il le fait, sinon il le fait en sequence...
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  14. #14
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 70
    Par défaut
    enfin jai demandé parce ke moi kan jecrivai ca separé et ba sa marchais plu ! javai ma scene toute noire ! et pourtant jai pas un carte graphik "toute pourite" ! (Radeon 9800 Pro, ndlr)... vous sauriez peut etre mexpliquer pourquoi...

  15. #15
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    c'est peut etre car les cartes recentes on obligatoiremen besoins de le faire en parallele... mais ce serait bizzard...

    par contre c'est connu que les radeon n'implementent pas correctement la norme openGL sur certaines version.
    par exemple sur es bas de gamme des radeon 9X (9000,9100...) il y a des probleme lors de l'utilisation de l'aplha test...
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  16. #16
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 70
    Par défaut
    bon eh bien merci pour toute ces precisions ! je declare le topic officielement [Réglé] !

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

Discussions similaires

  1. Probleme de rafraichissement d'un BDGrid
    Par marmotte dans le forum Bases de données
    Réponses: 10
    Dernier message: 28/05/2004, 18h07
  2. Probleme avec glutBitmapCharacter en mode Perspective
    Par killerjeff dans le forum OpenGL
    Réponses: 7
    Dernier message: 17/05/2004, 14h04
  3. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01
  4. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  5. [Kylix] Probleme de nombre flottant!!
    Par yopziggy dans le forum EDI
    Réponses: 5
    Dernier message: 02/05/2002, 10h13

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