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 récupérer la position d'un vertex dans un shader GLSL


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 318
    Par défaut Comment récupérer la position d'un vertex dans un shader GLSL
    J'aurai besoin de récupérer la position d'un vertex dans l'espace absolue.

    si j'ai bien compris le fonctionnement des shaders:

    gl_Vertex => ce sont les coordonnées du vertex dans l'espace local.

    gl_ModelViewMatrix => la matrice de view (la caméra, en fait )

    gl_ProjectionMatrix => la matrice de projection (la perspective)

    Je vois comme solution de passer en paramètre de shader ma matrice de position de mes objets, celle que je passe avec glMultMatrix() entre des glPushMatrix et glPopMatrix() avant mon affichage.
    Mais je préfère éviter surtout que mon shader doit bien avoir l'info puisque les objets sont dessinés au bon endroit.
    Il y a quelque chose qui m'échappe

    Merci pour vos réponses.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 128
    Par défaut
    http://bakura.developpez.com/tutorie...ec-opengl-3-x/
    http://bakura.developpez.com/tutorie...ec-opengl-3-x/
    (tu peux utiliser cette manière de procéder même avec OpenGL 2.1)

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 318
    Par défaut
    le probleme c'est que j'ai essayé la méthode suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    /*Vertex program*/
     
    varying vec3 vPos, vNormal;
     
    void main(void){
    	gl_Position = ftransform();
    	gl_FrontColor = gl_Color;
    	vPos = gl_ModelViewMatrix * gl_Vertex;
    	vNormal = gl_NormalMatrix * gl_Normal;
    }
    vPos n'est pas la position dans l'espace absolue mais la position par rapport à la camera
    vNormal n'est pas les normal dans l'espace absolue non plus
    J'ai besion d ces deux info pour ensuite les mettre dans un buffer RGBAfloat32 dans le fragment program (ça je sais faire)
    Mon but est en autre de faire deferred lighting

    Il y vraiment un truc qui m'échappe le code que je vien de mettre est tiré d'un exemple choppé sur le net.

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


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

    Qu'avez vous comme valeur?

    Si vous demandez espace absolue, c'est que vous ne voulez pas les valeurs en coordonnées ecran, donc pour avoir les valeurs que vous voulez ce serai plus un truc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vPos = gl_ModelMatrix * gl_Vertex;
    ( Sans la vue )
    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 éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 318
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Bonjour,

    Qu'avez vous comme valeur?

    Si vous demandez espace absolue, c'est que vous ne voulez pas les valeurs en coordonnées ecran, donc pour avoir les valeurs que vous voulez ce serai plus un truc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vPos = gl_ModelMatrix * gl_Vertex;
    ( Sans la vue )
    C'est exactement ce que je veux!! sauf que gl_ModelMatrix n'existe pas

  6. #6
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Par défaut
    Les variables pré-définis dans GLSL sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    uniform mat4 gl_ModelViewMatrix;
    uniform mat4 gl_ProjectionMatrix;
    uniform mat4 gl_ModelViewProjectionMatrix;
    uniform mat4 gl_TextureMatrix[gl_MaxTextureCoords];
    N'hésite pas a regarder de temps en temps la spécification de GLSL pour trouver ce que tu cherche.

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

Discussions similaires

  1. Comment calculer la position et la normale dans le vertex shader
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 16/04/2013, 00h46

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