一、前言
NVisionXR引擎是全球首款跨平台多兼容原生AR应用开发引擎,让AR应用开发更高效。
本系列教程是介绍如何使用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 定义布局
在工程自定义的
这里,你可以像添加
一个最简单的例子如下:
<com.nvisionxr.NVSurfaceViewandroid:layout_width="match_parent"
android:layout_height="match_parent" />
5.2 初始化 NVSurfaceView
在显示
首先,获取NVSurfaceView对象,
surfaceView = findViewById(R.id.nvsurface_view);
然后,
//创建渲染
SurfacemSurfaceView.onCreate();
//设置资源加载管理
mSurfaceView.setAssetManager(this.getAssets());
5.3添加 NVScenePlay
首先,我们需要创建一个
public class FirstScenePlay extends NVScenePlay {public FirstScenePlay(String name) {
super(name);}
@Overridepublic void onCreate() {
super.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 = new VuforiaWrapper(this);vuforiaWrapper.init(“String key”);
由于
mSurfaceView.addSurfaceCallback(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(); }
}@Override
protected 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");
if(!NVCameraPermissionHelper.hasCameraPermission(this)){
NVCameraPermissionHelper.requestCameraPermission(this);
return;
}
NVAppDirector.getInstance().addPlugin(NVAppDirector.PluginType.AR_INPUT, "ar_input_plugin");
运行之后会开启摄像头。