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文件。这两个文件是NVisionXR向用户提供的关于如何定义NVWidget形体以及如何为其添加骨骼动画的资源文件。 
mesh和skeleton格式的文件自身具有体积小的优势。 

5.1.1 mesh文件 

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

5.1.2 skeleton文件 

skeleton文件是NVWidget的子类NVSkeletonWidget所使用的资源文件,它为NVWidget定义了关于其形状的一组动画。每个动画都有一个名字,可以通过NVSkeletonWidget的addAnimation方法进行添加, 目前NVSkeletonWidget只能添加一个动画,后续NVisionXR会提供支持添加多个动画,及动画之间的切换。 
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 universe使用教程。 

欢迎联系:

NVisionXR引擎基本介绍的更多相关文章

  1. MySQL中四种常用存储引擎的介绍

    MySQL常用的四种引擎的介绍 (1):MyISAM存储引擎: 不支持事务.也不支持外键,优势是访问速度快,对事务完整性没有 要求或者以select,insert为主的应用基本上可以用这个引擎来创建表 ...

  2. MySQL存储引擎简单介绍

    MySQL使用的是插件式存储引擎. 主要包含存储引擎有:MyISAM,Innodb,NDB Cluster,Maria.Falcon,Memory,Archive.Merge.Federated. 当 ...

  3. SNF快速开发平台--规则引擎整体介绍及使用说明书

    一.设计目标 a)规则引擎语法能够满足分单,计费,WMS策略的配置要求.语法是一致和统一的 b)能够在不修改规则引擎模块的情况下,加入任意一个新的规则:实现上述需求之外的规则配置需求 c)运算速度快 ...

  4. (转)Asp.Net Mvc视图引擎Razor介绍

    Asp.Net Mvc视图引擎Razor介绍 1.Razor介绍 程序园原创,转载请注明:http://www.kwstu.com/ArticleView/dabaomvc_2014082408205 ...

  5. MySQL数据库(2)- 库的操作、表的操作、数据的操作、存储引擎的介绍

    一.库的操作 1.系统数据库 执行如下命令,查看系统数据库: mysql> show databases; 参数解释: information_schema: 虚拟库,不占用磁盘空间,存储的是数 ...

  6. MySQL引擎各个引擎对比介绍

    1.什么是存储引擎? 存储引擎类似于录制的视频文件,可以转换成不同的格式,如MP4,avi等格式,而存储在我们的磁盘上也会存在于不同类型的文件系统中如:Windows里常见的NTFS,fat32等.存 ...

  7. 2、Cocos2dx 3.0游戏开发找小三之引擎简单介绍

    尊重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27094663 引擎简单介绍 Cocos2d-x 的 ...

  8. Egret Engine(白鹭引擎)介绍及windows下安装

    Egret Engine简要介绍----- Egret Engine(白鹭引擎)[Egret Engine官网:http://www.egret-labs.org/]是一款使用TypeScript语言 ...

  9. Asp.Net Mvc视图引擎Razor介绍

    1.Razor介绍 1)ASP.NET MVC3 带来了一种新的名为Razor 的视图引擎,提供了下列优点: Razor 的语法简单且清晰,只需要最小化的输入 Razor 容易学习,语法类似于 C#  ...

随机推荐

  1. java重写和重载

    方法的重载: 在一个类中的两个或两个以上的方法,他们方法名相同但是参数列表不同,这种方式称为方法的重载,方法的重载是实现多态性的方式之一. 参数列表不同指的是参数的个数不同或相同的个数但顺序不同或者类 ...

  2. 利用scrapy模拟登录知乎

    闲来无事,写一个模拟登录知乎的小demo. 分析网页发现:登录需要的手机号,密码,_xsrf参数,验证码 实现思路: 1.获取验证码 2.获取_xsrf 参数 3.携带参数,请求登录 验证码url : ...

  3. C#图解教程 第十七章 泛型

    泛型 什么是泛型 一个栈的示例 C#中的泛型 继续栈示例 泛型类声明泛型类创建构造类型创建变量和实例 使用泛型的栈的示例比较泛型和非泛型栈 类型参数的约束 Where子句约束类型和次序 泛型方法 声明 ...

  4. Aspose.Words for .NET

    Aspose.Words for .NET Aspose.Words for .NET是 .NET 下先进的 Word 文档处理 API.它支持 DOC, OOXML, RTF, HTML, Open ...

  5. Spring 之BeanFactory(转)

    BeanFactory是Spring的“心脏”.它就是Spring IoC容器的真面目. Spring使用BeanFactory来实例化.配置和管理Bean.但是,在大多数情况我们并不直接使用Bean ...

  6. Linux入门——开机启动过程浅析

    Linux开机启动过程浅析 Introduction 开机启动过程分为以下6个步骤,分别是BIOS, MBR, GRUB, Kernel, Init, RunLevel, RunDefinition ...

  7. SQL Server 扩展事件

    SQL Server 扩展事件(Extended Event)是用于服务器的常规事件处理系统,是追踪SQL Server系统运行状态的神器,同时也是一个日志记录工具,扩展事件完全可以取代SQL追踪(S ...

  8. 【BZOJ1834】网络扩容(最大流,费用流)

    [BZOJ1834]网络扩容(最大流,费用流) 题面 Description 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用.求: 1. 在不扩容的情况下 ...

  9. [Luogu2057]善意的投票

    题目戳我 题目描述 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照顾一下自己朋友的想法,他们也可以投 ...

  10. Java集合中的LinkedHashMap类

    jdk1.8.0_144 本文阅读最好先了解HashMap底层,可前往<Java集合中的HashMap类>. LinkedHashMap由于它的插入有序特性,也是一种比较常用的Map集合. ...