- 创建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(); }}
- 创建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);}}
- 创建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能力实现虚实遮挡】
经验总结扩展阅读
-
发型不要再披头散发了,脸上有这5个特征的女生,披头发真的很丑
-
因为42岁温峥嵘近照瘦脱相,皮包骨似大头娃娃,面对蛋糕一口不吃
-
-
-
-
-
-
-
-
秋天来了,女性不想肚子鼓鼓,推荐以下食物,排毒减肥,抗衰老!
-
-
-
-
智商|“以油养肤”是在交智商税?最全网红护肤油测评,拿走不谢!
-
-
-
男子结婚前夕|男子结婚前夕,妻子消失无踪,6年后逛街偶遇,他终于明白了
-
-
-