AR全新教程专栏--【ARCore】帮助开发者了解如何使用ARCore在Android平台构建AR应用。
关于ARCore
ARCore 是 Google 的增强现实体验构建平台。ARCore 利用不同的 API 让用户的手机能够感知其环境、理解现实世界并与信息进行交互。 ARCore 使用三个主要功能将虚拟内容与通过手机摄像头看到的现实世界整合:
支持的设备:ARCore 可以在运行 Android 7.0 (Nougat) 及更高版本系统的手机上。
-
Android 7.0 或更高版本 (个别型号需要更高的版本) -
运行在搭载 Google Play 应用商店的设备上 -
Google Play 应用商店需要网络链接才能更新 ARCore
在中国,设备不搭载 Google 应用商店。 但可以从以下应用商店中选择其一来安装 ARCore:
-
Xiaomi app store (小米应用商店) -
Huawei Apps Gallery (华为应用商店) -
OPPO APP Market (OPPO 软件商店) -
Samsung Galaxy Apps (三星应用市场) -
V-Appstore (vivo应用商店)
对于支持的具体手机机型:https://developers.google.com/ar/discover/supported-devices
工作原理
从本质上讲,ARCore 在做两件事:在移动设备移动时跟踪它的位置和构建自己对现实世界的理解。
ARCore 的运动跟踪技术使用手机摄像头标识兴趣点(称为特征点),并跟踪这些点随着时间变化的移动。将这些点的移动与手机惯性传感器的读数组合,ARCore 可以在手机移动时确定它的位置和屏幕方向。
除了标识关键点外,ARCore 还会检测平坦的表面(例如桌子或地面),并估测周围区域的平均光照强度。这些功能共同让 ARCore 可以构建自己对周围世界的理解。
借助 ARCore 对现实世界的理解,你能够以一种与现实世界无缝整合的方式添加物体、注释或其他信息。 比如可以将一只打盹的小猫放在咖啡桌的一角,或者利用艺术家的生平信息为一幅画添加注释。 运动跟踪意味着你可以移动和从任意角度查看这些物体,即使你转身离开房间,当你回来后,小猫或注释还会在你添加的地方。
1. 运动跟踪:当你的手机在现实世界中移动时,ARCore 会通过一个名为并行测距与映射(或 COM)的过程来理解手机相对于周围世界的位置。ARCore 会检测捕获摄像头图像中的视觉差异特征(称为特征点),并使用这些点来计算其位置变化。这些视觉信息将与设备 IMU 的惯性测量结果结合,一起用于估测摄像头随着时间推移而相对于周围世界的姿态(位置和方向)。
通过将渲染 3D 内容的虚拟摄像头的姿态与 ARCore 提供的设备摄像头的姿态对齐,开发者能够从正确的透视角度渲染虚拟内容。渲染的虚拟图像可以叠加到从设备摄像头获取的图像上,让虚拟内容看起来就像现实世界的一部分一样。
2. 环境理解:ARCore 会通过检测特征点和平面来不断改进它对现实世界环境的理解。ARCore 可以查找看起来位于常见水平或垂直表面(例如桌子或墙)上的成簇特征点,并让这些表面可以由你的应用用作平面。ARCore 也可以确定每个平面的边界,并将该信息提供给您的应用。可以使用此信息将虚拟物体置于平坦的表面上。由于 ARCore 使用特征点来检测平面,因此可能无法正确检测像白墙一样没有纹理的平坦表面。
3. 光估测:ARCore 可以检测其环境光线的相关信息,并为你提供给定摄像头图像的平均光强度和色彩校正。此信息让你能够佽cn-beijing.aliyuncs.com/cs/5606289-0c4deefaf9b2957e2cb1f556bcb30847">
3. 为了解决错误,只需单击错误消息底部的链接即可。这将打开一个对话框,提示你接受然后下载所需的依赖项。继续单击链接,直到看不到其他错误为止。
4. 确保你的移动设备已连接,然后从菜单中选择运行 。这应该会在你的设备上启动该应用程序,但是你可能仍需要解决一些依赖性错误。只要记住单击链接即可解决错误。
5. demo运行效果如下图:
Step 5:关于代码
现在,让我们通过研究源代码来仔细查看应用程序的主要部分。请按照给定的步骤在Android Studio中打开应用程序的代码:
1. 在“ 项目”窗口中,找到并双击HelloArActivity,如图所示:
2. 加载源代码后,滚动代码至以下部分:
private void showLoadingMessage() {
runOnUiThread(new Runnable() {
@Override
public void run() {
mLoadingMessageSnackbar = Snackbar.make(
HelloArActivity.this.findViewById(android.R.id.content),
"Searching for surfaces...",
Snackbar.LENGTH_INDEFINITE);
mLoadingMessageSnackbar.getView().setBackgroundColor(0xbf323232);
mLoadingMessageSnackbar.show();
}
});
}
3. 请注意文本"Searching for surfaces.."。选择此文本并将其更改为"Searching for ARCore surfaces.."。该showLoadingMessage功能是显示加载消息的助手。在内部,此函数调用runOnUIThread,依次创建的新实例,Runnable然后添加内部run函数。我们这样做是为了避免UI上的线程阻塞,这是主要的禁止。该run函数内部是设置消息传递Snackbar并显示消息的位置。
4. 点击运行,确保设备上改信息已更改。
下一部分我们通过Unity来构建一个ARCore应用!
公众号[三次方AIRX]:三次方数字化人才在线教育平台。帮助Z时代大学生和0-5年职场人获得混合现实、人工智能、游戏开发、大数据等能力。
|