首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Geometry -> OpenGL

Geometry -> OpenGL
EN

Stack Overflow用户
提问于 2010-08-27 22:44:27
回答 1查看 430关注 0票数 2

我无法在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术语中,它将如下所示(少量抽象代码):

代码语言:javascript
复制
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模式或其他模式下我能做什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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投影。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3585314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档