一、前言  
        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");


运行之后会开启摄像头。