Mastering Opencv ch3: markerless AR(三)

本文详细介绍了在无标记AR技术中,如何利用OpenGL渲染三维目标。内容包括OpenGL的初始化、设置正交投影、绘制背景、构建透视矩阵及视景转换。还提供了在Linux环境下运行相关代码的步骤。
摘要由CSDN通过智能技术生成

前面两篇求出了模板图像在相机坐标系的位姿变换矩阵,那么现在就有了透视矩阵(相机内参数,失真参数),和外参数(视景矩阵:位姿矩阵(旋转矩阵和平移矩阵)),这就基本把虚拟三维物体如何投射在显示屏幕上的变换矩阵基本确定了。
四要素:
1、 相机拍摄的最新的图像
2、 相机标定的矩阵
3、 3D的模式姿态(如果需要显示)
4、 与OpenGL相关的内部数据(纹理ID,等等)
下面分析下OpenGL是如何渲染一个三维目标。
1:OpenGL初始化。

ARDrawingContext drawingCtx("Markerless AR", frameSize, calibration);//这个应该是OpenGL初始化的阶段。

在ARDrawingContext.cpp中是这个函数的具体实现:

//在OpenGL的初始化中,调用namedWindow使用最后一个参数调用cv::WINDOW_OPENGL,把OpenGL接口到highgui的模块中,设置窗口大小。
//然后调用setOpenGLContext建立窗口关联(参数就是窗口名称),为了在这个窗口上画虚拟物体,需要使用回调函数,建立方法就是setOpenGLDrawCallback,
//注意这个函数第一个参数是窗口名称,第二个参数是回调函数名,第三个参数是回调函数的参数,因为我这里回调函数onDraw是无参函数,所以这里为NULL
//在需要重绘的时候还要调用updateWindow
ARDrawingContext::ARDrawingContext(std::string windowName, cv::Size frameSize, const CameraCalibration& c)
  : m_isTextureInitialized(false)
  , m_calibration(c)
  , m_windowName(windowName)
{
    // Create window with OpenGL support
    cv::namedWindow(windowName, cv::WINDOW_OPENGL);//OpenGL接口到highgui的模块中

    // Resize it exactly to video size
    cv::resizeWindow(windowName, frameSize.width, frameSize.height);//设置窗口大小,

    // Initialize OpenGL draw callback:
    cv
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值