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 :

Comment faire un Billboard qui "tourne"


Sujet :

OpenGL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 24
    Points : 17
    Points
    17
    Par défaut Comment faire un Billboard qui "tourne"
    Bonjour,

    J'utilise opengl en c++.

    Alors voila, J'ai une map simple, en 3D Ortho pour pouvoir afficher des personnages en sprite dessus.
    j'aimerai les affichers sur la map, et que quand elle tourne, eux aussi tourne.

    Je veux donc faire un billboard, afin que la face ou j'affiche ma sprite reste enface de la camera.

    Mon souci, c'est qu'avec le code que j'ai trouvé, je n'arrive pas a le faire.
    La face reste toujours enface de la camera, par contre, celui ci ne bouge pas du tout lorsque je fais tournée ma map.

    Voici mon bout de code :
    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
     
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
            glMatrixMode(GL_MODELVIEW);
            glLoadIdentity();
            gluLookAt(0,10,4,0,0,0,0,0,1);
            glRotated(Camera::angle_cam(),0,0,1);
     
            glEnableClientState(GL_VERTEX_ARRAY);
     
            map.dessiner_modeles_3D(); // affichage des objet 3D texturer
     
            // Récupérer la matrice modelview.
            GLfloat modelview[16];
            glGetFloatv(GL_MODELVIEW_MATRIX, modelview);
     
            // Sauvegarder la matrice actuelle.
            glPushMatrix();
     
                // Modification de la matrice pour le billboarding.
                for (unsigned int i = 0; i < 3; i++)
                    for (unsigned int j = 0; j < 3; j++)
                        modelview[i+4*j] = (i==j) ? 1.f : 0.f;
     
                // Définir la matrice.
     
            glLoadMatrixf(modelview);
     
            map.dessiner_modeles_2D(); // affichage de des objet 2D de la map
     
            glPopMatrix(); // chargement de l'ancienne matrice
     
            glDisableClientState(GL_VERTEX_ARRAY);
            glDisableClientState(GL_TEXTURE_COORD_ARRAY);
    Quelqu'un sait il comment je peux faire ?
    Connaissez vous de bon tutoriaux pour la gestion de jeux en 3D sans profondeur ?
    Car j'ai rien trouvé pour m'aider pour le moment.

    Merci d'avance.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 382
    Points : 4 936
    Points
    4 936
    Par défaut
    la matrice de billboarding est la matrice inverse de view

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Modification de la matrice pour le billboarding.
    for (unsigned int i = 0; i < 3; i++)
        for (unsigned int j = 0; j < 3; j++)
            modelview[i+4*j] = (i==j) ? 1.f : 0.f;
    ton code là ne fait que mettre la partie de la matrice concernant la rotation à l'identité

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par stardeath Voir le message
    la matrice de billboarding est la matrice inverse de view

    ton code là ne fait que mettre la partie de la matrice concernant la rotation à l'identité
    Je ne comprend pas :/ tu connaitrais pas un tutoriel ? ou un site qui explique en details ?

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 382
    Points : 4 936
    Points
    4 936
    Par défaut
    si l'anglais te rebute pas : www.lighthouse3d.com/opengl/billboarding/

    rubrique "True Billboards" !

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Merci beaucoup.

    Je suis pas au top en anglais, mais je devrais y arriver, vais regarder un peu avec ce tuto

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    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 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Google translate peut traduire relativement la page ( si ça peut aider )

    Sinon, vous pouvez toujours demander dans ce forum, pour les points ultra précis
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    J'ai essayer plein de chose.

    J'ai bien compris je crois le tutoriel.

    Mais cela ne veux pas fonctionner :/

    A ce que j'ai compris, pour le type de billboard que je veux il me faut un billboard "Cylindrical Billboards", j'ai donc suivi le tutoriel :

    http://www.lighthouse3d.com/opengl/b...x.php3?billCyl

    J'ai repris la fonction, l'ai ajouté dans mon main.cpp pour testé.

    J'ai mis ce qu'il fallait, voici mon code :

    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
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
            glMatrixMode(GL_MODELVIEW);
            glLoadIdentity();
            gluLookAt(0,10,4,0,0,0,0,0,1);
            double result = Camera::angle_cam();
            //glTranslated(1,0,0);
            glRotated(result,0,0,1);
     
            glEnableClientState(GL_VERTEX_ARRAY);
     
            map.dessiner_modeles_3D(); // affichage des objet 3D texturer
     
            billboardCylindricalBegin(0,10,4,3,0,0);
            map.dessiner_modeles_2D();
            glPopMatrix();
    La position de la camera est 0,10,4 normalement, mon objet personnage est positionner en 3,0,0.
    Mon axe pour la hauteur et le Y, je ne sais pas si cela change quelques chose :/

    et voici le rendu :


    Je tourne ma map, déjà le personnage ne s'affiche pas correctement, et il tourne avec la map, :/

    J'essaie de trouver des solutions, mais rien ne vas, quelqu'un sait il m'aider ? :s

    merci d'avance

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 382
    Points : 4 936
    Points
    4 936
    Par défaut
    tu arrives déjà à afficher correctement ton personnage? (qui tourne pas pour l'instant)

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Sans billboard ui, mais des que j'utilise un code pour billboard celui ci est tourné, dailleur, c'est les faces supérieurs et pas les faces de faces qui sont affiché, normal ?

Discussions similaires

  1. Comment faire une fonction qui renvoi un tableau.
    Par poly128 dans le forum Delphi
    Réponses: 2
    Dernier message: 01/06/2006, 01h04
  2. Comment faire un texte qui defile ?
    Par alyas dans le forum Flash
    Réponses: 4
    Dernier message: 21/02/2006, 07h16
  3. [VB6] Comment faire une fonction qui renvoie 2 résultats
    Par tazarine dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 15/01/2004, 00h13

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