NVisionXR引擎基本介绍

NVisionXR引擎基本介绍  

一. 介绍  

1.1 NVisionXR是什么?  

            NVisionXR 引擎是全球首款跨平台 多兼容的 原生 AR 应用开发引擎 AR应用开发更高效。  

1.2 为什么是NVisionXR?  

              NVisionXR 引擎 是专门为AR应用开发而设计, 提供 一套 3D 渲染 引擎 AR 模块 接口,能够帮助开发者 更高效地开发原生 AR 应用。 它具有如下的特点:  
① 采用原生开发方式, 与原生应用结合好  
②  开发的应用包体小,更有利于AR产品推广  
③  学习成本低  
④ 专为AR应用开发而设计,兼容多款AR平台  

1.3 现有版本特性  

          NVisionXR 现有版本支持 3D渲染功能、多媒体功能以及AR跟踪功能。  

1.3.1 渲染功能特性  

模型渲染,包括模型贴图,模型骨骼动画  
灯光阴影,包括点光源,   平行光,   聚光灯  
运动,   支持 Bezier 曲线运动  
粒子系统,   集成了 particle universe  粒子系统库,能够实现酷炫的粒子动画  

1.3.2 多媒体功能特性  

NVisionXR 引擎集成了 ijkPlayer   从而能够实现在 3D 空间中渲染视频的功能。  

1.3.3 增强现实跟踪功能特性  

兼容 Vuforia 平台基本功能   能够识别多个 Marker 图片。  

 系统架构  

2.1 系统层级  


如上图所示,   NVisionXR 的框架在结构上大体分为三个层级 :  
最底层是渲染引擎和集成的一些第三方库。  
中间层是管理层,负责将底层提供的功能进行封装,组合,抽象,再以一种更加简便的形  
式提供给上层。  
上层是应用层,   它是用户进行应用开发直接对接的一层。  

2.2 MVC框架  


          NVisionXR 引擎应用层采用 MVC 的设计模式,这种设计模式更贴合原生应用开发的方式,使得开发更简便。如上图所示, NVisionXR NVWidget 类相当于 MVC View,  负责显示某个被渲染对象。 NVisionXR NVScenePlay 类相当于 MVC Controller   它负责管理及配置 NVWidget 所需要的数据。  
         
 基本概念  

3.1 坐标系  

      如上图, 分别 为左手坐标系和右手坐标系的示意图。  
      NVisionXR 采用右手坐标系,其 Z 轴为手机屏幕向外的方向。 NVisionXR 场景中的坐标系原点为 (0, 0, 0) 点。  

3.2 单位  

3.2.1 角度  
          NVisionXR 采用角度制,其范围为 0~360 度。  

3.2.2 尺度  

         物体大小的单位为 cm   可参考 3dmax ,默认的系统单位 cm 时,所表示的模型大小。  

. SDK常用类  

4.1 执行类 NVAppDirector  
         NVAppDirector NVisionXR 的执行类,它主要负责添加所需运行的场景 NVScenePlay,  添加功能插件及配置一些全局的功能属性。
          NVisionXR 在一启动的时候会进入到一个场景中,首次进入的场景为主场景,而随后切换的场景为普通场景。 NVisionXR 需要通过 NVAppDirector 来添加主场景和普通场景。用户创建的 NVScenePlay 只有被添加到 NVAppDirector 中才能被使用。  
         NVAppDirector 还可以添加一些功能插件,如 Vuforia AR 跟踪功能等。还可以配置一些全局的属性,如时候开启阴影等,同时 NVAppDirector 还承担了 NVisionXR 中派发任务的职责,如 NVScenePlay 生命周期阶段的派发和场景交互事件的分发等。  
           NVAppDirector 类似于 Android 开发里的 AndroidManifest.xml 或者 iOS 开发里的 info.plist  

4.2 上下文 NVContext  

         NVContext 是获取关于 App 全局信息的接口类。它允许用户能够获取相关的资源管理类 NVResoures, NVWorld 类等。  
        同时 NVContext 还提供了场景与场景之间跳转的接口 startScenePlay 方法,   即从当前的 NVScenePlay 场景跳转到其它的 NVScenePlay 场景。  
        以后 NVContext 会提供更多关于中间层功能的接口。  
4.3 Controller NVScenePlay  

        NVScenePlay 相当于 MVC 模式中 Controller 的作用,在该类中,我们可以添加场景中的内容。同时 NVScenePlay 还定义了一整套完整的生命周期流程:  
        onCreate 方法是我们创建每个 NVScenePlay 内容的地方,在这里我们会调用 addWidget, addAnimEffect 等方法。  
         onStart 方法是当 NVScenePlay 被激活将要进入的时候会被调用,这个时候 NVScenePlay 将要显示,此时 NVScenePlay 处于激活状态,   其内容还没有完全被显示,因此,该阶段我们可以被视为准备阶段。   在该阶段,我们可以将 NVWorld 中创建的灯光等添加到场景中。  
          onResume 方法在整个场景准备好后,会被调用。在这个阶段,整个场景中的内容会被完全显示出来。  
         onPause 方法当手机 app 隐藏到后台,或当该 NVScenePlay 退出时会被调用,此时 NVScenePlay 处于未激活状态。  
        onStop 方法是 NVScenePlay 完全退出时,会调用该方法,此时我们需要刻意在这个方法里,把一些全局的对象如灯光从该场景中移除。  
       onDestroy 方法,当我们销毁应用程序时,会执行所有注册到 NVAppDirector 中的 NVScenePlay 的该方法。       

4.4 视图类 NVWidget  

NVWidget 类似于 MVC 架构中的 View 的作用。 NVWidget 是所有场景中可显示对象的父类。  
不同于传统 2D 应用中的 View NVWidget 需要定义整个其可显示对象的形状,外表和姿态。这些形状,外表和 3D 姿态可以抽象为一个模型数据。  
为此,在 NVWidget 中,我们提供了 setShape 这个方法,用于设置物体显示需要的形状,该方法的参数接收一个关于形状的文件名字。该文件的格式为 mesh  格式  ( 5.1.1 节中会介绍 )  
此外, NVWidget 可以通过 setPosition 来调整自身的位置,通过 setScale 来控制自身大小,通过 pitch, yaw, roll 方法来分别绕 X 轴,   Y 轴,   Z 轴旋转来改变物体的姿态。  

4.5 资源管理类 NVResources  

NVResources 是一个资源管理类,它主要提供给用户如何监听资源加载,获取资源信息的接口。  

4.5.1监听资源加载  

该功能主要通过设置 NVResourcesListener 来完成的, NVResourcesListener 主要有三个方法:  
onLoadStart 用于通知用户目前开始加载的资源组,以及该组所包含的资源文件数目。一般 NVisionXR 会自动将资源分为三组:一组是必须添加的,即 NVisionXR 自带的资源文件;一组是用户根据我们的资源目录  ( 参见,第五章资源目录 ) 添加的资源文件;还有一组是用户自己定义的文件路径中的文件。  
onLoadFile 用于通知用户目前开始加载的资源文件,以及该资源文件在其资源组中的位置。  
onLoadEnd   通知用户所有资源文件已经加载完毕。  

4.5.2添加资源目录  

用户可以通过该类的 addResourceLocation 方法,来添加它们自己创建的资源文件夹路径。  

4.5.3获取资源信息接口  

获取资源信息后,用户可以通过程序接口来操作相应的资源文件,   目前这部分功能还没有完全开放。  
             
 资源目录  

      用户在使用 NVisionXR 时,需要添加资源,为此,为了方便用户使用和管理,我们提供了两个文件夹用于管理资源文件 :  
      一个是 nvisionXR 文件夹,该文件夹下存放的是 nvisionXR 引擎所必需使用的资源文件路径,一般不允许用户更改。   一个时 user 文件夹,可以允许用户添加自己的资源。( ios 对应的这两个文件夹,一个是 NVRes.bundle,  一个是 UserRes.bundle  
        nvisionXR user 文件夹下都会有一些准备好的文件夹:  
       1  models 文件夹:用于存放模型相关的文件 , mesh 文件, skeleton 文件  
       2 materials 文件夹 用于存放 NVWidget 设置 Appearance 相关的资源文件 material 脚本,存放在 scripts 子文件夹中; program 脚本,存放在 programs 子文件夹中;纹理图片,存放在 textures 子文件夹中。  
       3  packs 文件夹,用于存放压缩的 zip 文件。  
        4 particle 文件夹,用于存放粒子系统的脚本文件,如 pu 文件等。  

         以上各个文件夹的路径都在 resources.cfg 配置文件中定义,所有资源必需存放在资源目录里才能够使用  
        以上资源目录在 Android 工程里需要放在 assets 文件夹根目录下, ios 的两个 bundle 放在工程根目录下即可。  

5.1 Models  

models 文件夹下存放了两类文件,一类是 mesh 文件,一类是 skeleton 文件。这两个文件是 NVi sio nXR 向用户提供的关于如何定义 NVWidget 形体以及如何为其添加骨骼动画的资源文件。  
mesh skeleton 格式的文件自身具有体积小的优势。  

5.1.1 mesh文件  

mesh 文件,定义了 NVWidget 的形状,是 nvisionXR 向用户提供的一种模型格式,其内部包含了模型的顶点,纹理坐标,顶点法线等信息。  
mesh 文件中的顶点需要通过 material 文件来为其赋予颜色属性   ,即其外表。  

5.1.2 skeleton文件  

skeleton 文件是 NVWidget 的子类 NVSkeletonWidget 所使用的资源文件,它为 NVWidget 定义了关于其形状的一组动画。每个动画都有一个名字,可以通过 NVSkeletonWidget addAnimation 方法进行添加,   目前 NVSkeletonWidget 只能添加一个动画,后续 NV ision XR 会提供支持添加多个动画,及动画之间的切换。  
skeleton 文件里包括了骨骼和骨骼动画的关键帧数据。  
skeleton 文件的名字要与 mesh 文件的名字一致,这样当我们设置 mesh 文件时,程序会自动索引到相关 mesh 文件。  

5.2  Materials  
          materials 文件夹下有两类文件:  
         program   脚本文件,可以允许用户自定义编程的 shader   目前支持 shader 语言为 glsl  
         material 脚本文件   定义了关于 NVWidget 整个外表相关的属性。  

5.2.1 program文件  

program 脚本提供了如何使用自己的 shader 文件,这部分功能目前 不对用户开放。  

5.2.2 material 文件  

material 文件定义了物体的外表属性,即材质信息。  
其大致结构如下:  
              material  name  
             {  
                  technique  
                  {  
                       pass  
                       {  
                        }  
                  }  
             }  
              上述是一个树结构,   material 是根节点 , technique   pass 是子节点,   节点具有属性和 body   属性可以是名字,    body 需要 {} 定义  
             material 节点里,   至少要定义一个 technique   一般情况下,我们只需要一个 technique 就可以了,   pass 是我们主要定义材质属性的地方。  
             pass 中常用属性参数有:  
             ambient   定义环境光颜色,   格式为 rgb 三个值,   其格式为 amient r g b  
            diffuse   定义一个物体表面漫反射系数,当为全白时,即 1.0, 1.0, 1.0 时,   表示物体会反射光的全部颜色,   如果是 0.0, 0.0, 0.0   则物体不会反射光的颜色,表现为全黑,格式为 rgba 四个值,其格式为  diffuse r g b a 
               注意上述 rgba 的值都在 0~1 之间。  

               texture_unit 表示 pass 的一个子节点,   在其里面可以用 textures 里图片物体表面的纹理。  
               其格式如下 :  
               texture_unit  
               {  
                      texture image_name  
                }           

5.2.3 图片文件  

目前 nvisionxr   支持 jpg, png, bmp, tga, 等格式的图片文件。  

5.3 packs  

           packs 文件夹里,存放了我们压缩成 zip 格式的压缩文件。  

5.3.1 zip文件  

zip 文件从某种意义上说也是一种文件夹,   只不过它将其中的资源集中管理起来,并能够减少其中的体积。  
一般,我们会将关于一个物体的所有相关资源,压缩成一个 zip 文件,如将 mesh, skeleton, material 文件存放在一个 zip 里。   这时候,   mesh , skeleton, material 的名字最好一致,   方便程序索引,   Rabbit.mesh, Rabbit.skeleton, Rabbit.material 存放在一个 zip 文件夹中,我们通过 NVWidget 类的 setShape 方法设置 Rabbit.mesh   那么程序能够自动索引到 Rabbit.skeleton    Rabbit.material  

5.4 particle  

5.4.1 pu文件  

particle 是存放粒子系统脚本的地方,   nvisionxr 的粒子系统采用的是 particle universe 第三方库,   其支持的脚本为 pu 文件,关于如何使用 particle universe,  请详细看 particle univers e 使用教程。  

欢迎联系: 

图片:微信图片_20180330234606.png[删除]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值