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

Développement 2D, 3D et Jeux Discussion :

[Maths] Calcul de la matrice de projection


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre éclairé Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Points : 871
    Points
    871
    Par défaut [Maths] Calcul de la matrice de projection
    Salut,

    J'ai quelques problèmes pour trouver les termes de la matrice de projection selon la convention utilisée par DirectX. En gros j'arrive pas à bien la calculer, même en revérifiant les calculs.

    On se place dans un repère main gauche (z va dans l'écran, et ne sort pas de l'écran contrairement à OpenGL).

    D'abord, je fixe quelques notations : dans le repère de la caméra, on considère le "view frustum" tel que les plans proches et lointains se trouvent en z = n (pour near), et z = f (pour far), les coordonnées du plan proches sont définies par l < x < r, b < y < t (l, r, b, t pour left, right, top, bottom).

    DirectX transforme le "view frustrum" en un cube de centré par rapport à l'axe z, de coté 2 (x et y vont de -1 à 1) sauf pour les côtés parallèles à z qui sont de longueur 1 (z va de 0 à 1).

    Donc voici la matrice que l'on est censé trouver :



    Moi perso, j'ai essayé de la recalculer à la main, et on dirait que tous les termes sont fixés à une constante près. Est-ce qu'il y aurait une seule solution ou bien une infinité ?

    J'ai pas fini le calcul, il me restait juste la dernière matrice 2x2 à trouver en bas. Et tout était fixé par rapport à 2 constantes arbitraires, mais si je voyais bien que si je fixais les 2 constantes de la bonne manière, j'obtenais une matrice ressemblante, mais pas exactement la même :



    Il y a 2 termes qui sont opposés dans la 3ème colonne. J'ai pourtant bien vérifié les calculs, il me semble qu'il n'y a pas d'erreur.

    • J'ai peut-être pas pris les bonnes équations de départ... Pour moi il transforme les sommets du view frustrum en les sommets du cube.
      Dans le livre ("Real-Time Rendering"), les calculs et les équations ne sont pas précisés.
    • Je sais qu'il y a une infinité de solutions, que la matrice est définie à une constante près.
    • J'ai trouvé dernièrement un .ppt (powerpoint) qui décompose la matrice en 2 applications : transformation du view frustum en pavé de même longueur, mais de section constante égale à celle du plan proche, puis homothétie pour avoir un cube "normalisé".
      Ben là, j'arrive pas à trouver les 2 dernières colonnes de la première matrice.
    • Vous avez peut-être des documents/sites qui détaillent les calculs ou les hypothèses de calculs ?


    EDIT : j'ai enlevé quelques questions qui ont trouvé des réponses évidentes...

    -------

    Quand je pense que je galère sur un vieux calcul, alors que le simple but c'était de comprendre pourquoi dans les shadow maps ils utilisent les coordonnées 'z' et 'w' comme coordonnées de textures...

  2. #2
    Membre confirmé Avatar de LapinGarou
    Homme Profil pro
    R&D Developer
    Inscrit en
    Octobre 2005
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D Developer
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 341
    Points : 479
    Points
    479
    Par défaut
    Je vais tenter, peut être une annerie, mais ça me semble logique.
    La troisième colonne est l'axe des z non ?
    Hors, comme on projette de façon inverse, il est normal que le signe soit changé dans la 3ème colonne non ?
    (Dans la 2eme matrice P, de 2;2 à 3;3 (ligne colonne), ces résultats sont-ils justes ?)

  3. #3
    Membre éclairé Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Points : 871
    Points
    871
    Par défaut
    Oui, la 3e colonne est l'axe des Z, mais vu que je me suis placé en repère main gauche, on est pas censé changer de signe.

    Et la 2e matrice est fausse normalement, c'est la première qui est bonne.

    -----

    Sinon j'ai trouvé un cours universitaire américain (j'en ai parcouru plusieurs, le contenu est souvent bien, même si c'est du PowerPoint moche), qui détaille un peu le calcul.

    Il y a plein de schémas, et tout. Je ne mets que la première transformation (la deuxième transformation est triviale à calculer) :

    http://denis.ok.free.fr/perspective_projection.pdf

    J'arrive pas à trouver de manière évidente les 2 mêmes dernières colonnes.

  4. #4
    Membre éclairé Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Points : 871
    Points
    871
    Par défaut
    En fait, les calculs de matrice de projection c'est pas super simple à cause de ces foutues coordonnées homogènes.

    Mais quand on décompose toutes les transformations en petites transformations, c'est plus facile (grâce aux fichiers PowerPoint que j'ai trouvés). J'ai finalement réussi à calculer la matrice, qui est la 2ème matrice !

    Il y a avait tout simplement une erreur dans le livre, comme signalé sur le site .

    Edit : puis normalement, il fallait s'en douter, ça voudrait dire que si l'on augmente la coordonnée z, alors sur l'écran le point s'éloigne du centre, alors qu'il est censé se rapprocher, d'où les signes négatifs pour la 3e colonne.

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

Discussions similaires

  1. calcul dune matrice de projection
    Par karika dans le forum Mathématiques
    Réponses: 4
    Dernier message: 22/01/2013, 19h09
  2. Calcul de matrices de projection par resectioning
    Par amwus dans le forum OpenCV
    Réponses: 0
    Dernier message: 09/02/2010, 15h18
  3. Déplacer le near et far de la matrice de projection
    Par Charles.Anthony dans le forum OpenGL
    Réponses: 4
    Dernier message: 22/08/2006, 11h26
  4. [Maths] Calculs invariants à des transformations
    Par mathieu_t dans le forum Mathématiques
    Réponses: 16
    Dernier message: 26/04/2006, 18h50
  5. [Math]Calcul - Infinity
    Par dinver dans le forum Général Java
    Réponses: 8
    Dernier message: 26/12/2005, 16h14

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