Не могу получить правильное преобразование в OpleGL.
У меня есть point3D - P (X, Y, Z) и проекционная матрица M, которые равны K * (R | T), где
К - калибровочная матрица камеры
![alt text](https://i.stack.imgur.com/alJOE.gif)
(R | T) - преобразование системы координат точки (объекта) (R - матрица вращения, T - вектор перемещения)
В результате мы спроецировали точку как p = M * P
Я знаю P, K, R, T и обычно рассчитываю p в терминах OpenGl.
В терминах OpenCV это будет выглядеть следующим образом (небольшой код абстракции):
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)); /// <- !!!!
Как я могу перевести эту логику в OpenGl?
Как я могу установить GL_PROJECTION и что я могу сделать в режиме GL_MODELVIEW или как-то еще?