我无法在 OpleGL 中得到正确的转换。
我有 point3D - P(X,Y,Z) 和投影矩阵 M,它等于 K*(R|T),其中
K - 相机校准矩阵
(R|T) - 点(物体)坐标系变换(R - 旋转矩阵,T - 平移向量)
结果,我们将点投影为 p = M*P
我知道 P,K,R,T,而且我不会用 OpenGl 术语计算 p。
在 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 模式或其他模式下我能做什么?