以下内容译自官方文档,仅供个人学习、记录、参考使用,如有纰漏,还请留言指正。
原文地址:
开始ARCore的旅程前,理解一些基础概念将有助于接下来的深入学习。这些概念一起阐述了ARCore是如何使得虚拟物体能够展示在现实世界的表面上,或者说如何添加到现实世界中的位置上。
运动跟踪
当你的手机在现实世界中移动,ARCore通过一个称为并行测量映射(concurrent odometry and mapping, COM)的处理过程,来理解手机相对于现实世界的位置。ARCore通过检测摄像头捕获的图像数据的视觉差异点(即特征点),使用这些点来计算位置上的改变。这些视觉信息和设备上的IMU的惯性测量值一起,用于计算摄像头随着时间推移而变动的姿势(包括位置和姿势)。
通过把用于渲染的3D物体的虚拟世界的摄像机姿态对齐ARCore提供的设备上的摄像头的姿态,开发者能够从正确的透视角度来渲染虚拟物体。渲染出来的虚拟物体的图像可以覆盖在摄像头捕获的图像的上面,使得虚拟物体就像现实世界的一部分一样,呈现在屏幕上。
环境理解
ARCore通过持续的检测特征点和平面,提升它对现实世界的理解。
ARCore查找那些看起来像是在同一个水平表面上的特征点,像桌子上的特征点们,然后把识别出来的这些表面作为平面(Plane)提供给你的应用使用。ARCore还能检测每一个平面的边界,并把这些信息提供给你的应用。你可以使用这些信息来防止虚拟物体到这些平面上来。
由于ARCore使用特征点来识别平面,因此可能无法很好地识别那些表面没有纹理的平面,如纯白色的书桌。
光线估计
ARCore能够检测环境的光线,并提供当前图像的平均强度信息。这使得你能够用和环境同样的光照来照亮你的虚拟物体,提升AR内容的真实感。
人机交互
ARCore使用命中测试(Hit testing),接受一个相对于手机屏幕的(x, y)坐标(通过诸如点击或者其他你的应用支持的交互),投影一道光线到摄像机的世界视口,返回这道光线贯穿的任意平面和特征点,同时提供它们在世界里的姿态信息。这使得用户可以选择物体,或和环境中的物体交互。
锚定对象
随着ARCore对自身位置和周边环境的理解的提升,对应的姿态信息也会随之改变。当你想要放置一个虚拟物体时,你需要定义一个锚定(Anchor)点,让ARCore持续的追踪这个物体的位置。通常你需要基于命中测试返回的姿态信息创建一个锚定点,如上小节所述。这使得你的虚拟内容能够在设备移动的时候,依旧能相对于现实世界保持稳定。
深入学习
理解了上述的基础概念,接下来你可以把这些概念运用到构建AR应用的实战中去了。依照你的选择的开发平台,可以选择下面对应的资料进行进一步学习: