归海一啸
管理员
管理员
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 喜欢达人
  • 原创写手
阅读:404回复:0

NVisionXR_Android教程一:从零搭建一个原生AR项目

楼主#
更多 发布于:2018-04-01 11:25
一、前言
       NVisionXR引擎是全球首款跨平台多兼容原生AR应用开发引擎,AR应用开发更高效。 更多请查阅NVisionXR系列教程汇总篇【原生AR开发必看】NVisionXR引擎教程汇总贴(不断更新中……)
本系列教程是介绍如何使用NVisionXR引擎开发原生Android项目,使用Android Studio 3.0.1。

二、SDK目录

|---- assets //nvisionxr 需要使用的资源库文件|---- nvisionxr
|---- nvisionxrDeps //nvisionxr 库的依赖库文件

三、在工程中使用 NVisionXR库

31将 nvisionxr 文件夹放入工程根目录下,将 nvisionxrDep 也放到工程根目录下3.2 在工程 settings.gradle 添加
include ':nvisionxr'include ':nvisionxrDeps:common'
include ':nvisionxrDeps:ijkplayer'include ':nvisionxrDeps:ijkplayer:java'
include ':nvisionxrDeps:ijkplayer:armv7a'


3.3 在工程 app 目录下的 build.gradle 里 添加
compile project(':nvisionxr')
compile project(':nvisionxrDeps:common')
compile project(':nvisionxrDeps:ijkplayer:java')
compile project(':nvisionxrDeps:ijkplayer:armv7a')
compile 'com.google.protobuf.nano:protobuf-javanano:3.0.0-alpha-7'

四、将 assets 文件夹放入放入工程 main 目录下

五、添加 NVSurfaceView
5.1 定义布局
在工程自定义的 View 布局 xml 里,添加 NVSurfaceView.
这里,你可以像添加 SurfaceView 一样添加 NVSurfaceView. 一个最简单的例子如下:
<com.nvisionxr.NVSurfaceViewandroid:layout_width="match_parent"
android:layout_height="match_parent" />
5.2 初始化 NVSurfaceView
在显示 nvisionXR 内容的 Activity 的 onCreate 方法里 首先,获取NVSurfaceView对象,
surfaceView = findViewById(R.id.nvsurface_view);然后,
//创建渲染 SurfacemSurfaceView.onCreate();
//设置资源加载管理mSurfaceView.setAssetManager(this.getAssets());
5.3添加 NVScenePlay首先,我们需要创建一个 NVScenePlay 类,如 FirstScenePlay.
public class FirstScenePlay extends NVScenePlay {public FirstScenePlay(String name) {
super(name);}
@Overridepublic void onCreate() {
super.onCreate();}
}
然后,我们需要用执行类 NVAppDirector 去注册这个 NVScenePlay。还是在 Activity 的 onCreate 方法里:
FirstScenePlay scenePlay = new FirstScenePlay("first_sceneplay");NVAppDirector.getInstance().addScenePlay("MAIN_SCENEPLAY", scenePlay);
MAIN_SCENEPLAY 代表了我们注册 FirstScenePlay 为初始启动 ScenePlay.注意:
NVSurfaceView 需要调用其生命周期方法如 onCreate, onResume, onPause, onDestroy

六、添加 Vuforia 功能

Vuforia 功能是 NVisionXR 引擎的插件功能,需要通过 NVAppDirector 的 addPlugin 方法进行添加.

NVAppDirector.getInstance().addPlugin(NVAppDirector.PluginType.AR_INPUT, "ar_input_plugin");

然后,创建一个 VuforiaWrapper 的实例并初始化它:

vuforiaWrapper = new VuforiaWrapper(this);vuforiaWrapper.init(String key);

由于 Vuforia 需要渲染自己的摄像机画面,所以需要对其 Surface 生命周期作一个监听,即调用以下语句:
mSurfaceView.addSurfaceCallback(vuforiaWrapper);
最后,在 Activity 的生命周期方法中,补充完 VuforiaWrapper 的生命周期方法。
@Overrideprotected void onResume() {    super.onResume();
   if(mSurfaceView != null)    {        mSurfaceView.onResume();    }
   if(vuforiaWrapper != null)    {        vuforiaWrapper.onResume();    }
}@Overrideprotected void onPause() {    super.onPause();
   if(mSurfaceView != null)    {        mSurfaceView.onPause();    }
   if(vuforiaWrapper != null)    {        vuforiaWrapper.onPause();    }
}@Overrideprotected void onDestroy() {    super.onDestroy();
   if(mSurfaceView != null)    {        mSurfaceView.onDestroy();    }
   if(vuforiaWrapper != null)    {        vuforiaWrapper.shutdown();    }}

另外,我们还需要添加Camera的权限。
注意,权限申请要在添加plugin之前:// 申请权限
if(!NVCameraPermissionHelper.hasCameraPermission(this)){
   NVCameraPermissionHelper.requestCameraPermission(this);
   return;
}

NVAppDirector.getInstance().addPlugin(NVAppDirector.PluginType.AR_INPUT, "ar_input_plugin");

运行之后会开启摄像头。

欢迎联系:


AR学院(www.arvrschool.com),从这里感触未来!

欢迎分享

游客

返回顶部