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
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
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);
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
en plus de ça j'ai trouvé une matrices
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)
où f = distance focale de la caméra
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
et j'ai tombé dans le même problème c'est que comment j'ai fait l'initialisation de f
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.
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
alors j'ai besoins de connaitre Z-near, Z-far, left , right, botton
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;
ou la solution la plus facile est de connaitre la distance focale
je n'ai aucune aidée comment je dois faire
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.
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.
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 ?
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.
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 ?
je voudrais utilisé opengl , et j'ai travaillé avec opengl quelques programmes mais malheureusement j'ai fais copy /collé de fonction opengl dans mes programmee 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.
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)donc vous devriez nous dire de quoi il s'agit, sans quoi nous ne pourrons faire grand chose pour vous,
normalement je donne à cette procédure (u,v) de l'image et elle m'envoie les coordonnées de cette pixel dans le cylindre
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; }
(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
après une recherche j'ai la trouvé dans un site l'auteur a dis qu'est une matrice de projection perspective cavalière
1 | 0 | 0.71 | 0
0 | 1 | 0.71 | 0
0 | 0 | 0 | 0
0 | 0 | 0 | 0
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager