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 可以检测其环境光线的相关信息,并为你提供给定摄像头图像的平均光强度和色彩校正。此信息让你能够使用与周围环境相同的光照来照亮你的虚拟物体,提升它们的真实感。

Google提供了可从多个开发平台(Android [ Java ],Web [ JavaScript ],Unreal [ C ++ ]和Unity [ C# ])访问的ARCore ,从而为开发人员提供了足够的灵活性和选项,可以在各种平台上构建应用程序。

在本文中,我们将重点介绍如何设置Android开发工具并为Android构建ARCore应用程序。

Step 1:安装Android Studio

Android Studio是用于编码和部署Android应用程序的开发环境。因此,它包含构建和将应用程序部署到Android设备所需的核心工具集。毕竟,ARCore需要安装到物理设备上才能进行测试:

1. 访问https://developer.android.com/studio。

2. 单击绿色的“ 下载ANDROID STUDIO”按钮。

3. 同意条款和条件并按照说明进行下载。

4. 文件下载完成后,为你的系统运行安装程序。

5. 请按照安装对话框上的说明进行操作。如果要在Windows上进行安装,请确保设置了一个易于记忆的安装路径,以后可以轻松找到它,如以下示例所示

6. 单击其余对话框以完成安装。

7. 安装完成后,可以选择启动程序。确保选择了启动Android Studio的选项,然后单击 Finish

Android Studio内嵌OpenJDK,意味着我们至少可以省略在Windows上安装Java的步骤。

我们已经安装了Android Studio,但还没有完成。我们仍然需要安装对于构建和部署必不可少的SDK工具。如下所示:

1. 如果以前从未安装过Android SDK,则在Android Studio首次启动时会提示你安装SDK,如下所示:

2. 选择SDK组件,并确保再次将安装路径设置为众所周知的位置

Step 2:安装ARCore

当然,为了使用或构建任何ARCore应用程序,我们将需要为所选平台安装SDK。按照给定的说明安装ARCore SDK:

我们将使用Git直接从源代码中提取我们需要的代码。可以在https://git-scm.com/book/en/v2/Getting-Started-Installing-Git上了解有关Git以及如何在平台上安装Git的更多信息,  或使用Google搜索:开始安装Git。确保在Windows上安装时,选择默认值,然后让安装程序设置PATH 环境变量。

1. 打开命令提示符或Windows Shell,然后导航到Android(C:Android在Windows上)安装文件夹。

2. 输入以下命令:

git clone https://github.com/google-ar/arcore-android-sdk.git

3. 这将下载ARCore SDK并将其安装到名为的新文件夹中  arcore-android-sdk,如下图所示:

Step 3:在手机上安装ARCore服务

现在,在我们的开发环境中安装了ARCore SDK之后,我们就可以在测试设备上安装ARCore服务了。使用以下步骤在你的设备上安装ARCore服务:

1. 通过执行以下操作,获取移动设备并启用开发人员和调试选项:

(1)打开设置app

(2)选择系统

(3)滚动到底部,选择关于手机

(4)再次滚动到底部,点击Build number seven times

(5)回到前面的屏幕,在底部附近选择Developer options

(6)选择USB调试

2.https://github.com/google-ar/arcore-android-sdk/releases/download/sdk-preview/arcore-preview.apk

将ARCore服务APK下载到Android安装文件夹

3.  用USB连接你的移动设备。如果这是你的第一次连接,则可能需要等待几分钟才能安装驱动程序。

4. 返回命令提示符或Windows Shell并运行以下命令:

adb install -r -d arcore-preview.apk
//ON WINDOWS USE:
sdkplatform-toolsadb install -r -d arcore-preview.apk

Step 4:构建和部署

既然我们已经完成了上述所有繁琐的安装工作,现在就可以构建一个示例应用程序并将其部署到你的Android设备上了。让我们回到Android Studio,按照以下步骤开始:

1. 浏览并选择Androidarcore-android-sdksamplesjava_arcore_hello_ar文件夹,如下所示:

2. 单击 OK。如果这是你第一次运行此项目,则将遇到一些依赖项错误,例如此处的错误:

3. 为了解决错误,只需单击错误消息底部的链接即可。这将打开一个对话框,提示你接受然后下载所需的依赖项。继续单击链接,直到看不到其他错误为止。

4. 确保你的移动设备已连接,然后从菜单中选择运行 。这应该会在你的设备上启动该应用程序,但是你可能仍需要解决一些依赖性错误。只要记住单击链接即可解决错误。

5. demo运行效果如下图:

Step 5:关于代码

现在,让我们通过研究源代码来仔细查看应用程序的主要部分。请按照给定的步骤在Android Studio中打开应用程序的代码:

1. 在“ 项目”窗口中,找到并双击HelloArActivity,如图所示:

2. 加载源代码后,滚动代码至以下部分:

private void showLoadingMessage() {runOnUiThread(new Runnable() {@Overridepublic 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年职场人获得混合现实、人工智能、游戏开发、大数据等能力。

ARCore系列教程(1)---创建第一个原生AR应用相关推荐

  1. maven web项目导入sts_Spring Boot2 系列教程(二)创建 Spring Boot 项目的三种方式

    我最早是 2016 年底开始写 Spring Boot 相关的博客,当时使用的版本还是 1.4.x ,文章发表在 CSDN 上,阅读量最大的一篇有 43W+,如下图: 2017 年由于种种原因,就没有 ...

  2. BI之SSAS完整实战教程3 -- 创建第一个多维数据集

    上一篇我们已经完成了数据源的准备工作,现在我们就开始动手,创建第一个多维数据集(Cube). 文章提纲 使用多维数据集向导创建多维数据集 总结Cube设计器简介 维度细化 总结 一.使用向导创建多维数 ...

  3. stm32cubemx生成不了keil工程文件_STM32CubeMX系列教程03_创建并生成代码工程

    说明: 本文原创作者『strongerHuang』 首发于微信公众号『嵌入式专栏』,同时也更新在我的个人网站:EmbeddedDevelop 标签:STM32. STM32CubeMX. LL库. H ...

  4. 【Python】Python系列教程-- Python3 编程第一步(十八)

    文章目录 前言 打印字符串: 输出变量值: 定义变量并进行简单的数学运算 使用 for 循环打印数字 0 到 4: 根据条件输出不同的结果: end 关键字 前言 往期回顾: Python系列教程–P ...

  5. Dreamweaver2021安装教程与创建第一个网页

    下载地址: https://pan.baidu.com/s/13EIiv4etSzjqRrMWDQp4-Q 提取码:b390 一.解压DW2021文件: 二.以管理员身份运行: 三.更改默认安装位置, ...

  6. NetworkX系列教程(1)-创建graph

    小书匠Graph图论 研究中经常涉及到图论的相关知识,而且常常面对某些术语时,根本不知道在说什么.前不久接触了NetworkX这个graph处理工具,发现这个工具已经解决绝大部分的图论问题(也许只是我 ...

  7. Nodejs 菜鸟教程学习-创建第一个应用

    注:为了解学习,都是参照http://www.runoob.com/nodejs/nodejs-tutorial.html书写,做下笔记. 对于Nodejs开发来说,在开发一个应用时,我们不仅仅是实现 ...

  8. 涂鸦Zigbee SDK开发系列教程——1.创建产品

    使用涂鸦模组进行产品开发主要有三种不同的方式: 零代码开发:涂鸦提供可视化功能配置界面,无需任何编程经验,只需在线配置好产品的功能,即可完成固件开发,快速完成产品智能化. MCU SDK开发:在 MC ...

  9. Electron系列教程——第二篇:第一个示例

    Electron系列教程--第二篇:第一个示例 一.楔子 在正式开始音乐播放器项目之前,还需要来个简单的案例,以便更好的理解Electron.如果你已经使用过Electron,可以跳过这篇. 本篇将实 ...

最新文章

  1. repeater填充html,使用动态绑定到对象列表的ASP.NET Repeater创建HtmlTable
  2. 最全高考分数线出炉!!查了分后,这届学生为了过线真是太拼了.......
  3. jdk8 Function
  4. 远程服务器,你不得不知道的命令行操作(一)
  5. B - Dungeon Master
  6. ajax提交表单序列化(serialize())数据
  7. 机器人赛文_动漫中机器人赛文与真正的赛文奥特曼相比,谁更厉害呢?
  8. 论文笔记:Deep neural networks for YouTube recommendations
  9. cacti不能实时刷新流量图_解决Cacti无法正常监视超过100M以上流量的问题
  10. 0基础学SQL-Task02 SQL基础查询与排序(共7节)
  11. 数梅派4b 显示器_无显示器配置树莓派4B
  12. 图层重命名快捷键_ps怎么给图层(批量)重命名的方法
  13. 2020 Q4营收环比增长27.5%,前程无忧找回增长节奏
  14. 第2章 构建自定义语料库
  15. 模块学习2:基于PELCO-D协议对云台进行定点控制
  16. 记录极致cms当前位置间隔符号替换
  17. Emmet语法的使用
  18. 贪吃蛇大作战【C++游戏】
  19. WAMP的安装与配置
  20. 如何制作翻页的电子书?

热门文章

  1. netstat 命令详解及实现原理
  2. 立体声拓展插件-Type Writer Audio X 1.3.1 WiN-MAC
  3. ZED-F9K使用:录制数据+地图查看
  4. Excel 制作散点图并添加趋势线
  5. 计算机组成原理期末考试试题及答案
  6. python处理文档对象【三方库—lxml】
  7. python第三方安装包总结
  8. Nsight compute ---- Memory Chart
  9. 硬盘位置不可用无法访问X:/指定不存在的设备?
  10. 在不同的浏览器下FORM及它的小伙伴们默认样式的CSS属性值是不完全一致