如何用AR Engine環境Mesh能力實現虛實遮擋( 二 )

  1. 創建SceneMeshDisplay類,用來渲染場景網絡
Public class SceneMeshDiaplay implements SceneMeshComponenDisplay{ //需要在init中實現openGL的一些操作 Public void init(Context context){} //在onDrawFrame方法中獲取當前對應的環境Mesh Public void onDrawFrame(ARFrame arframe){ARSceneMesh arSceneMesh = arframe.acquireSceneMesh();//創建一個用來更新數據的方法把arSceneMesh傳入進去updateSceneMeshData(arSceneMesh);         //arSceneMesh使用完之后需要釋放         arSceneMesh.release(); }     //實現這個方法用來更新數據     Public void updateSceneMeshData(ARSceneMesh sceneMesh){         //返回當前視角下環境Mesh頂點坐標數組         FloatBuffer meshVertices = sceneMesh.getVertices();         //返回當前視角下環境Mesh三角面片頂點索引的數組         IntBuffer meshTriangleIndices = sceneMesh.getTriangleIndices();     }}
  1. 創建SceneMeshRenderManager類 , 這個類來提供與外部場景相關的渲染管理器,
包括虛擬對象渲染管理
public class SceneMeshRenderManager implements GLSurfaceView.Render{ //初始化更新網絡數據和執行渲染的類 private SceneMeshDisplay mSceneMesh = new SceneMeshDisplay(); //初始化繪制虛擬對象的類 Private HitResultDisplay mHitResultDisplay = new HitResultDisplay(); //實現onSurfaceCreated()方法 public  void  onSurfaceCreated(){//需要給mSceneMesh 類和mHitResultDisplay類傳入 contextmSceneMesh.init(mContext);mHitResultDisplay.init(mContext);}//實現onDrawFrame()方法; public void onDrawFrame(){//用ARSession對象來配置camera 。mArSession.setCameraTexTureName();ARFrame arFrame = mArSession.update();ARCamera arCamera = arframe.getCamera();//把SceneMeshDisplay類需要的數據傳過去mSceneMesh.onDrawFrame(arframe,viewmtxs,projmtxs);}}
  1. 創建SceneMeshActivity用來展示功能
public class SceneMeshActivity extends BaseActivity{ //提供與外部場景相關的渲染管理器,包括虛擬對象渲染管理類 。private ScemeMeshRenderManager mSceneMeshRenderManager; //用來管理AR Engine的整個運行狀態, private ARSession mArSession;//需要初始化一些類和對象 protected void onCreate(Bundle savedInstanceState){ mSceneMeshRenderManager = new SceneMeshRenderManager();}//在onResume方法中初始化ARSessionprotected void onResume(){ //初始化ARSession mArSession = new ARSession(this.getApplicationContext()); //基于session參數創建ARWorldTrackingConfig對象 ARConfigBase config = new ARWorldTrackingConfig(mArSession); //需要把ARSession傳給SceneMeshRenderManager mSceneMeshRenderManager.setArSession(mArSession);//需要開啟mesh,用config調用setEnableItem方法config.setEnableItem(ARConfigBase.ENABLE_MESH | ARConfigBase.ENABLE_DEPTH);}}具體實現可參考示例代碼
了解更多詳情>>
訪問華為開發者聯盟官網獲取開發指導文檔華為移動服務開源倉庫地址:GitHub、Gitee
關注我們,第一時間了解 HMS Core 最新技術資訊~
【如何用AR Engine環境Mesh能力實現虛實遮擋】

推薦閱讀