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 :

Triangle ne s'affichant plus avec la matrice de projection


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    designer d'interaction
    Inscrit en
    Janvier 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : designer d'interaction
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2013
    Messages : 6
    Par défaut Triangle ne s'affichant plus avec la matrice de projection
    Bonjour,

    Depuis ce matin, je me prends la tête pour utiliser la fonction perspective de glm
    Tout me semble très correct mais pourtant ce fichu triangle ne s'affiche plus depuis que j'ai ajouté dans la pipeline une méthode pour la projection
    à partir de glm.
    Quelqu'un saurait pourquoi ?

    pipeline.h :

    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
    58
    59
    60
    61
    62
    63
    64
    void SetPerspectiveProj(float FOV, float Width, float Height, float zNear, float zFar)
        {
            m_persProj.FOV    = FOV;
            m_persProj.Width  = Width;
            m_persProj.Height = Height;
            m_persProj.zNear  = zNear;
            m_persProj.zFar   = zFar;
        }
     
     
    pipeline.cpp :
     
    void Pipeline::InitPerspectiveProj(mat4& m) const
    {
        const float ar         = m_persProj.Width / m_persProj.Height;
        const float zNear      = m_persProj.zNear;
        const float zFar       = m_persProj.zFar;
      //  const float zRange     = zNear - zFar;
        const float tanHalfFOV = m_persProj.FOV;
     
        m = perspective(tanHalfFOV, ar, zNear, zFar);
    }
     
    const mat4 Pipeline::GetTrans(){
     
    mat4 ScaleTrans, RotateTrans, TranslationTrans, PersProjTrans;
     
        InitScaleTransform(ScaleTrans);
    	InitRotateTransform(RotateTrans);
    	InitTranslationTransform(TranslationTrans);
    	InitPerspectiveProj(PersProjTrans);
     
    	m_transformation = TranslationTrans * RotateTrans * ScaleTrans;
    	return m_transformation;
     
    }
     
    main.cpp :
     
    static void RenderSceneCB(){
     
    glClear(GL_COLOR_BUFFER_BIT);
     
    static float Scale =0.0f;
    Scale+=0.1f;
     
    Pipeline p;
    p.Scale(1.0f, 1.0f, 1.0f);
    p.WorldPos(0, 0.0f, 10.0f);
    p.Rotate(0.0f, Scale, 0.0f);
    p.SetPerspectiveProj(70.0f, WINDOW_WIDTH, WINDOW_HEIGHT, 1.0f, 1000.0f);
    glUniformMatrix4fv(gWorldLocation, 1, GL_FALSE, value_ptr(p.GetTrans()));
     
    glEnableVertexAttribArray(0);
    glBindBuffer(GL_ARRAY_BUFFER, VBO);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO);
    glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_INT, 0);
     
    glDisableVertexAttribArray(0);
     
    glutSwapBuffers();
     
    }
    Fichiers attachés Fichiers attachés

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 129
    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 129
    Billets dans le blog
    149
    Par défaut
    Bonjour,

    la partie "Pipeline" me semble légèrement bizarre. Pourquoi serait-ce le pipeline qui reçoit trois transformation différente (translation, rotation et redimensionnement) puis la projection ?
    En plus, dans GetTrans, on voit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    InitScaleTransform(ScaleTrans);
    	InitRotateTransform(RotateTrans);
    	InitTranslationTransform(TranslationTrans);
    	InitPerspectiveProj(PersProjTrans);
    Vous réinitialisé tout le temps vos matrices ?
    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
    Invité
    Invité(e)
    Par défaut
    Tu dois faire un truc comme ça :

    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
     
    void ProjMatrix::setGlPerspectiveMatrix (double l, double r, double b, double t, double n, double f) {
        matrix4f.m11 = (2 * n) / (r - l);
        matrix4f.m12 = 0;
        matrix4f.m13 = (r + l) / (r - l);
        matrix4f.m14 = 0;
        matrix4f.m21 = 0;
        matrix4f.m22 = (2 * n) / (t - b);
        matrix4f.m23 = (t + b) / (t - b);
        matrix4f.m24 = 0;
        matrix4f.m31 = 0;
        matrix4f.m32 = 0;
        matrix4f.m33 = (f + n) / (f - n);
        matrix4f.m34 = (2 * f * n) / (f - n);
        matrix4f.m41 = 0;
        matrix4f.m42 = 0;
        matrix4f.m43 = -1;
        matrix4f.m44 = 0;
        isOrtho = false;
        this->l = l;
        this->r = r;
        this->b = b;
        this->t = t;
        this->n = n;
        this->f = f;
    }
    Et puis tu charge cette matrice avec opengl par contre il y a quelque chose que je ne comprend pas, c'est que les coordonnées sont toujours entre -1 et 1. (et non pas entre -width * 0.5 et width * 0.5 et entre -height * 0.5 et height * 0.5)

    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
     
    void View::setPerspective(double left, double right, double bottom, double top, double fovy, double aspect, double front, double back) {
        if (front < 0)
            front = -front;
        if (back < 0)
            back = -back;
        if (front > back) {
            double tmp = back;
            back = front;
            front = tmp;
        }
        if (left > right) {
            double tmp = left;
            left = right;
            right = tmp;
        }
        if (bottom > top) {
            double tmp = bottom;
            bottom = top;
            top = tmp;
        }
        double tangent = Math::tang(Math::toRadians(fovy) * 0.5f);   // tangent of half fovY
        double hheight = front * tangent;          // half height of near plane
        double hwidth = hheight * aspect;
        projMatrix.setGlPerspectiveMatrix(left, right, bottom, top, front, back);
        projUpdated = true;
    }
    Me serait je loupé quelque part ?

    Sinon à part cela ma matrice marche bien, j'ai bien l'effet de perspective qui me donne l'impression que plus les objets sont loin, plus ils sont petit.

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

Discussions similaires

  1. Flash ne s'affiche plus avec Firefox
    Par kurtbosh dans le forum Windows
    Réponses: 2
    Dernier message: 21/06/2012, 17h51
  2. Réponses: 0
    Dernier message: 28/10/2007, 20h11
  3. afficher plus que 23:59 avec un DateTime
    Par TrollTop dans le forum VC++ .NET
    Réponses: 2
    Dernier message: 11/10/2007, 15h56
  4. Réponses: 15
    Dernier message: 10/05/2007, 13h36
  5. Réponses: 9
    Dernier message: 29/01/2007, 09h40

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