已经是第7章节了,终于可以开始正式接触到我们梦寐以求的ARCore了,相信大家应该都有一点点小激动了吧。那么下面我们就开始讲解如何进行ARCore的开发。

一、Session简介


初看到Session,大家都摸不到头脑。最直接的解释,它是ARCore API的一个类com.google.ar.core.Session。它管理了AR系统的状态,有自己的生命周期,开始和停止访问摄像头图像帧的获取。

所管理AR系统状态,包含跟踪的Anchor信息、通过session.add(Pose)和session.removeAnchor(anchors)保存和删除。session.getAllPlanes()返回被检测到的平面、当前投影矩阵等。

当ARCore App退至后台,Activity调用onPause()方法时,也需要通过session.pause()暂停Session,来停止摄像机的图像获取并获取资源。在App呈现在前台的时候,onResume()方法中调用session.resume(Config)可以重新启用Session,获取摄像机图像等。

有了平面和虚拟内容位置等信息进行渲染。但是当手机的位置移动的时候,我们是如何保持绘制内容的“位置不变”的呢?这都是基于ARCore系统不断返回的图像帧、设备位置和朝向等信息。调用session.update()方法来获取最新的相机帧,更新设备的位置,更新被跟踪的Anchor信息,更新被检查的平面。

二、Config简介


Config,即ARCore API中com.google.ar.core.Config,保存了用于配置Session的设置。那么这个配置中都包含了什么呢?

  1. 光线评估子系统的行为Config.LightingMode,包含开启或者禁止光线评估。
  2. 平面检测子系统的行为Config.PlaneFindingMode,包含开启和禁止平面检测。
  3. update()的行为Config.UpdateMode。在大多数设备中,摄像头被配置每秒捕捉30帧。当调用update()从摄像机获取帧的时,没有新的相机图片包含两种行为:立即分会和阻塞等待。

另外前面提到过目前并不是所有设备都支持ARCore,session.isSupport(config)方法就能完成当前设备是否支持该ARCore的配置。

三、ARCore开发起步


了解了Config和Session的意义之后,正式开始ARCore开发。我们需要处理这么几件事情:

  1. ARCore设备支持检测:自定义或者创建默认Config,然后通过Session来检测当前设备是否支持当前ARCore配置。
  2. 处理Session生命周期和视图变化:

    • 在Activity的onPause()和onResume()生命周期回调中,处理Session生命周期。正确的开始和暂停相机获取图像,释放资源等。
    • 当手机屏幕变化等情况发生,导致GLSurfaceView大小变化。需要适当调整透视图矩阵和背景,设置纵横比和坐标缩放,用于UV坐标系和投影矩阵生成。保证变化后虚拟内容的正常渲染。

四、案例源码分析


了解了基本的概念和步骤后,我们来看看在Google的ARCore Demo中是如何处理的。
1. ARCore设备支持检测
com\google\ar\core\examples\java\helloar\HelloArActivity.java

public class HelloArActivity extends AppCompatActivity implements GLSurfaceView.Renderer {... ...private Session mSession;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);... ... //Sessoin类是ARCore API的主要入口,管理AR系统状态和处理Session生命周期,接收帧允许访问摄像头的图片和设备的PosemSession = new Session(/this);//创建默认的Config,平面检测,光线评估被启动,并且阻塞更新被选中。检查当前的设备是否支持ARCore,从这个Config创建SessionmDefaultConfig = Config.createDefaultConfig();if (!mSession.isSupported(mDefaultConfig)) {Toast.makeText(this, "This device does not support AR", Toast.LENGTH_LONG).show();finish();return;}... ...}
}

2.处理Session生命周期和视图变化
com\google\ar\core\examples\java\helloar\HelloArActivity.java

public class HelloArActivity extends AppCompatActivity implements GLSurfaceView.Renderer {... ...private Session mSession;@Overrideprotected void onResume() {super.onResume();//ARCore需要摄像机权限来操作。如果我们还没有Android M及以上得到运行时的权限,现在是一个向用户请求它的好时机if (CameraPermissionHelper.hasCameraPermission(this)) {showLoadingMessage();//使用默认配置恢复Session,如果Session没有开始或者被暂停,这个方法必须在App的UI线程中被调用。它将会启动Session,初始化相机和运动跟踪,当update()被调用的时候,将会产生帧。注意这个顺序很重要 - 在onPause()中看到该说明,相反的在这里也同样适用。mSession.resume(mDefaultConfig);//恢复渲染线程,如果有必要的话重新创建OpenGL上下文,它和onPause对应mSurfaceView.onResume();} else {CameraPermissionHelper.requestCameraPermission(this);}}@Overridepublic void onPause() {super.onPause();//注意这个顺序很重要 - GLSurfaceView首先暂停所以它不会再尝试查询Session。如果Session在GLSurfaceView。前被暂停,GLSurfaceView可能一直调用mSession.update()并且获取一个SessionPauseExceptionmSurfaceView.onPause();//暂停当前Session,这个方法将会停止相机反馈和释放资源mSession.pause();} @Overridepublic void onSurfaceChanged(GL10 gl, int width, int height) {GLES20.glViewport(0, 0, width, height);//通知ARCore Session视图大小被改变,所以透视矩阵和视频背景可以适当的调整。设置纵横比和坐标缩放,这个数据将会被使用UV坐标系,生成投影矩阵mSession.setDisplayGeometry(width, height);}
}

1.新技术,新未来!尽在1024工场。时刻关注最前沿技术资讯,发布最棒技术博文!(甭客气!尽情的扫描或者长按!)

2.完整和持续更新的《使用Android打开AR的开发大门—ARCore》文档,欢迎大家阅读!
https://www.kancloud.cn/p3243986735/arcore_develop/457951

ARCore:ARCore开发的起步相关推荐

  1. XFire WebService开发快速起步

    XFire WebService开发快速起步 环境: XFire-1.2.6 JDK1.5 MyEclipse 6.5 Tomcat-5.5.27 Windows XP Professional简体中 ...

  2. ARCore增强现实开发实战

    在本文中,我们将深入研究 Android AR 的世界,即增强现实,特别是 ARCore,谷歌用于构建 AR 体验的平台.我们将看到 ARCore 如何通过抽象出复杂的矩阵和矢量数学并为我们提供用于 ...

  3. iPhone软件开发完美起步

    本文将指导您如何进行iPhone软件开发,把您的创意通过编程变成现实.您将学会如何打造第一个iPhone程序,及其创意实施过程.GUI设计.编程等. 手机上的应用软件开发正在受到越来越多人的关注,软件 ...

  4. android 开发零起步学习笔记(三):Android权限标签uses-permission的书写位置

    场景 想获取手机内所有联系人.并且AndroidManifest.xml中也添加了 Xml代码   <uses-permission android:name="android.per ...

  5. android 开发零起步学习笔记(二十二):ANDROID应用ACTIVITY、DIALOG、POPWINDOW、TOAST窗口添加机制及源码分析(一)

    原文:http://www.cnblogs.com/shanzei/p/4654817.html 第一部分: ANDROID应用ACTIVITY.DIALOG.POPWINDOW.TOAST窗口添加机 ...

  6. 【ARCore 开发入门课程系列】六步带你着手打造优秀的 AR 应用

    在上节课中,我们对 AR 目前面临的五大挑战进行了梳理.这些技术挑战的解决方案仍在完善中,功能不断强大的 ARCore 让技术难题迎刃而解,同时也为开发者打造体验更好的 AR 应用插上了翅膀.本文将带 ...

  7. 深入浅出,ARCore开发原理

    作者:李超 前"跟谁学"直播研发高级经理 其实关注 ARCore也蛮久了,但一直没有腾出时间来写个总结.正好应朋友之约,我们今天就来好好聊一聊 ARCore. ARCore的历史以 ...

  8. arcore之路-unity开发从入门到实践_AR开发之路——准备工作

    由于现在支持AR功能的手机没有普及,讲AR开发的教程也少,所以要学习AR开发还是要花点成本的,当然也有好处,花了学费,才会逼着自己坚持学下去. 为了学习AR,Relax今天入手了一部华为Nova 3i ...

  9. 关于出版《AR Foundation增强现实开发实战(ARCore版)》(2022-09-15日更新)

       感谢各位读者的支持,书籍目前已上市各大电商平台. ----------- 2022年3月18日创建 ---------   在元宇宙科技浪潮推动下,增强现实(Augmented Reality, ...

最新文章

  1. Request请求用Cookie记录SessionId
  2. 分页数据的新展示方式---瀑布流
  3. [NOIP2018模拟赛10.19]只会暴力报告
  4. HTTP中response响应数据获取
  5. 32.ExtJS简单的动画效果
  6. 对软件测试的认识你了解多少
  7. Linux下的TCP/IP编程----IO复用及IO复用服务端
  8. host 'xx' is not allowed to connect to this MySql server
  9. Python导包、模块报错的问题
  10. PyCharm配置django环境
  11. ios运行html游戏,Objective-c / iOS – 使用Safari打开本地html文件
  12. 电脑开机提示计算机无法启动不了,电脑无法启动并出现“System Halted”如何解决?...
  13. Vue:Vue-cli2结合mavonEditor实现MarkDown编辑器
  14. 【SpringBoot】@springbootapplication 注解讲解
  15. PCI-E接口的学习
  16. Python-基础课-第二节-02-变量与常量
  17. 量子计算机、康威扭结、奥数AI,这是2020年计算机、数学的重大突破
  18. 森宇文化全授权代理《彩虹护卫队》亮相戛纳开启动漫全产业链布局
  19. 生成字体图标及其原理
  20. 矢量计算机和标量计算机

热门文章

  1. 强化学习之探索与利用(一)
  2. Win10怎么设置窗口护眼色
  3. 微心情:蝴蝶为花碎,花却随风飞
  4. app ui设计规范
  5. 小程序即将上线,现在就可以开发啦
  6. Minecraft 1.12.2模组开发(一) 配置ForgeMDK环境
  7. [转]Windows Mobile 常用键值(VK)对应表及系统文件夹简单介绍
  8. 基于多二维码识别的无人机运动真值获取
  9. 逆水寒服务器紫荆之巅有关消息,逆水寒ol:官方钦定19个热门服务器?四大服舞阳城门口人们为患!...
  10. 2023年河北医科大学临床检验诊断学考研分享