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:盒子三个轴的方向,代表盒子的朝向
-
-
-
长按后标识被按住盒子