温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

NVisionXR引擎基本介绍

发布时间:2020-06-28 00:56:37 阅读:752 作者:NVisionXR 栏目:移动开发
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

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引擎基本介绍

NVisionXR引擎基本介绍

NVisionXR引擎基本介绍

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

3.2 单位 

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

3.2.2 尺度 

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

. SDK常用类 

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

4.2 上下文 NVContext 

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

NVisionXR引擎基本介绍

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应用中的ViewNVWidget需要定义整个其可显示对象的形状,外表和姿态。这些形状,外表和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 
       nvisionXRuser文件夹下都会有一些准备好的文件夹: 
       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形体以及如何为其添加骨骼动画的资源文件。 
meshskeleton格式的文件自身具有体积小的优势。 

5.1.1 mesh文件 

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

5.1.2 skeleton文件 

skeleton文件是NVWidget的子类NVSkeletonWidget所使用的资源文件,它为NVWidget定义了关于其形状的一组动画。每个动画都有一个名字,可以通过NVSkeletonWidgetaddAnimation方法进行添加, 目前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使用教程。 

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI

开发者交流群×