ARCore在Android Studio环境下简单入门及3D框架Sceneform关键概念

ARCore在Android Studio环境下简单入门及3D框架Sceneform关键概念

开发环境要求

安装 Android Studio 3.1 或更高版本以及 Android SDK Platform 7.0(API 级别 24)或更高版本。
最好使用支持ARCore的设备,ARCore 可以在运行 Android 7.0 (Nougat) 及更高版本系统的多种符合资格的 Android 手机上使用。目前支持的手机有谷歌pixel系列,三星S8以上,小米MIX2s,其他安卓7.0以上手机可以安装ARCore服务安装包尝试
目前支持的设备的完整列表
ARCore在Android Studio环境下简单入门及3D框架Sceneform关键概念_第1张图片

官方示例项目下载

hellosceneform项目及solarsystem项目
ARCore服务安装包

打开示例项目

在 Android Studio 中,打开 hellosceneform 示例项目。
该项目使用 Sceneform,这个 3D 框架可让 Java 开发者在不使用 Open GL 的情况下轻松地构建 ARCore 应用。

运行效果展示

运行前要确保自己的手机已经安装了ARCore服务

1.选择连接上电脑的手机选择OK后运行
ARCore在Android Studio环境下简单入门及3D框架Sceneform关键概念_第2张图片

2.运行项目后会在手机安装一个Hello Scemen
ARCore在Android Studio环境下简单入门及3D框架Sceneform关键概念_第3张图片

3.打开后会显示一个录像界面,跟着屏幕的操作对着地板移动手机进行扫描

4.扫描结束后会在地板放置锚点

5.点击锚点可以放置Android图形

Sceneform关键概念

Scnenform 是一个3D框架,可以让Android开发者不必学习3D图形和OpenGL就能使用ARCore。它包括一个高级场景图API,基于物理的渲染器,一个用于导入、查看和构建3D资产的 Android Studio插件,并且可以轻松地集成到ARCore内进行简单地 AR应用构建。
以下通过HelloSceneform 示例项目中地代码来说明Sceneform中的关键概念

添加一个ArFragment

Sceneform API 包括 ArFragment,可将其添加到 Android 布局文件,比如任何 Android Fragment。 例如,以下是 HelloSceneform项目中activity_ux.xml 的内容:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.google.ar.sceneform.samples.hellosceneform.HelloSceneformActivity">

  <fragment android:name="com.google.ar.sceneform.ux.ArFragment"
      android:id="@+id/ux_fragment"
      android:layout_width="match_parent"
      android:layout_height="match_parent" />

FrameLayout>    

Activity 启动并且布局扩展后,Fragment 会自动执行某些规定的检查:

 它会检查是否安装了兼容版本的 ARCore 并根据需要提示用户进行安装或更新。
 它会检查应用是否有权访问相机,并在其尚未获得授权时请求用户提供权限。

完成后,Fragment 会创建一个 ArSceneView(可通过 [getArSceneView()](/ar/reference/java/com/google/ar/sceneform/ux/BaseArFragment.html#getArSceneView() 访问)和一个 ARCore Session。

注:如果您不希望 Fragment 自动执行此操作(或许是因为您的应用需要请求更多权限),您可以按照 Sceneform solarsystem 示例应用中演示的那样直接使用 ArSceneView。 您需要执行运行时检查、请求权限、创建 AR 会话以及自行调用 setupSession()。

ArSceneView 将会话中的相机图像渲染到其表面上。 它还会在 Planes(使用默认 PlaneRenderer)被 ARCore 检测到并位于相机前面时将其突出显示。

创建一个可渲染对象

Renderable 是一个 3D 模型,包括可由 Sceneform 在界面上渲染的网格、材料和纹理。
Sceneform 提供三种创建可渲染对象的方式:根据标准 Android 微件、根据基本形状/材料以及根据 3D 资产文件(OBJ、FBX、glTF)。

hellosceneform项目中提供了一个Androdi小人的3D模型,存放在sampledate中:
ARCore在Android Studio环境下简单入门及3D框架Sceneform关键概念_第4张图片
hellosceneform是根据一个3D资产文件 andy.obj 创建可渲染对象,并在build.gradle 中将该资产转换为Sceneform可读取的规则

apply plugin: 'com.google.ar.sceneform.plugin'

sceneform.asset('sampledata/models/andy.obj',
        'default',
        'sampledata/models/andy.sfa',
        'src/main/res/raw/andy')

将资源加载为可渲染对象的方法是在hellosceneform项目中的HelloSceneformActivity:

ModelRenderable.builder()
    .setSource(this, R.raw.andy)
    .build()
    .thenAccept(renderable -> andyRenderable = renderable)
    .exceptionally(
        throwable -> {
        Log.e(TAG, "Unable to load Renderable.", throwable);
        return null;
    });

参考资料:谷歌ARCore开发者网站

原作者:sinat_33331037
原作者博客链接,后续相关内容会继续发布在原博客博客链接

你可能感兴趣的:(ARCore在Android Studio环境下简单入门及3D框架Sceneform关键概念)