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 :

Shadow Mapping - multiplication de matrice


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de LaDeveloppeuse
    Inscrit en
    Mai 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2007
    Messages : 131
    Par défaut Shadow Mapping - multiplication de matrice
    Salut tous le monde,

    Voila je suis entrain d'essayer de faire du shadow mapping et j'aurai aimer que quelqu'un m'explique par des termes pas tres compliqués (vue que je suis pas une érudie en math ) en pourquoi fait-on cette multiplication de matrice ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    static MATRIX4X4 biasMatrix(0.5f, 0.0f, 0.0f, 0.0f,
    				0.0f, 0.5f, 0.0f, 0.0f,
    				0.0f, 0.0f, 0.5f, 0.0f,
    				0.5f, 0.5f, 0.5f, 1.0f);	//bias from [-1, 1] to [0, 1]
    MATRIX4X4 textureMatrix=biasMatrix*lightProjectionMatrix*lightViewMatrix;
    Bon a part que c'est pour generer la texture de l'ombrage, ça encore j'ai assez de neuronnes pour comprendre ça, mais que représente cette matrice "bias" ? Pourquoi a-t-elle ces valeurs la ? Pourquoi cette matrice peut aller de [-1, 1] à [0, 1] comme l'indique le commentaire ? et en quoi ce multiplication nous donne la matrice de la texture ?

    Merci d'avance !

  2. #2
    Membre très actif Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Par défaut
    Je m'y connais pas du tout en shadow mapping mais de vue cette matrice effectue une transformation d'homothétie et de translation, elle divise l'échelle par 2 et déplace ta texture de ça moitié j'ai l'impression mais j'en suis pas sûr

  3. #3
    Membre très actif
    Profil pro
    Responsable technique
    Inscrit en
    Février 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable technique

    Informations forums :
    Inscription : Février 2006
    Messages : 366
    Par défaut
    Grosso modo, ces 2 instructions servent à calculer la matrice de projection de la shadow map. Une shadow map c'est une texture. Mais une texture toute seule ca ne sert à rien. Pour qu'une texture soit utile, il faut une géométrie sur laquelle appliquer la texture et les coordonnées de texture vis-à-vis de cette géométrie. Le code que tu as mis sert à calculer les coordonnées de texture de ta shadow map sur la scene.

    Maintenant si tu te demande "pourquoi la biaismatrix à cette tete là?" je n'en sais rien. Il me semble que la formule de cette matrice est expliqué dans un document de nvidia. Mais concrètement, les valeurs obtenus par le calcul de chacun des éléments de la matrice diffèrent très peu. Donc on approxime ce calcul à la matrice constante que tu connais.

  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
    Cette matrice sert a passer du domaine [-1,1] a [0,1]. Sais-tu faire une multiplication de matrice ? Si oui, tu devrais trouver pourquoi... En gros la formule pour une coordonnée est :

    X = .5*x + .5

    Remplace x par 1 et -1 et tu verras que ça donne 1 et 0. Donc cette matrice n'est qu'une representation matricielle de l'equation juste au dessus et qui s'applique pour toutes les composantes de ton vecteur.

    On veut passer du domaine [-1,1] (c'est les coordonnees normalisees apres avoir multiplie ton vecteur par la projection+modelview matrix et divise par w) au domaine [0,1] (domaine des coordonnees de texture).

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 77
    Par défaut
    D'un point de vue 'math' c'est comme l'a decrit TanEK, d'un point de vue 'non math' cette matrice permet de remettre l'ombre à sa bonne place, en effet, si tu ne fais pas cett multiplication t'auras:
    • Soit ton ombre sera plus loins de la géométrie (vers l'extérieur)
    • Soit elle s'enfonce dans la géométrie (t'auras juste un bout de l'ombre qui est visible)

    Voila.

Discussions similaires

  1. Texture mapping multiple
    Par kikoland dans le forum OpenGL
    Réponses: 2
    Dernier message: 11/04/2006, 11h50
  2. Qt/OpenGL et multiplication de matrice
    Par MDiabolo dans le forum OpenGL
    Réponses: 6
    Dernier message: 30/03/2006, 11h08
  3. Shadow map
    Par Wyatt dans le forum OpenGL
    Réponses: 4
    Dernier message: 19/01/2006, 17h48
  4. Shadow mapping
    Par Pen² dans le forum OpenGL
    Réponses: 4
    Dernier message: 22/04/2005, 14h35
  5. [LG]multiplication de matrices
    Par dreamdam dans le forum Langage
    Réponses: 11
    Dernier message: 17/07/2004, 11h02

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