我无法在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模式或其他模式下我能做什么?
发布于 2010-08-27 23:44:21
投影取决于你的相机。使用http://www.opengl.org/sdk/docs/man/xhtml/gluPerspective.xml。FoV取决于使用的镜头(参见文档),宽高比取决于胶片(可能为4:3)
model = RxT,这一点您已经知道了。它是物体在世界空间中的位置
view =可能是你所说的K,但要注意它是一个4x4矩阵,而不是3x3矩阵!它是相机在世界空间中的位置和方向。
你可能会问:什么是世界空间?好吧,它是你想要的任何东西,只要你能在这些坐标中表达相机和物体的位置。
则projected_point =投影x视图x投影x点
MODELVIEW是视图x投影。
https://stackoverflow.com/questions/3585314
复制相似问题