Bonjour,
Comment dois je faire pour tester avec openGL les paramètres intrinsèques et extrinsèques d'une caméra (par exemple: si je voudrai dessiner un cube) ?
Merci beaucoup
Version imprimable
Bonjour,
Comment dois je faire pour tester avec openGL les paramètres intrinsèques et extrinsèques d'une caméra (par exemple: si je voudrai dessiner un cube) ?
Merci beaucoup
J'ai essayé la portion de code suivante pour tester une paramètre extrinsèque de ma caméra :
résultat : l'objet (triangle) est affiché mais de façon incorrecte. Pour y apporter des corrections, j'ai inséré la matrice des paramètres intrinsèques :Code:
1
2
3
4
5
6
7
8
9 double matEx[4][4]; glViewport(0,0,300,200); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); //matEx: matrice des paramètres extrinsèques glLoadMatrixd((const GLdouble *)matEx); glMatrixMode(GL_MODELVIEW); dessiner();
La matrice des paramètres intrinsèques que j'ai eu après calibrage c'est de la forme :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 double matEx[4][4], matProj[3][3] ; glViewport(0,0,300,200); glMatrixMode(GL_PROJECTION); glLoadIdentity(); //matProj : matrice des paramètres intrinsèques matProj glLoadMatrixd((const GLdouble *)matProj); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); //matEx: matrice des paramètres extrinsèques glLoadMatrixd((const GLdouble *)matEx); glMatrixMode(GL_MODELVIEW); dessiner();
[ fx 0 cx]
[ 0 fy cy]
[ 0 0 1 ]
résultat : il n'y a rien qui s'affiche à l'écran. Est ce que quelqu'un a une idée ?
Merci
Salut,
si j ai bien compris :
les parametres extrinseques definissent la matrice de projection.
les parametres intrinseques definissent la matrice de transformation de la caméra.
Deja la matrice transformation doit etre en coordonnées homogenes, c est a dire 4x4. Dans la matrice que tu presente, il manque les composantes de translations.
Ensuite si cette matrice definit la position et l orientation de la camera dans le monde, ic est alors son inverse qu il faut utiliser pour setter la matrice modelView. En effet la matrice modelView definit la transformation du monde et non de la camera.
Non,Citation:
Salut,
si j ai bien compris :
les parametres extrinseques definissent la matrice de projection.
les parametres intrinseques definissent la matrice de transformation de la caméra.
les paramètres extrinsèques définissent la matrice de modélisation
les paramètres intrinsèques définissent la matrice de transformation de la caméra. Cette dernière à mon avis sera utilisée pour la projection.
Est ce que la translation figure aussi dans la matrice des paramètres intrinsèque ? Puisque le logiciel que j'ai utilisé ne me donne que la matrice matProj (matrice des param. intrinsèque). A mon avis la translation est déjà dans la matrice des paramètres extrinsèques.Citation:
Deja la matrice transformation doit etre en coordonnées homogenes, c est a dire 4x4. Dans la matrice que tu presente, il manque les composantes de translations.
oui en fait j ai inversé les 2. je voulais dire :
intrinseque : projection (de l univers sur un plan 2D)
extrinseque : tranformation (position et rotation de la camera dans l univers)
Ce qui est logique en soi.
Si ta matrice de projection est une 3x3, elle n est pas bonne. en plus tu risques un plantage car openGL attend un tableau de 16 valeurs. Ta matrice de transformation est en 4x4 donc elle doit etre bonne.
Un autre truc a faire attention en openGL, c est que les matrices sont stockées de facon contigue en column major. Donc en gros tu as :
et non en row majorCode:
1
2
3
4 (0 4 8 12) (1 5 9 13) (2 6 10 14) (3 7 11 15)
Donc si tes matrices sont en row major, il faut convertir avant et pas faire un loadMatrix direct dessusCode:
1
2
3
4 (0 1 2 3 ) (4 5 6 7 ) (8 9 10 11) (12 13 14 15)
Je tiens à te signaler que le logiciel de calibrage m'avait donné deux types de matrices distinctes : la matrice pour les paramètres intrinsèques et les matrices des paramètres extrinsèques dont voici le lien :http://research.graphicon.ru/calibra...toolbox-5.html.
Si je comprends bien, ce logiciel m'avait fourni une matrice variante du modèle sténopé d'après ce site http://fr.wikipedia.org/wiki/Calibration_de_cam%C3%A9ra dont la forme en coordonnées homogènes (pour la matrice des paramètres intrinsèques) est comme celle -ci :
j'ai déjà appliqué tes conseils :Code:
1
2
3
4 (fx 0 Cu 0) (0 fy Cv 0) (0 0 1 0)
- transformation row major en column major
- passé en paramètres de la fonction glLoadMatrixd les vecteurs ainsi obtenus
Mon problème c'est que je ne sais pas quel genre de transformation devrais appliquer pour la matrice des paramètres intrinsèques.
Voici le code subit de modification :
NB : matExInv c'est la matrice inverse de la matrice des paramètres extrinsèques.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 GLdouble matExInv[4][4],matProj[3][4]; GLdouble matExInv_OGL[16], matProj_OGL[16]; ..... glViewport(0,0,300,200); glMatrixMode(GL_PROJECTION); glLoadIdentity(); //transformation row major -> column major convertRowToColMajor(matProj, matProj_OGL); glLoadMatrixd((const GLdouble *)matProj_OGL); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); //transformation row major -> column major convertRowToColMajor(matExInv, matExInv_OGL); glLoadMatrixd((const GLdouble *)matExInv_OGL); glMatrixMode(GL_MODELVIEW); dessiner()
résultat : l'écran est tjrs noir, pas d'objet affiché.
Tant que tu n as pas une matrice 4x4 pour ta matrice de projection, ca ne sert a rien de l utiliser. Ce qui est utilisé generalement pour setter sa matrice de projection c est gluPerspective.
Essaie peut etre de setter la matrice de projection avec ca et regarde deja si tu obtiens quelquechose avec ta matrice de transformation. Si tu n as rien, postes ta matrice ici, qu on voit quelle tete elle a.
Je t avoue que parametres intrinseques et extrinseques d une camera ca me parle pas beaucoup. Mais c est juste une question de terminologie.
Merci pour ta réponse, voici la matrice de projection et la matrice des paramètres extrinsèque que j'ai utilisé :
Code:
1
2
3
4
5
6
7
8
9 matProj[0][0]=327.32;matProj[0][1]=0.0; matProj[0][2]=152.64; matProj[0][3]=0.0; matProj[1][0]=0.0; matProj[1][1] =327.55; matProj[1][2]=75.50; matProj[1][3]=0.0; matProj[2][0]=0.0; matProj[2][1] = 0.0; matProj[2][2]=1.0; matProj[2][3]=0.0; matExInv[0][0]=0.599925; matExInv[0][1]=-0.626774; matExInv[0][2]=0.497237; matExInv[0][3]=-124.039092; matExInv[1][0]=-0.770499; matExInv[1][1]= -0.285254; matExInv[1][2]=0.570054; matExInv[1][3]=-203.965832; matExInv[2][0]=-0.215456; matExInv[2][1]=-0.725110; matExInv[2][2]=-0.654060;matExInv[2][3]=360.000907; matExInv[3][0]=0.0; matExInv[3][1]=0.0; matExInv[3][2]=0.0; matExInv[3][3]=1.0;
Salut,
bon ta matrice de transformation a l air correcte : Les vecteurs directions sont normalisés et perpendiculaire entre eux. Par contre la composante de translation z de ta matrice est positive (360...) or le repere caméra est orienté vers les z negatif, il y a peut etre un probleme de ce coté. Ou ce situe le modele que tu essaie de rendre dans l univers ?
Il va peut etre falloir convertir le repere que tu utilises en repere openGL (la camera orienté vers les z negatif, x vers la droite, y vers le haut).
Concernant la matrice de projection, essaie avec une autre matrice de projection dans un premier temps (avec gluPerspective) pour pouvoir bien regler la matrice de transformation deja.
La tienne ne me parait pas correcte :
Concretement tu ne doit pas ajouté la composante z aux composantes x et y lors de la projection. Le z est utilisé en interne en divisant x et y par w (qui lui est setté a -z). Regarde la tete d une matrice de projection generé avec gluPerspective ici par exemple
salut,
le problème c'est que je ne sais pas l'orientation du repère utilisé par l'outil de calibrage de la camera http://research.graphicon.ru/calibra...toolbox-5.html. J'ai remarqué que toutes les composantes z de l'inverse de mes matrices des paramètres extrinsèques ont des signes positifs. Comment devrai-je faire pour régler l'orientation du repère caméra ?