通过修改虚实结合Demo源码,改变立体AR Logo图标颜色、初始角度、缩放比例,关闭点云和平面显示效果等。

什么是WorldAR?

HUAWEI AR Engine 是一个在华为设备上构建增强现实应用程序的平台。WorldAR是AREngine的子系统,允许您的应用:

一款可以在华为手机上运行的应用程序,该程序可以通过相机扫描周围环境,识别环境中的平面,在平面上放置一个虚拟物体,并且进行选中和拖拽的操作。

硬件要求

开发计算机
一个AREngine支持的设备,通过USB连接到PC,保证后置摄像头工作正常。

软件要求

Android Studio 3.1或者更高版本
最新版本的AREngine SDK:可以从开发者联盟上获取。
最新版本的AREngine APK:可以从华为应用市场上获取,并安装到手机上。

打开WorldAR Java示例程序

  1. 从下载的HUAWEI_AR_Engine_SDK 中的java目录解压出JavaSample
  2. 启动AndroidStudio,然后选择"打开现有的AndroidStudio项目"
  3. 导航到JavaSample目录,然后确定打开,等待Android Studio完成项目同步

现在,您拥有了完成本教程所需的所有软件。

更新您的AndroidManifest.xml

在同步完成的项目中,包含了多个不同的module。本次,我们仅使用其中的WorldAR_Java。打开该module的AndroidManifest.xml。

设置为AR Required并且具有Camera权限和连接网络权限。

<!--声明相机权限和网络访问权限--> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.INTERNET" /> <application ... <!--声明AR必须--> <meta-data android:name="com.huawei.ar.engine" android:value="required" /> </application>

编译并运行示例程序

  1. 本Codelab需要真实的物理设备运行(不支持Android Emulator)。设备需要通过USB连接到开发机器。(打开开发者选项,启用调试,待手机上跳出信任连接的主机时,点击同意)
  2. 可以在命令行中输入如下命令以验证设备是否连接到计算机:adb devices 这将连接到设备并输出设备的序列号。
  3. 在Android Studio中,选择WorldAR_Java模块,并点击运行。然后选择您的设备作为部署目标,然后单击"确定"以在设备上启动示例应用程序。

  1. 在您的设备上允许请求的权限,这将允许应用设备启动后置相机启动扫描周围的环境。扫描出平面以后,点击平面,即可在真实世界中添加虚拟物体。您可以点击添加的虚拟物体,然后在平面上进行拖拽操作。

修改虚拟物体渲染参数

在WorldAR_Java的VirtualObject.java中添加更新缩放系数和旋转度数的接口,并且在渲染前提供更新的值:

public void updateScaleFactor(float scaleFactor){ // 由外部设置缩放系数,在0.15f的缩放的基础上进行再次缩放 mScaleFactor = 0.15f * scaleFactor; } public void updateRotation(float angle) { // 由外部设置旋转角度 mRotationAngle = angle; } public float[] getModelAnchorMatrix() { float[] matrix = new float[UtilsCommon.MATRIX_NUM]; if (mAnchor != null) { mAnchor.getPose().toMatrix(matrix, 0); } else { Matrix.setIdentityM(matrix, 0); } float[] ret = new float[UtilsCommon.MATRIX_NUM]; Matrix.multiplyMM(ret, 0, matrix, 0, mModelMatrix, 0); // 将模型绕y轴旋转指定角度 Matrix.rotateM(ret, 0, mRotationAngle, 0f, 1f, 0f); // 将模型的x,y,z尺寸缩放指定的系数 Matrix.scaleM(ret, 0, mScaleFactor, mScaleFactor, mScaleFactor); return ret; }

在界面上添加SeekBar

在应用的主界面上添加两个SeekBar,分别用于缩放和旋转参数的控制。在res/layout/activity_main.xml中添加如下代码:

<SeekBar android:id="@+id/scaleSeekBar" android:layout_width="300dp" android:layout_height="40dp" android:layout_alignParentEnd="true" android:min="1" android:max="400" android:progress="150"/> <SeekBar android:id="@+id/rotationSeekBar" android:layout_width="300dp" android:layout_height="40dp" android:layout_below="@id/scaleSeekBar" android:layout_alignParentEnd="true" android:min="0" android:max="360" android:progress="180"/>

由用户控制旋转和缩放系数

在WorldAR_Java的MainActivity获取到对应的SeekBar,然后设置到对应的当前选中的模型上:

mScaleSeekBar = findViewById(R.id.scaleSeekBar); mScaleSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (mSelectedObj != null) { mSelectedObj.updateScaleFactor(progress / (float)150); } } ... }); mRotationSeekBar = findViewById(R.id.rotationSeekBar); mRotationSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (mSelectedObj != null) { mSelectedObj.updateRotation(progress); } } ... });

编译并运行修改后的程序

在Android Studio中点击运行,然后选择您的物理设备。您会在手机上看到应用开始扫描周围环境,扫描出平面以后,点击平面,即可在真实世界中添加虚拟物体。选中该虚拟物体,然后拖动界面上的seekbar,即可观察到模型在放缩和旋转。

干得好,你已经成功完成了codelab并学到了:

您还可以查看示例中的其他demo程序以了解更多的AREngine的能力。

本Codelab中所用demo源码下载地址如下:

源码下载

已复制代码