vins-mobile代码解析3:drawAR

AR功能主要流程是:先检测平面,然后计算AR物体(box)的各个顶点3d位置,然后写程序把每个顶点投影到相平面,用cv的多边形填充功能来绘制到照片上面。

  • 先求一个相机朝向的vector:w_cam_z
  • findGround

    • 输入数当前滑窗中所有的3d点

    • 把所有点按照高度划分为30层

    • 取出点最多的那一层作为平面

  • drawGround

    • 只有在平面中的点数大于28的时候才画地面

    • 先把所有点投影到相平面

    • 用2d的Delaunay生成这些点的3角格子

    • 把每条边都画到照片上

  • drawBox

    扫描二维码关注公众号,回复: 3836090 查看本文章
    • 把所有box手动投影到相平面,然后手动多边形填充

    • Grounds其实是所有box的集合不是平面的

  • 相应对box的平移操作

    • 检查locationX和locationX_p是否一样

      • locationX在pan的回调函数中会被修改

      • 不一样说明用户出发了平移box事件

    • 检查点选的事哪个box

      • 把所有box的中心投影到相平面

      • 看相平面的中心和点选位置哪个最近

      • 通过屏幕上移动的距离计算对应的投影射线的旋转夹角,最后计算3d空间中的移动距离

      • 移动选中的box

  • 处理抓取操作进行的缩放

  • 双手指的旋转

  • 点击的添加新的box,条件是平面点要大于28

    • 投影平面中心点到相平面

    • 看是否附近有box,没有的话才进行下一步

    • 把box放到当前平面上

      • findPlane

        • 输入平面的点

        • 输出拟合的平面方程的4个系数

    • 盒子属性

      • ori :盒子的一个角点

      • gp.cox,gp.coy,gp.coz :盒子三个方向的边的另外一个端点的坐标

      • lix,liy,liz:盒子三个轴的方向,代表盒子的朝向

  • 长按后标识被按住盒子

猜你喜欢

转载自blog.csdn.net/ziliwangmoe/article/details/82931378
今日推荐