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

一、前言  
        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();    } 
}@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"); 
运行之后会开启摄像头。  

欢迎联系: 
 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值