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. 物联网框架ServerSuperIO在.NetCore实现跨平台的实践路线

    正所谓天下大势,不跟风不行.你不跨平台,很low嘛.java说:你们能跨嘛,跨给我看看.C#说:不要强人所难嘛.java说:能部署在云上吗?docker?微服务?C#说:不要强人所难嘛.java说:你 ...

  2. python datetime 与 time模块

    time模块 tmie.strptime :将时间字符串转化为时间类型 格式:time.strptime(string[string[, format]) 结果可以利用利用time.tm_year 返 ...

  3. C#图解教程 第二十四章 反射和特性

    反射和特性 元数据和反射Type 类获取Type对象什么是特性应用特性预定义的保留的特性 Obsolete(废弃)特性Conditional特性调用者信息特性DebuggerStepThrough 特 ...

  4. Gedit : 我的开场白 [TPLY]

    为什么用Gedit 在学校的高一新生里,好像就只有我使用Gedit 大家都笑我是"用记事本编程的人" 我就想 到考场看看你们笑得出来不 先放一个高配emacs配置 (global- ...

  5. [Luogu2073]送花

    题面 题目背景 小明准备给小红送一束花,以表达他对小红的爱意.他在花店看中了一些花,准备用它们包成花束. 题目描述 这些花都很漂亮,每朵花有一个美丽值W,价格为C. 小明一开始有一个空的花束,他不断地 ...

  6. .NET微服务 容器化.NET应用架构指南(支持.NET Core2)

    介绍 企业通过使用容器,日益实现成本节约.解决部署问题并改进 DevOps 和生产操作. 通过创建 Azure 容器服务.Azure Service Fabric 等产品,同时与 Docker.Mes ...

  7. Micropython TurnipBit 电子时钟 青少年编程入门

    电子时钟是一个很常用但是制作非常简单的小玩具了,对于Micropython初学者来说,制作一个电子时钟是非常简单又容易检验自己学习成果的实验了.TurnipBit相比于其他开发板,制作电子时钟就更加简 ...

  8. UML那些事

    什么是UML?它的全名:Unified Modeling Language,统一建模语言.最近我用到了uml,顺便重温了下这些知识.知乎上有一个讨论话题:uml还有用吗?这个讨论挺有意思的,看完后,受 ...

  9. 解决PhpMyadmin1440秒未活动自动退出

    解决方法如下:#vim phpMyAdmin/libraries/config.default.php找到如下位置$cfg['LoginCookieValidity'] = ;    将1440修改成 ...

  10. 去中心化类微博应用 mastodon

    一句话重点,去中心,没监管,自己对自己信息做主,没人随便删你消息的分布式社交应用 mastodon. 建了一个实例, https://cncs.io 来专门讨论计算机相关信息,欢迎大家注册来玩.已有用 ...