gpt4 book ai didi

c++ - 几何 -> OpenGL

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:00:10 26 4
gpt4 key购买 nike

我无法在 OpleGL 中获得正确的转换。

我有 point3D - P(X,Y,Z) 和投影矩阵 M,它等于 K*(R|T) 其中

K - 相机标定矩阵

alt text

(R|T)——点(物)坐标系变换(R——旋转矩阵,T——平移 vector )

因此我们将点投影为 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 模式或其他模式下我可以做什么?

最佳答案

投影取决于您的相机。使用 http://www.opengl.org/sdk/docs/man/xhtml/gluPerspective.xml . FoV 取决于使用的镜头(参见文档),宽高比取决于胶片(可能是 4:3)

model = RxT,你已经知道了。是物体在世界空间中的位置

view = 可能是你所说的 K,但要注意它是一个 4x4 矩阵,而不是 3x3 !它是相机在世界空间中的位置和方向。

您可能会问:什么是世界空间?好吧,随便你,只要你能在这些坐标中表达相机和对象的位置。

然后 projected_point = projection x view x projection x point

MODELVIEW 是 View x 投影。

关于c++ - 几何 -> OpenGL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3585314/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com