vins-mobile程式碼解析3:drawAR
阿新 • • 發佈:2018-12-13
AR功能主要流程是:先檢測平面,然後計算AR物體(box)的各個頂點3d位置,然後寫程式把每個頂點投影到相平面,用cv的多邊形填充功能來繪製到照片上面。
- 先求一個相機朝向的vector:w_cam_z
-
findGround
-
輸入數當前滑窗中所有的3d點
-
把所有點按照高度劃分為30層
-
取出點最多的那一層作為平面
-
-
drawGround
-
只有在平面中的點數大於28的時候才畫地面
-
先把所有點投影到相平面
-
用2d的Delaunay生成這些點的3角格子
-
把每條邊都畫到照片上
-
-
drawBox
-
把所有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:盒子三個軸的方向,代表盒子的朝向
-
-
-
長按後標識被按住盒子