OpenGL中的3D渲染:模型/视图/投影与平移/旋转/相机矩阵

时间:2016-11-28 20:40:29

标签: opengl computer-vision augmented-reality

我想从相机中添加一个捕获的帧网格模型(比如说一个立方体)

我也知道有关放置多维数据集的位置的所有信息:

  1. 翻译矩阵 - 相对于相机
  2. 旋转矩阵 - 相对于相机
  3. 相机校准矩阵 - 焦距,主点等(内在参数)
  4. 如何将此信息转换为模型/视图/投影矩阵?

    要设置为这些矩阵的值应该是什么?

    例如,假设我想在屏幕上显示点[x,y,z,1], 那应该是这样的:[u,v,1] = K * [R | T] * [x,y,z,1],while:

    u,v是屏幕(或摄像头捕捉)中的坐标,并且:

    K,R和T分别是固有的相机参数,旋转和平移。

    如何将K,R,T转换为模型/视图/投影矩阵?

2 个答案:

答案 0 :(得分:2)

[R | T]将是您的模型视图矩阵,K将是您的投影矩阵。

模型 - 视图矩阵通常是一个矩阵。分离只是概念性的:模型从模型坐标转换为世界坐标,从世界坐标转换到相机(尚未投影)坐标。在相机和物体彼此独立移动的应用中,它是有意义的。另一方面,在您的情况下,可以认为相机是固定的,并且相对于相机描述了其他所有内容。因此,您只需要处理两个矩阵:模型视图投影

答案 1 :(得分:2)

假设您的相机内部矩阵来自OpenCV(http://docs.opencv.org/2.4/doc/tutorials/calib3d/camera_calibration/camera_calibration.html),那么如何初始化您的OpenGL投影矩阵: https://blog.noctua-software.com/opencv-opengl-projection-matrix.html

enter image description here
cx,cy,width和height以像素为单位

至于你的OpenGL模型 - 视图矩阵,它非常简单:

enter image description here
所以最后你的模型 - 视图 - 投影矩阵是:

foo+bar