Je ne peux pas obtenir la bonne transformation dans OpleGL.Géométrie -> OpenGL
je point3d - P (X, Y, Z), et de la matrice de projection M, égale à K * (R | T) où
K - matrice de calibrage de la caméra
(R | T) - point (objet) de coordonnées de la transformation du système (R - matrice de rotation, T - vecteur de translation)
en conséquence, nous avons prévu le point que p = M * P
Je sais que P, K, R, T, et moi ne calculerons pas p en termes OpenGl.
En termes OpenCV il sera présente comme suit (petit code d'abstraction):
CvMat* R = cvCreateMat(4,4, CV_32F, getRotationData());
CvMat* T = cvCreateMat(4,1, CV_32F, getTranslationData());
CvMat* K = cvCreateMat(4,4, CV_32F, getCameraCalibrationData());
// (R|T)
R->data.fl[3] = T->data.fl[0];
R->data.fl[7] = T->data.fl[1];
R->data.fl[11] = T->data.fl[2];
R->data.fl[15] = T->data.fl[3];
CvMat M = cvMat(4,4, CV_32F);
// M = R*(R|T)
cvMulMat(K, R, &M);
CvMat* P = cvCreateMat(4,1, CV_32F, getTestedPoint3D());
cvMar p = cvMat(4,1, CV_32F); // result transformation
// p = M*P
cvMulMat(&M, P, &p);
// project
float z = p.data.fl[2];
float x = p.data.fl[0]/z;
float y = p.data.fl[1]/z;
printf("Point projection [%f,%f]", x, y);
cvDrawPonit(img, cvPoint(x,y), CV_RGB(255,0,0)); /// <- !!!!
Comment puis-je traduire cette logique OpenGl?
Comment puis-je définir GL_PROJECTION et que puis-je faire en mode GL_MODELVIEW ou autre?
J'ai récemment découvert que le fait de scinder la matrice Modelview en un modèle et une vue séparés m'a aussi amené à mieux comprendre le sujet. –