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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.
SPARK
Moteur de particule C++ opensource avec modules de rendu OpenGL, Irrlicht et SFML
Non,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.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 major
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 dessus
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 (0 1 2 3 ) (4 5 6 7 ) (8 9 10 11) (12 13 14 15)
SPARK
Moteur de particule C++ opensource avec modules de rendu OpenGL, Irrlicht et SFML
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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é.
Partager