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 :

[OpenTK] Matrice de projection et de vue pour rendu 2D


Sujet :

OpenGL

  1. #1
    Membre très actif
    Avatar de smarlytomtom
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2014
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 139
    Billets dans le blog
    1
    Par défaut [OpenTK] Matrice de projection et de vue pour rendu 2D
    Bonjour à tous !
    Je cherche actuellement un moyen de faire un rendu 2D avec openGL (par le biais de OpenTK) avec la version 3.3 de ce dernier. Seulement je bloque sur les matrices de projection et de vue, le manuel de OpenTK ne fait pas parti des plus fourni !
    pour le moment voici comment je détermine ces dernières :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    view = Matrix4.LookAt(new Vector3(0, 0, 0.5f), Vector3.Zero, Vector3.UnitY);
    projection = Matrix4.CreateOrthographic(screenWidth, screenHeight, -0.5f, 100.0f);
    cependant quand je multiplie le tout dans le vertex shader, je me retrouve avec une fenêtre noir (pas d'affichage) ce qui n'est pas le cas quand j'utilise uniquement ma matrice de modèle, voici mon vertex shader:

    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
     
    #version 330 core
     
    layout(location = 0) in vec3 position;
    layout(location = 1) in vec2 uv;
     
    out vec2 tex_coord;
     
    uniform mat4 model_matrix;
    uniform mat4 projection_matrix;
    uniform mat4 view_matrix;
     
    void main(){
     
        gl_Position = projection_matrix * view_matrix * model_matrix * vec4(position, 1.0);
        tex_coord = uv;
     
    }
    Après un certain nombre de recherches je m'avoue un peu perdu au milieu des nombreuses explications que j'ai trouvée ...

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2008
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Octobre 2008
    Messages : 187
    Par défaut
    Comme toujours c'est un peu galère de débugger du OpenGL vu qu'on ne peut pas mettre de breakpoint ou faire de printf...

    Commençons déjà par le début : Dans le code, est-ce que tu peux faire le calcul proj * view * model * vec4(position, 1f) et donner le résultat envoyé ? Chaque composante doit-être compris entre -1f et 1f. Si la valeur semble correcte, il y a peut-être un problème dans l'envoi des paramètres au GPU, assure-toi de bien envoyer la bonne valeur des matrices view et proj dans le shader.

    Si ça ne marche toujours pas, il y a peut-être un problème de shader mal configuré... Est-ce que tu utilise du backface culling ? Est-ce que tu change la valeur du clipping OpenGL ? Qu'est-ce que tu obtient concrètement si tu n'utilise que la matrice modèle ?

  3. #3
    Membre très actif
    Avatar de smarlytomtom
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2014
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 139
    Billets dans le blog
    1
    Par défaut
    salut dancingmad et merci pour ta réponse !
    Quand je n'utilise que la matrice de modèle il n'y a aucun problème à déplorer ! Pour le reste je te redis quand j'ai fais les tests !

    Edit :
    Pour l'affichage des matrices de vue et de projection :
    Nom : result_matrix.PNG
Affichages : 165
Taille : 2,7 Ko

    pour le calcul de la matrix MVP on à :
    Nom : mvp_matrix.PNG
Affichages : 167
Taille : 1,3 Ko

    Pour tes autres questions :
    - je n'utilise pas de backface culling
    - je n'ai pas modifier le clipping

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


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

    Comme toujours, je conseille gDEBugger ou autre débogueur pour OpenGL, du genre. Ma question (car je ne me rappelle jamais des valeurs que doivent avoir les membres d'une matrice ) c'est : quels sont les coordonnées des sommets.
    De plus, avez vous essayé d'inverser la multiplication des matrices (m*v*p, ou p*v*m).
    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.

  5. #5
    Membre très actif
    Avatar de smarlytomtom
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2014
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 139
    Billets dans le blog
    1
    Par défaut
    Salut LittleWhite !
    oui j'ai testé dans les deux sens mais le fait de multiplier dans le sens m * v * p apporte à des résultats improbables ... Je vais tester gDEBugger dés que je le pourrais !

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 053
    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 053
    Billets dans le blog
    141
    Par défaut
    Aussi, en 2D, la matrice de vue (avec un recul de -5) ne sert à rien, je pense. Vous êtes sur un plan.
    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. Réponses: 0
    Dernier message: 07/02/2014, 11h06
  2. erreur encore jamais vue (pour moi)
    Par le_gueux90 dans le forum C
    Réponses: 8
    Dernier message: 20/12/2005, 10h51
  3. Plusieurs vues pour le même objet
    Par nicolas66 dans le forum OpenGL
    Réponses: 4
    Dernier message: 25/10/2004, 10h27
  4. [MFC] Deux vues pour un document
    Par Lark dans le forum MFC
    Réponses: 6
    Dernier message: 15/09/2004, 10h44
  5. Créer une vue pour trier une requete UNION ?
    Par Etienne Bar dans le forum SQL
    Réponses: 3
    Dernier message: 03/01/2003, 20h22

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