频道栏目
首页 > 程序开发 > 移动开发 > Android > 正文
3D框架Sceneform关键概念及ARCore在Android Studio环境下的简单入门教程
2018-06-12 12:01:40      个评论    来源:sinat_33331037的博客  
收藏   我要投稿

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

开发环境要求

安装 Android Studio 3.1 或更高版本以及 Android SDK Platform 7.0(API 级别 24)或更高版本。

最好使用支持ARCore的设备,ARCore 可以在运行 Android 7.0 (Nougat) 及更高版本系统的多种符合资格的 Android 手机上使用。目前支持的手机有谷歌pixel系列,三星S8以上,小米MIX2s,其他安卓7.0以上手机可以安装ARCore服务安装包尝试

目前支持的设备的完整列表

这里写图片描述

官方示例项目下载

hellosceneform项目及solarsystem项目

ARCore服务安装包

打开示例项目

在 Android Studio 中,打开 hellosceneform 示例项目。

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

运行效果展示

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

1.选择连接上电脑的手机选择OK后运行

这里写图片描述

2.运行项目后会在手机安装一个Hello Scemen

这里写图片描述

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 android:layout_height="match_parent" android:layout_width="match_parent" tools:context="com.google.ar.sceneform.samples.hellosceneform.HelloSceneformActivity" xmlns:android="https://schemas.android.com/apk/res/android" xmlns:tools="https://schemas.android.com/tools">

  

</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中:
这里写图片描述
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;
 });
点击复制链接 与好友分享!回本站首页
上一篇:Java/Android 大文件获取SHA1防止内存溢出
下一篇:Android Broadcast Receiver机制的实例详解
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站