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 créer une matrice de projection


Sujet :

OpenGL

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 610
    Points : 66
    Points
    66
    Par défaut comment créer une matrice de projection
    bonjour,
    je voudrais connaitre comment puis je créer ma propre matrice de projection perspective et pas celle de opengl, et ci je travaille avec celle d'opengl est ce que je peux récupérer les élément de cette matrice

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 128
    Points : 146
    Points
    146
    Par défaut
    bonjour,

    créer une matrice de projection perspective soit même est très simple les formules sont faciles à trouver (tu fais une recherche avec "perspective projection opengl"), et tu peux même trouver le code à copier-coller par exemple ici :
    http://www.opengl.org/wiki/GluPerspective_code

    notamment en opengl "legacy free" il faut le faire soit-même (ou en utilisant une lib tierse)

    sinon après avoir utilisé l'ancienne fonction gluPerspective() tu peux très bien utiliser GLdouble mat[16]; glGetDoublev(GL_PROJECTION_MATRIX, mat);

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 610
    Points : 66
    Points
    66
    Par défaut
    merci pour le lien
    j'ai le trouvé avant de posé ma question mais je ne sais pas comment je dois faire pour initialiser les paramètres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void glhFrustumf2(float *matrix, float left, float right, float bottom, float top,   float znear, float zfar)
    en plus de ça j'ai trouvé une matrices
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
     
    1	0	0	0
    0	1	0	0
    0	0	1	0
    0	0	1/f	0
    où f = distance focale de la caméra

    et j'ai tombé dans le même problème c'est que comment j'ai fait l'initialisation de f

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 128
    Points : 146
    Points
    146
    Par défaut
    effectivement il n'y a pas trop d'explication sur ces fonctions car ces fonctions sont des remplacement d'anciennes fonctions obsolètes, et les programmeurs OpenGL connaissent ces anciennes fonctions. ici glhFrustum remplace glFrustum et glhPerspective remplace gluPerspective.

    le man de glFrustum est ici :
    http://opengl.developpez.com/docs/man/man/glfrustum

    et le man de gluPerspective est là :
    http://opengl.developpez.com/docs/ma...gluperspective

    si tu lis de la doc pour débuter avec OpenGL tu trouveras forcément des explications sur la fonction gluPerspective()

    ici la seule différence est que glhPerspective retourne la matrice au lieu de mettre à jour la matrice interne qui est désormais obsolète.

    sinon pour glhFrustumf2() tu remarqueras que tu n'as pas vraiment besoin de la comprendre si tu utilises juste glhPerspective(), c'est glhPerspective() qui utilise glhFrustumf2() dans son code. sinon si tu souhaites comprendre gl(h)Frustum c'est également expliqué dans les documentations sur OpenGL.

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 610
    Points : 66
    Points
    66
    Par défaut
    en effet, je ne faire pas ça pour comprendre la fonctionnement d'opengl mais pour m'aider dans mon projet
    qui est en traitement d'image mais j'ai un objet 3d dessiner en opengl
    je suis besoins de la matrice de projection pour deux raison
    1- pour récupérer (u,v) à partir de (x,y,z)
    2- la chose la plus principale est j'ai besoins de faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    float k1 = ProjectionMat[0] * (fFrameWidth/2.0f) / (z*z) * Ix;
    float k2 = -ProjectionMat[5] * (fFrameHeight/2.0f) / (z*z) Iy;
    alors j'ai besoins de connaitre Z-near, Z-far, left , right, botton

    ou la solution la plus facile est de connaitre la distance focale

    je n'ai aucune aidée comment je dois faire

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 128
    Points : 146
    Points
    146
    Par défaut
    Citation Envoyé par dreamVIG Voir le message
    en effet, je ne faire pas ça pour comprendre la fonctionnement d'opengl mais pour m'aider dans mon projet
    qui est en traitement d'image mais j'ai un objet 3d dessiner en opengl
    je suis désolé de vous dire çà mais SI, vous devez quand même comprendre un minimum OpenGL si vous souhaitez utiliser OpenGL, sinon utilisez autre chose.


    Citation Envoyé par dreamVIG Voir le message
    je suis besoins de la matrice de projection pour deux raison
    1- pour récupérer (u,v) à partir de (x,y,z)
    En général en OpenGL des coordonnées données avec les deux lettres (u,v) font référence aux coordonnées d'application de la texture sur le polygone.
    Visiblement ici il ne s'agit pas de cela, donc vous devriez nous dire de quoi il s'agit, sans quoi nous ne pourrons faire grand chose pour vous, même avec la meilleure volonté du monde.

    Citation Envoyé par dreamVIG Voir le message
    2- la chose la plus principale est j'ai besoins de faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    float k1 = ProjectionMat[0] * (fFrameWidth/2.0f) / (z*z) * Ix;
    float k2 = -ProjectionMat[5] * (fFrameHeight/2.0f) / (z*z) Iy;
    la chose la plus principale est vous être clair sur quoi vouloir vous faire

    j'ai déjà répondu la question initiale du fil de discussion au sujet de la matrice de projection,
    maintenant que vient faire cette formule que vous nous parachutez là comme çà ?
    à quoi correspondent les paramètres ?


    Citation Envoyé par dreamVIG Voir le message
    alors j'ai besoins de connaitre Z-near, Z-far, left , right, botton
    Je vous ai déjà dit de lire la doc sur ce sujet.
    Lisez-là, puis s'il y a quoi que ce soit que vous n'y comprenez pas revenez pour le demander.


    Citation Envoyé par dreamVIG Voir le message
    ou la solution la plus facile est de connaitre la distance focale
    Avec une recherche google je trouve que la distance focale en opengl fait référence à la distance du centre de projection au plan de projection. Il s'agit juste d'une bête distance. Est-ce que votre problème se situe au niveau de la compréhension du français ? (le français n'est peut-être pas votre langue maternelle ?) Autrement je ne vois pas trop ce qui vous pose problème ?

    Déjà avez-vous compris les réponses précédentes concernant la matrice de projection ? Avez-vous compris ce qu'est une matrice de projection ? Et comment elle est utilisée ? Avez-vous lu des documentations concernant les matrices de projection ? Avez-vous défini une matrice de projection dans votre code ? si oui comment ? si non quel type de projection souhaitez-vous utiliser ? orthogonale, perspective, autre ?

  7. #7
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 610
    Points : 66
    Points
    66
    Par défaut
    e suis désolé de vous dire çà mais SI, vous devez quand même comprendre un minimum OpenGL si vous souhaitez utiliser OpenGL, sinon utilisez autre chose.
    je voudrais utilisé opengl , et j'ai travaillé avec opengl quelques programmes mais malheureusement j'ai fais copy /collé de fonction opengl dans mes programme
    donc vous devriez nous dire de quoi il s'agit, sans quoi nous ne pourrons faire grand chose pour vous,
    1-je prend chaque point d'une région de l'image (cette région c'est le visage qu'il existe dans l'image) et je le projet dans un objet 3d qui est un cylindre , j'ai fais ce code mais je ne sais pas est ce qu'il marche ou non (parce que j'ai le problème de projection c'est pour ça je ne peux pas le tester)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     PVertex get3d(int x,int y)
     {
         double z=0;
         PVertex v;
         x=x-faceRect->x(),y=y-faceRect->y();
         double r=faceRect->width()/2;
         y=y-faceRect->height()/2;
         z=sqrt(r*r-(x-r)*(x-r));
         x=x+faceRect->x();
         y=outImage->height-y+faceRect->y();
         v.x=x,v.y=y,v.z=z;
         return v;
     }
    normalement je donne à cette procédure (u,v) de l'image et elle m'envoie les coordonnées de cette pixel dans le cylindre
    (dans un premier temps j'ai réflichi de faire cette région une texture de l'image mais j'ai pas pu faire la correspondance entre les points du cylindre et les pixel(c-à-d j'ai pas pu récupérer les coord 3d du pixel)
    2- je multiplié ces coordonées par une matrice pour déplacer le pixel en (déplacement ce fait en x,y,z avec une rotation sur les 3 axes) elle nous donne (x',y',z')

    3-je multiplié le résultat de déplacement (x',y',z') par une matrice de projection perspective pour nous donne (xc,yc,zc,wc) ensuite en récupére les (u',v')
    j'ai défini cette matrice

    1 | 0 | 0.71 | 0
    0 | 1 | 0.71 | 0
    0 | 0 | 0 | 0
    0 | 0 | 0 | 0
    après une recherche j'ai la trouvé dans un site l'auteur a dis qu'est une matrice de projection perspective cavalière

Discussions similaires

  1. [Débutant] Comment créer une matrice dans un interface graphique ?
    Par habibi_esstt dans le forum MATLAB
    Réponses: 3
    Dernier message: 30/10/2009, 13h01
  2. Réponses: 4
    Dernier message: 06/06/2007, 13h32
  3. Réponses: 1
    Dernier message: 21/05/2007, 10h33
  4. [débutant] Comment créer une base ?
    Par laffreuxthomas dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 14/12/2004, 22h12
  5. Comment créer une Table dans 1 Bdd ACCESS avec Builder??
    Par makandja dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/03/2004, 20h21

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