@SR1s
2017-09-03T23:34:32.000000Z
字数 1850
阅读 2727
ARCore
ARCore SDK里并没有直接使用常见的Camera或Camera2组件。TangoCameraNativeLoader
和TangoJNINative
是它在Java层操作摄像头的接口。
TangoClientLibLoader
内定义了一个静态变量PURE_JAVA_PATH
,反编译出来的SDK代码里,经常看到用这个变量来判断调用哪种实现。
既然是变量,那就有赋值的地方。赋值的地方在TangoClientLibLoader
的静态代码块里:
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过程中遇到的问题的思考总结,仅供个人学习、记录、参考使用,如有纰漏,还请留言指正。
A: ARCore SDK 本质上是通过摄像头对现实世界进行建模,即通过从摄像头获取到的图像数据,构建出现实世界的数字化表示,在应用里还原现实世界的坐标系。有了这个坐标系,我们可以往这个坐标系上添加虚拟物体。这个虚拟物体需要通过投影、透视矩阵才能观察到。
即:
ARCore -> 建模得到现实世界坐标系 -> 往这个坐标系放置物体 -> 通过投影、透视矩阵观察这个物体
通常使用AR的时候,会把现实世界和虚拟世界结合起来进行绘制和显示。倘若不对现实世界进行显示,则可以理解为一个使用现实信息进行辅助的VR。有点类似HTC VIVE的 VR 效果,即对现实世界有一定的感知。
另:游戏开发里,Camera是一个很基础的概念。在ARCore里,这个Camera可以说是和设备的Camera合为一体了。设备的位置变动影响了真实的Camera,相应的也影响了OpenGL世界里的Camera,ARCore会更新Camera相应的矩阵信息。
A: ARCore SDK 提供了AR 开发的核心能力:运动追踪、环境感知、光照估计。这三个能力赋予了应用对现实环境的感知能力。本来应用对环境是无从感知的,但现在通过ARCore,应用能知道现实世界是怎样的:哪里有平面,设备离平面的距离有多少,设备在现实空间中的位置,设备在空间中的运功轨迹,现实世界当前的光照条件如何。这是很基础很厉害的能力。
QQ AR则仅具备非常有限的运动追踪、环境感知能力。而光照估计能力则没有。QQ AR 仅能够通过识别特定图像,在这个图像的基础上进行建模。一旦脱离了这个特定图像,一旦脱离了这个图形,则完全丧失了运动追踪和环境感知能力。
A:
A: ARCore学习的过程中,有几个概念需要特别注意,这个在官方文档中没有提到,在游戏开发,OpenGL使用的过程中却相当常见,没有相关基础的话,会在开发的时候蒙圈。
第一个概念:坐标系。
第二个概念:投影、透视、视图矩阵