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 :

Coloration d'un vertex indépendamment de la position de la caméra [GLSL]


Sujet :

OpenGL

  1. #1
    Membre actif
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    70
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 70
    Points : 204
    Points
    204
    Par défaut Coloration d'un vertex indépendamment de la position de la caméra
    Bonjour tout le monde !

    J'aurais une petite question sur l'utilisation d'un vertex shader pour déterminer la position "absolue" d'un vertex

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    uniform vec3 pCamera=vec3(0,0,0);
     
    void main (void)
    {
        vec4 pVertex= gl_ModelViewMatrix*gl_Vertex;//relatif à la vue
     
        gl_Position =gl_ProjectionMatrix*pVertex;
     
        vec4 couleur= length(pVertex.xyz);//test avec coloration
     
        gl_FrontColor =vec4(couleur);
    }
    normalement , avec ce code, la caméra se trouve normalement au centre de mon référentiel .

    Donc normalement en soustrayant les coordonnées de la caméra, je devrais retomber sur le référentiel (0,0,0)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    uniform vec3 pCamera=vec3(0,0,0);
     
    void main (void)
    {
        vec4 pVertex= gl_ModelViewMatrix*gl_Vertex;//relatif à la vue
     
        gl_Position =gl_ProjectionMatrix*pVertex;
     
        vec4 couleur= length(pVertex.xyz-pCamera);//test avec coloration indépendante de la caméra (enfin c'est ce que je crois)
     
        gl_FrontColor =vec4(couleur);
    }
    La position de la caméra modifie encore la couleur des vertices.
    pCamera est bien mise à jour et avec les bonne valeur.

    Dans quel partie du raisonnement je me suis trompé ?


    cordialement.

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Je vous conseille de lire ceci, pour mieux comprendre les matrices : http://jeux.developpez.com/tutoriels...el-3-matrices/

    Ensuite, je pense que la solution serait :
    Code glsl : Sélectionner tout - Visualiser dans une fenêtre à part
    vec4 couleur= length((gl_ModelMatrix*gl_Vertex).xyz);
    En effet, il vous suffit juste d'utiliser la matrice du modèle, pour que celui-ci soit à sa position finale (dans le monde) et ainsi, avoir les sommets à la bonne position.
    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 actif
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    70
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 70
    Points : 204
    Points
    204
    Par défaut
    Bonjour et merci de la réponse

    erreur :ERROR: 0:22: 'gl_ModelMatrix' : undeclared identifier
    Après quelques recherche On ne plus accéder directement à gl_ModelMatrix.

    Il y a bien-sûr la solution de gérer soi même la matrice gl_ModelMatrix... mais ce serait dommage de ne pas travailler avec ce que le shader reçoit par défaut.

    Ou bien il y a quelque chose que je ne vois pas

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Quelle version d'OpenGL / du GLSL ?
    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 actif
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    70
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 70
    Points : 204
    Points
    204
    Par défaut
    J'utilise opengl 3.1
    et pour le moment GLSL
    #version 130

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 311
    Points : 545
    Points
    545
    Par défaut
    Citation Envoyé par neuneutrinos Voir le message
    Il y a bien-sûr la solution de gérer soi même la matrice gl_ModelMatrix... mais ce serait dommage de ne pas travailler avec ce que le shader reçoit par défaut.
    Je travaille qu’avec OpenGL ES , ou il faut obligatoirement renseigner tous les paramètres Uniform de ton pipeline.
    Donc j’ai du mal à comprendre comment OpenGL pourrait déterminer cette matrice Model ?
    J’imagine que pour la rétrocompatibilité, l’uniform gl_ModelViewMatrix est déterminé par la matrice en haut de pile GL_MODELVIEW, j’espère que cela peut se désactiver d’ans OpenGL, car je trouve beaucoup plus propre de laisser le soin aux développeurs de définir les entrées/sortie et paramètres de ses différents pipelines !
    ShaderElement : Bénéficier de l’accélération graphique simplement par une nouvelle balise HTML <shader>
    ODE.js : portage JavaScript du célèbre moteur physique 3D Open Dynamics Engine

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    neuneutrinos : il n'y a pas la bonne matrice (la matrice de modèle seule), OpenGL ne proposait que la matrice de modèle vue (en même temps, j'ai été idiot de chercher dans la spécification, j'aurais du me rappeler).
    Donc vous êtes obligée de passer la matrice vous même la matrice de modèle en variable uniforme.
    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.

  8. #8
    Membre actif
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    70
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 70
    Points : 204
    Points
    204
    Par défaut
    C'est ce que je craignais :p

    bon bah il faut que j'intègre ça dans mes objets alors !

    Je trouve quand même frustrant qu'on ait accès au modelView (où le centre du repère est la caméra sauf erreur de ma part)
    et qu'on ne pas, connaissant sa position d'en déduire la coordonnée absolue d'un vertex .

    En tout cas merci pour votre aide !

    Dans un sens problème résolue

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/03/2011, 14h13
  2. Position d'une caméra 2D isométrique
    Par sebcap26 dans le forum Physique
    Réponses: 9
    Dernier message: 24/11/2010, 11h17
  3. Paramètres extrinsèques et position de la caméra
    Par Milmilmil dans le forum OpenCV
    Réponses: 3
    Dernier message: 06/03/2009, 11h37
  4. [OpenSceneGraph] Position d'une caméra dans l'espace
    Par Invité(e) dans le forum OpenSceneGraph
    Réponses: 2
    Dernier message: 28/08/2008, 10h58
  5. Réponses: 2
    Dernier message: 04/11/2007, 13h10

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