当前位置: 首页 > Web前端 > HTML5

简单说说GoogleARCore客户端

时间:2023-04-05 14:51:40 HTML5

一、前言AR(AugmentedReality:增强现实)今年年初上映的一部电影:《头号玩家》,是一个模拟各种真实感受的虚拟游戏世界。当然,从我个人的理解,我把《头号玩家》里的场景划分为VR,大部分只是虚拟现实,把人融入虚拟世界,而AR则是把虚拟的东西融入现实世界;我们今天说的只是关于增强视力。当然,AR不仅仅是增强视觉,包括听觉、触觉、味觉、嗅觉等,利用虚拟的东西可以更真实地融入我们的现实世界;二、AR的基础核心思想简单介绍:1、在2D和3D空间中,跟踪用户的运动状态和轨迹,最终定位到他们的位置信息或者相关设备的位置信息,比如之前的:支付宝ARred信封,以及寻找宠物的游戏;ARCore工作时要做两件事,首先是追踪手机的运动轨迹,然后是建立它对现实世界的理解,针对现实的理解,定义现实的画像,平面,曲面,物体;主要技术:1.运动追踪:跟随相机透视成像的位置,进行位置捕捉。ARCore使用称为并发测距和映射的过程来了解手机与周围环境的相对位置。当手机在运动时,它会计算手机相对于现实世界的位置。Positionandorientation,ARCore会检测拍摄到的相机图像中的视觉差异特征(称为特征点),并利用这些点来计算其位置变化;2.环境感知(environmentalunderstanding):具体功能其实就是检测平面,或者说主要功能是检测平面,让虚拟物体在真实环境中的位置比较合理,物体不会悬浮在空中,或在斜坡上仍呈水平姿势,防止虚拟物体在水平面上倾斜等;识别时,如果是纯色,平面上没有物体,平面没有纹理,则识别困难;3、光线评估:ARCore可以判断和感知光源在现实世界中的位置,从而使虚拟物体在相应的方向形成阴影,从而增加虚拟物体在现实世界中的真实感。这是一个,另一个就是防止物体颜色比较亮,但是周围的环境比较暗。在这种情况下,可以自动调节物体的亮度(光强);三、ARCore功能介绍1、云瞄准点ArCore客户端:ARCore可以通过改变对自身位置和环境的理解来调整自己的姿态。如果我们想在ARCore环境中放置一个虚拟物体,我们必须首先确定一个锚点,以确保ARCore能够随着时间的推移持续跟踪物体的位置。附在附近锚点上的物体在整个AR体验中看起来会更逼真,因为瞄准点的定位使物体保持它们的位置和相对位置并相互摆出姿势,而无需继续使用正面瞄准点,及时放弃,有助于减少CPU资源消耗;所以理论上:如果将虚拟物体锚定到特定的可追踪物体上,则可以保证即使在设备移动时虚拟物体和可追踪物体之间的关系也能保持稳定性(例如:瞄准点定位到平面后成功,调整平面上的物体,增加或减少物体,不会影响虚拟物体相对于平面的位置,仍然使虚拟物体看起来像在这个平面上,但是,在一种情况下,当我移动平面或翻转平面时,对象不会跟随平面翻转)。Cloud:好的,这个东西其实可以在单机状态下用ArCore独立完成。为什么叫云点?其实里面还有一个数据共享功能。简单的说就是数据上传。某台设备可以上传锚点和附近的特征点,并发送到云端托管,在云端可以上传并分享给同一环境下的Android或iOS设备上的其他用户。这使得应用程序可以渲染连接到这些锚点的相同3D对象,让不同的用户体验相同的AR效果;云主播数据云数据有以下存储和访问限制:托管主播时上传到云端的原始数据可视化地图数据在7天后被丢弃。锚点是从存储的稀疏点图中在服务器端解析的。生成后,稀疏点图可用于一天的云锚解析请求。以前上传的地图数据永远不会发送到用户的设备。无法从稀疏点地图确定用户的地理位置或重建任何图像或用户的物理环境。在任何时候都不会在请求中使用视觉特征描述符来解析存储的锚点。2、增强图像(在我看来,图像增强功能其实就是在图像识别技术中加入了图像位置定位功能)。主要功能:提供一组图像。当相机捕捉图像时,它会返回图像的位置。响应式处理显示☆每个图像数据库最多可存储1000张参考图像的特征点信息。☆ARCore最多可以在环境中同时跟踪20张图像,但不能跟踪同一图像的多个实例。☆环境中的实物图像必须至少为15cmx15cm,并且必须是平整的(例如没有起皱或缠绕在瓶子上)☆跟踪实物图像后,ARCore会提供位置、方向和物理尺寸的估计。随着ARCore收集更多数据,这些估计会继续完善。☆ARCore不能跟踪运动图像,但可以在图像停止运动后继续跟踪。☆所有跟踪都在设备上完成,因此无需互联网连接。可以在设备端或通过网络更新参考图像,而无需应用更新。ArCoreSDK的tools目录下有一个arcoreimg.exe工具。这是一个命令行工具。其功能是获取一组参考图片,生成图片数据库文件:常用命令:(1)、检查图片的质量,并给出图片的评分(推荐使用评分为75或higher)arcoreimg.exeeval-img–input_image_path=xx/xx/a.png异常:警告:记录beforeInitGoogleLogging()被写入STDERRI121811:08:11.6655406900distribute.cc:92]Nokeypointstoprune.Failedtoget来自目标图像的足够关键点。(2)生成图片列表对应的图片数据库:arcoreimg.exebuild-db--input_images_directory=img--output_db_path=myimage.imgdb3,Sceneform(buildandrenderscene):场景构建和场景渲染,我们在Unity中听的比较多之前,它使用OpenGL。事实上,2017年ARCore刚出来的时候,还没有SceneformAPI。Sceneform使得Android开发者不必学习3D图形和OpenGL就可以使用ARCore。它包括一个高级场景图形API,模拟基于物理的渲染器,一个用于导入、查看和构建3D资产的AndroidStudio插件,并且可以轻松集成到ARCore中以实现简单的AR应用程序构建。Renderable(ModelRenderable类)是一个3D模型,包括可以由Sceneform在界面上渲染的网格、材质和纹理。Sceneform提供了三种创建可渲染对象的方法:从标准的Android小部件,从基本形状/材料,以及从3D资产文件(OBJ、FBX、glTF)。4、ARCode的使用:环境:AndroidStudio3.1及以上;SDK24(7.0)及以上;JDK1.8及以上;支持OpenGLSE3.1及以上;还需要安装一个辅助插件:集成:仓库地址引用allprojects{repositories{google()}}包依赖(功能的实现主要在ArCore中实现,依赖包只有)://需要使用java8构建compileOptions{sourceCompatibilityJavaVersion.VERSION_1_8targetCompatibilityJavaVersion.VERSION_1_8}dependencies{implementation"com.google.ar.sceneform.ux:sceneform-ux:1.6.0"}强制选择AR判断设备是否支持:publicstaticbooleancheckIsSupportedDeviceOrFinish(finalActivityactivity){if(Build.VERSION.SDK_INT<24){Log.e(TAG,"Sceneform需要AndroidN或更高版本");Toast.makeText(activity,"Sceneform需要AndroidN或更高版本",Toast.LENGTH_LONG).show();activity.finish();returnfalse;}ConfigurationInfoinfo=((ActivityManager)activity.getSystemService(Context.ACTIVITY_SERVICE)).getDeviceConfigurationInfo();StringopenGlVersionString=info.getGlEsVersion();if(Double.parseDouble(openGlVersionString)