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 :

Problème de Billboarding


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 115
    Par défaut Problème de Billboarding
    Bonjour à tous
    Petite galère pour implémenter un billboarding
    J'ai bricolé une classe Camera qui me donne à tout moment la position ainsi que les vecteurs "look, up et right"
    La caméra est en {0,0,0.25} au départ et je souhaite afficher le billboard en {0,1,0.25}

    Je calcule donc (merci Nehe) les vecteurs look, up et right du plan de billboard afin d'en extraire la fameuse matrice que je donne en paramètre de glMultMatrix()
    Malheureusement ça ne marche pas et rien n'est affiché (sans le glMultMatrix, l'arbre est présent mais toute rotation le laisse avec une face immobile, logique...)
    Quelqu'un a t'il une idée ?

    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
     
     
    	GLfloat matrix[16];
    	Point position(0.,1.,0.25); // position de l'arbre 
    	Vector look,right,up; // vecteurs d'orientation du billboard
     
    	look = cam.GetPosition() - position;
    	look.Normalize();
     
    	right.CrossProduct(cam.GetUp(),look); // right = camUp ^ look
    	right.Normalize();
     
    	up.CrossProduct(look,right); // up = look ^ right
    	up.Normalize();
     
    	matrix[0] = right.GetX(); // remplissage de la matrice de rotation/translation
    	matrix[1] = right.GetY();
    	matrix[2] = right.GetZ();
    	matrix[3] = 0;
    	matrix[4] = up.GetX();
    	matrix[5] = up.GetY();
    	matrix[6] = up.GetZ();
    	matrix[7] = 0;
    	matrix[8] = look.GetX();
    	matrix[9] = look.GetY();
    	matrix[10] = look.GetZ();
    	matrix[11] = 0;
     
    	matrix[12] = position.GetX();
    	matrix[13] = position.GetY();
    	matrix[14] = position.GetZ();
    	matrix[15] = 1;
     
    	glMatrixMode(GL_MODELVIEW); // utile ?
    	glPushMatrix(); // il y a d'autres arbres => sauvegarde de la matrice courante
     
    	glMultMatrixf(matrix); //  problème ???
     
    	glDisable(GL_CULL_FACE); // affichage de l'arbre
    	glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
    	glEnable(GL_BLEND);
    	glColor4f(1.,1.,1.,1.);
    	glEnable(GL_TEXTURE_2D);
    	glBindTexture(GL_TEXTURE_2D, m_arbre.GetId());
     
    	glBegin(GL_QUADS);
    	glTexCoord2f(0.,0.);glVertex3f(-0.15,0,0.);
    	glTexCoord2f(0.,1.);glVertex3f(-0.15,0,0.3);
    	glTexCoord2f(1.,1.);glVertex3f(0.15,0,0.3);
    	glTexCoord2f(1.,0.);glVertex3f(0.15,0,0.);
    	glEnd();
     
    	glDisable(GL_BLEND);
    	glEnable(GL_CULL_FACE);
    	glDisable(GL_TEXTURE_2D);
     
    	glPopMatrix();
    En mode de débogage, le calcul des vecteurs a l'air correct, c'est donc la multiplication qui semble poser problème
    En terme d'orientation l'axe x va de gauche à droite, y va de l'écran vers l'arrière et z de bas en haut
    Merci !

  2. #2
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 580
    Par défaut
    tu peux regarder ce tutorial concernant le billboarding :
    http://www.lighthouse3d.com/opengl/billboarding/
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 115
    Par défaut
    Merci de ton lien
    En regardant de plus près, j'ai inversé les axes y et z en remplissant la matrice avant le glMultMatrix donc maintenant c'est ok

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

Discussions similaires

  1. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  2. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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