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 :

Matrice orthogonale pour OpenGL 3.2 via shader


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    profiler
    Inscrit en
    Février 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : profiler

    Informations forums :
    Inscription : Février 2008
    Messages : 84
    Par défaut Matrice orthogonale pour OpenGL 3.2 via shader
    Bonjour

    Je passe mon framework en OpenGL 3.2 afin d'abandonner toutes les commandes dépréciées et n'utiliser que ce qui est recommandé. Cela veut dire plus de gestion des matrices par OpenGL, donc je dois tout gérer à la mano. Pour info, c'est du C# et j'utilise OpenTK.

    Mon problème est que je suis un peu un buse dans le domaine des matrices et je souhaite passer en 2d (mode ortho). Pour cela j'ai défini mon vertex shader comme ceci :
    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
     
    #version 150
     
    uniform mat4 projectionMatrix;
    uniform mat4 modelViewMatrix;
     
    in vec4 vertex;
     
    void main(void)
    {
    	//gl_Position = vertex;
    	//gl_Position = vertex * projectionMatrix;
    	//gl_Position = vertex * modelViewMatrix;
    	gl_Position =  projectionMatrix * modelViewMatrix * vertex;;
    }
    Le code C# qui initialise le tout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Matrix4 projection = Matrix4.CreateOrthographicOffCenter(Display.ViewPort.Left, Display.ViewPort.Width, Display.ViewPort.Height, Display.ViewPort.Top, -1, 1);
    GL.UniformMatrix4(projectionLocation, false, ref projection);
    Matrix4 modelview = Matrix4.Identity;
    GL.UniformMatrix4(modelViewLocation, false, ref modelview);
    Bien sûr, ça ne marche pas. Comme je l'ai dit plus haut, je suis une buse la dedans. Ce que je souhaite c'est faire correspondre mon affichage à du 1x1 (mode 2d de base tout simple en fait).

    Si une âme charitable voulais bien éclairer ma lanterne...

  2. #2
    Membre émérite

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 450
    Par défaut
    Il serait beaucoup plus efficace de multiplier la matrice de projection et de modelview cote cpu et d'envoyer en uniform a ton vertex shader le resultat de cette multiplication. Cela te permettrait de faire cette operation qu'une fois au lieu de une fois par vertex (imagine que tu affiches un maillage de 1 millions de triangles, tu vas faire une million de multiplication de matrice...).

    Ensuite peut-etre que le probleme vient du fragment shader, tu as fais quoi pour le fragment shader?

  3. #3
    Membre confirmé
    Profil pro
    profiler
    Inscrit en
    Février 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : profiler

    Informations forums :
    Inscription : Février 2008
    Messages : 84
    Par défaut
    Pour ce qui est de l'optimisation tu as raison, mais il faut d'abord que j'arrive à faire marcher ce shader...

    Le fragment shader est tout con :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #version 150
     
    out vec4 fragColor;
     
    void main(void)
    {
    	fragColor = vec4(1.0, 0.0, 0.0, 1.0);
    }

  4. #4
    Membre émérite

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 450
    Par défaut
    Ton probleme peut aussi venir du fait que ta bibliotheque est row major alors que OpenGL est column major. Apres... et bien il faut que tu sois certain que ta fonction Matrix4.CreateOrthographicOffCenter face ce qu'il faut...

    As-tu deja essaye avec un example simple? Par exemple si tu as projection et modelview en matrice identite et que tu dessines un carre qui a pour coordonnees [-1,-1,0 ; 1,-1,0 ; 1,1,0,-1,1,0 ]. Il devrait prendre tout ton viewport.

Discussions similaires

  1. Réponses: 7
    Dernier message: 11/12/2007, 03h16
  2. Je cree une UI pour Opengl mais ...
    Par Happy dans le forum OpenGL
    Réponses: 2
    Dernier message: 17/12/2005, 14h36
  3. Paramétrer DevCpp pour OpenGL
    Par vargasvan dans le forum OpenGL
    Réponses: 7
    Dernier message: 04/10/2005, 11h49
  4. Doc pour créer requetes SQL via ODBC sous EXCEL
    Par satanas dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 25/01/2005, 08h33
  5. logiciel pour opengl
    Par Mik@-D0 dans le forum OpenGL
    Réponses: 7
    Dernier message: 02/09/2004, 17h10

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