ARcore使用Sceneform创建ARapp

ARCore框架可以通过OpenGL来进行使用,但是其代码相对来说较为复杂, 通过OpenGL来使用ARCore会非常麻烦, 对开发者非常不友好, 在去年的IO大会上谷歌推出了Sceneform框架来简化ARCore的使用操作。

这篇文章来简单介绍下如何使用sceneform来构建ARapp:

1.首先获取3D模型

首先获取3D模型, 一般来说每个3D模型通常被称为资产Asset, 它所承载的纹理或皮肤通常称为材质material。有许多免费的3D模型网站可使用,官方提供了一个很好的地方叫Poly。Sceneform支持渲染OBJ,FBX,gITF格式的模型。

2.在项目中配置Sceneform

要使用Sceneform需要在build.gradle的dependencies配置对其的依赖,

implementation "com.google.ar.sceneform.ux:sceneform-ux:1.7.0"

3.安装Sceneform工具插件

Android studio中在Plugins中中安装插件。搜素Google Sceneform Tools点击Install。
这个工具作用如下:

  1. 以将所有支持的3D模型导入到我们的项目中。
  2. 为模型自动配置gradle。每当导入模型时,需要注入gradle中的几个配置。
sceneform.asset('sampledata/model.obj',
        'default',
        'sampledata/model.sfa',
        'src/main/assets/model')
  1. 可视化3D模型,这个工具将为提供了一个3D查看器,在导入后将能够看到模型在应用程序中的样子。

4.导出资产

有了sceneform工具插件,就可以将资产导入到项目中了。为了保存所有数据,可以在项目app层级下面新建一个sampledata文件夹。将下载下来的内容(model.mtl和model.obj)复制到该文件夹下。现在需要将它们导入到Sceneform资产和二进制文件,这时候就要用到Sceneform插件了。右键单击model.obj -> Import Scenefrom Asset

通过导入,该插件会创建2个文件,model.sfa(Sceneform的资产描述)和model.sfb(Scenefrom二进制文件)。二进制文件将随APK一起打包进去,并保留在assets文件夹中。转换后的描述文件sfa不会被打包进APK,但是这个文件可以用来更改对象属性(如金属质感和模型大小之类),通过它来修改sfb。
ARcore使用Sceneform创建ARapp_第1张图片
如图点击上方finish按钮之后,gradle会自动构建资产,同时在sampledata中生成model.sfa,在asset文件夹中生成model.sfb。同时双击sfa文件,Android Studio会显示该模型。

代码部分

5.配置AndroidManifest

由于AR是显示与虚拟的结合,所以一定要获取相机权限,同时还要添加一个AR的feature来判断手机是否支持AR功能。同时要在< application>中添加元数据。


<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera.ar" android:required="true" />

<application
...
...>

<meta-data android:name="com.google.ar.core" android:value="required" />

...

application>

ARcore使用Sceneform创建ARapp_第2张图片

6.创建ARFragment

ARFragment为开发者封装了权限查询请求等操作,使用起来非常简单,只要直接在布局文件中插入fragment标签,并且对其name属性设置为com.google.ar.sceneform.ux.ArFragment ,其他的就可以像一个正常的fragment一样去设置其大小位置等属性了。

<fragment

    android:id="@+id/ux_fragment"

    android:name="com.google.ar.sceneform.ux.ArFragment"

...

/>

7.添加3D模型

前面的ARFragement已经检测到平面,这一步要在其之上放置之前获取到的3D模型。
例子见简书上关于利用ARcore构建ARApp的文章

你可能感兴趣的:(Android,Java,ARcore)