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 :

OpenGL moderne et matrice de modèle


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 266
    Par défaut OpenGL moderne et matrice de modèle
    Bonjour,

    je débute un peu dans l'OpenGL moderne, et j'ai pu voir que les fonctions tel que : glTranslated, glRotated, glScaled était notées deprecated, j'essai donc de moderniser mon code, surtout si cela me permet d'augmenter ma vitesse d’exécution.

    J'explique donc mon problème: Je suis en train de totalement refaire une application CAO. J'ai donc des éléments père qui sont clonés à différents endroit. Anciennement, mon prédécesseur utilisai OpenGL version 1.1. voici un exemple de code pour l'affichage d'un élément :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    glPushMatrix( );
    	glTranslated(position.x(), position.y(), position.z());
    	glScaled(facteurZoom, facteurZoom, facteurZoom);
    	glRotated(angle,0.0,0.0,0.0);
     
    	pere.Affiche();
     
    glPopMatrix();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void Element::Affiche()
    {
    	glBegin(GL_LINES);
    		glVertex3d (CurrentPoint.y, 0.2, CurrentPoint.x);
    		glVertex3d (previousPoint.x, 0.2, previousPoint.z);
    		glVertex3d (CurrentPoint.y, 0.2, CurrentPoint.x);
    		glVertex3d (nextPoint.x, 0.2, nextPoint.z);
    	glEnd();
    }
    j'ai donc voulu modernisé tout ça en remplaçant l'appelle des fonctions glVertex3d par l'utilisation des VBO, mais du coup je ne sais pas comment appliquer mes transformations géométrique à mes modèles.
    De plus mon programme doit pouvoir afficher un grand nombre d’élément (actuellement avec 200 milles clones de 32 pères différents je stagne à 3fps )

    pourriez vous m'indiquer la façon propre et optimisé de faire?

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 150
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    Heureusement, nous avons deux bonnes séries de tutoriels sur OpenGL moderne, en français, je vous prie. Tout est disponible ici : http://opengl.developpez.com/

    En résumé, la matrice, vous devez la gérer vous même, avec GLM (par exemple). À vrai dire, dans le vieux OpenGL, glTranslate/glRotate, modifiait une matrice, mais c'était implicite. Maintenant, vous devez avoir une matrice pour chaque objet (qui déterminera sa position, sa rotation, son redimensionnement). La matrice devra être envoyé au shader avant le dessin, afin de permettre à la carte graphique d'appliquer la matrice sur l'objet. Je vous conseille maintenant de lire les tutoriels pour que cela soit bien plus simple à comprendre (et bien plus détaillé).
    N'hésitez pas à revenir pour plus de questions
    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.

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur 3D
    Inscrit en
    Avril 2008
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur 3D

    Informations forums :
    Inscription : Avril 2008
    Messages : 400
    Par défaut
    Une fois que tu as réussi a implémenter ton renderer 'moderne' avec VBOs et shaders, tu devrais aussi jeter un coup d’œil a l'instancing, ce qui permet de redessiner le même objet plusieurs fois d'affilée pour un coût minime.

  4. #4
    Membre éclairé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 266
    Par défaut
    Tout d'abord merci d'avoir pris le temps de me répondre.

    J'ai lu et j'ai enfin réussi a comprendre le principe des shaders (le déclic a été long à la détente).
    Mais je suis bloquer sur quelques choses a ce niveau là. Je m'explique

    Je code mon programme avec Qt sous Qtcreator, voulant profiter de cette bibliothèque , j'ai voulu utilisé les shaders avec les <QGLShaderProgram> mais lorsque mon code passe par la seconde ligne du code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    m_program.addShaderFromSourceFile(QGLShader::Vertex, QString(":/shaders/vertex_shader.glsl"));  
        m_program.addShaderFromSourceFile(QGLShader::Fragment, QString(":/shaders/fragment_shader.glsl"));
    J'obtiens le message suivant :
    Nom : Sans titre.png
Affichages : 164
Taille : 19,2 Ko

    j'ai tenté a titre de test d’inverser les deux ligne mais c'est toujours sur le deuxième appel que cette erreur s'affiche


    Pour info j'utilise QT 64bits et QtCreator avec le compilateur msvc 2012 x64

  5. #5
    Membre éclairé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 266
    Par défaut
    Je garde en mémoire pour la suite l'instancing

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 150
    Billets dans le blog
    150
    Par défaut
    Vous utilisez un pointeur NULL. Soit vous utilisez mal les fonctions OpenGL de Qt (mauvaise initialisation), soit vous avez un pointeur NULL dans votre code, simplement. Vous devriez utiliser le débogueur pour vous aider
    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.

Discussions similaires

  1. Tutoriel OpenGL Moderne : chargement d'un modèle
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 29/04/2014, 07h46
  2. Tutoriel OpenGL Moderne : les matrices
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 30/03/2014, 20h54
  3. Comment vous proposer un tutorial OpenGL moderne?
    Par Narann dans le forum Contribuez
    Réponses: 3
    Dernier message: 09/10/2010, 15h49
  4. Réponses: 0
    Dernier message: 23/01/2009, 13h59

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