[关闭]
@SR1s 2017-09-03T23:34:32.000000Z 字数 1850 阅读 2727

Android ARCore 指南

ARCore



深入了解ARCore

ARCore如何使用摄像头?

ARCore SDK里并没有直接使用常见的Camera或Camera2组件。TangoCameraNativeLoaderTangoJNINative是它在Java层操作摄像头的接口。

PURE_JAVA_PATH隐藏的野心

TangoClientLibLoader内定义了一个静态变量PURE_JAVA_PATH,反编译出来的SDK代码里,经常看到用这个变量来判断调用哪种实现。

既然是变量,那就有赋值的地方。赋值的地方在TangoClientLibLoader的静态代码块里:

  1. PURE_JAVA_PATH = VERSION.SDK_INT >= 24;

可以看到,区分两种实现的标准很简单,API等级。目前官方称只支持Android N以上的版本,即目前只会运行true的实现。这个实现区别于false的点在于,true不需要加载native so,而false需要加载/data/data/com.projecttango.tango/libfiles/目录下的libtango_client_api.so

也就是说,对于API 24以下的平台,ARCore也是有野心要去做支持的。

估计本来Google是想搞个黑科技,弄个能兼容绝大多数手机,而非特定系统版本的SDK,类似于support包一样的东西。结果苹果突然发力ARKit,把Google逼急了,只能先弄出一套支持Android N 以上的SDK安抚下Android 开发者。


ARCore 学习过程思考

此篇内容为学习ARCore过程中遇到的问题的思考总结,仅供个人学习、记录、参考使用,如有纰漏,还请留言指正。

Q: 为何ARCore SDK直接接管了摄像头输入

Q: 为何ARCore SDK直接定义了投影、透视矩阵

A: ARCore SDK 本质上是通过摄像头对现实世界进行建模,即通过从摄像头获取到的图像数据,构建出现实世界的数字化表示,在应用里还原现实世界的坐标系。有了这个坐标系,我们可以往这个坐标系上添加虚拟物体。这个虚拟物体需要通过投影、透视矩阵才能观察到。

即:

ARCore -> 建模得到现实世界坐标系 -> 往这个坐标系放置物体 -> 通过投影、透视矩阵观察这个物体

通常使用AR的时候,会把现实世界和虚拟世界结合起来进行绘制和显示。倘若不对现实世界进行显示,则可以理解为一个使用现实信息进行辅助的VR。有点类似HTC VIVE的 VR 效果,即对现实世界有一定的感知。

另:游戏开发里,Camera是一个很基础的概念。在ARCore里,这个Camera可以说是和设备的Camera合为一体了。设备的位置变动影响了真实的Camera,相应的也影响了OpenGL世界里的Camera,ARCore会更新Camera相应的矩阵信息。

Q: ARCore SDK 和 QQ AR 有什么不一样

A: ARCore SDK 提供了AR 开发的核心能力:运动追踪、环境感知、光照估计。这三个能力赋予了应用对现实环境的感知能力。本来应用对环境是无从感知的,但现在通过ARCore,应用能知道现实世界是怎样的:哪里有平面,设备离平面的距离有多少,设备在现实空间中的位置,设备在空间中的运功轨迹,现实世界当前的光照条件如何。这是很基础很厉害的能力。

QQ AR则仅具备非常有限的运动追踪、环境感知能力。而光照估计能力则没有。QQ AR 仅能够通过识别特定图像,在这个图像的基础上进行建模。一旦脱离了这个特定图像,一旦脱离了这个图形,则完全丧失了运动追踪和环境感知能力。

Q: ARCore 是内部自管理的吗?脱离了GLSurfaceView是否依旧能自行运行?

A:

Q: ARCore学习开发过程中,最重要的概念是什么?

A: ARCore学习的过程中,有几个概念需要特别注意,这个在官方文档中没有提到,在游戏开发,OpenGL使用的过程中却相当常见,没有相关基础的话,会在开发的时候蒙圈。

第一个概念:坐标系。

第二个概念:投影、透视、视图矩阵

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注