背景:该篇文章总结于在原生的工程中接入EasyAR的SurfaceTracking的过程中遇到的一些问题,有一些问题是知识性的问题,有一些问题是可以称之为是坑的问题。
关键词:
Android原生中有关OpenGL的渲染设置
EasyAR初始化失败
EasyAR照相机黑屏
在Android Studio中进行有关EasyAR矩阵的调试(矩阵数据变的很诡异)
如何在自己的引擎中进行设置EasyAR提供的Projection Matrix(投影矩阵)和View Matrix(观察矩阵)
点击人物无法命中,或者没有办法正确命中
低配机进入AR模式之后,拍摄的视频背景卡顿问题
1、Android原生中有关OpenGL的渲染设置
这一块内容其实和AR的东西不是很相关,但是一般来说,工程里面接入ARSDK的话。肯定是想绘制自己的虚拟人物,在移动平台上,OpenGL又是不可或缺的一个部分,所以这一部分应该是有一些可以借鉴的内容。
因为之前工程里面的ARSDK接入的是Vuforia的GroundPlane(以下简称Vuforia),所以按照Vuforia的官网提供的Android事例,自己工程中的结构完全按照其官网事例进行设置,包括里面的session控制Vuforia的生命周期以及子类View继承GLSurface来进行渲染的设置。
所以接入EasyAR-SurfaceTracking(以下简称EasyAR)的第一步,就是先去将Vuforia从原来的工程中移除掉。
这里吐槽一下自己的感想:Vuforia关于这里的结构的设计,真的很严密,有专门控制功能的类,有专门掌管Vuforia生命周期的类,有专门进行渲染设置的类,以及功能的逻辑,错误的判断等真的很值得借鉴。相比于EasyAR,就会更加的简易,也更容易我们去理解,对于我这种新手还是比较友好的。
当然也可以把EasyAR的结构设计成和Vuforia的一样,但是有点小题大做了,因为相比于EasyAR,Vuforia里面的概念还是比较多,设备跟踪、智能地形等等,但是程序还是应该越简单越好(大佬说的,照做就是了)。
所以在我的程序里面,关于这里的设置就只有一个MainActivity.java、GLView.java、以及EasyAR官网提供的例子的中的HelloAR.java和BackGroundRender.java(最后一个文件名字我记不清了,就是用来渲染拍摄的视频流背景的那个文件)。
Tip:官网的例子中还有一个BoxRender.java的文件,用来渲染一个立方体,这个其实在接入的过程中可以留着,可以先去将盒子画出来,然后再去一步步的接入自己的渲染部分。然后完全接入的时候,再去将这部分删除掉就可以了。
EasyAR里面关于SurfaceTracking总共就只有三个文件:HelloAR(管理AR的相关接口),BoxRender(渲染盒子),BGroundRender(背景的渲染)。
下面说一下关于这几个文件结构的设计:
MainActivity.java文件里面是主要的Activity,并且只有这么一个Activity,负责进行EasyAR的最外层的管理,因为在我的工程里面,还有一些通过JNI和C++交互的部分,所以我将EasyAR最外层的管理放在这个类里面。
和Activity匹配的页面布局(XML文件)我使用的很简单,就只是写了一个进入AR的按钮,和一个退出AR的按钮,在这个XML里面,将XML的上下文配置为MainActivity,MainActivity类继承的是:Application类,没什么主义的地方。
在MainActivity的成员变量里面,有一个GLView类型的成员变量:mView。
在OnCreate方法里面,使用setContentView函数将这个成员变量mView设置为当前Activity的View视图。
这里其实我刚开始的时候不是很明白通过xml设置和通过这个View来设置有什么区别,总结一下:可以在某一些层面上将这个xml和mView理解为同一个东西,都是用来设置界面的长相的,只不过如果我们在代码里面一直使用代码来添加按钮,拖动条,进度条之类的,会让我们的代码文件显的特别的臃肿,所以此时,我们将所有有关控件的设置,都抽离出来,组成一个xml文件,这个文件里面只用来设置UI控件的样式,然后我们在代码文件