【移动应用开发技术】NVisionXR引擎基本介绍_第1页
【移动应用开发技术】NVisionXR引擎基本介绍_第2页
【移动应用开发技术】NVisionXR引擎基本介绍_第3页
【移动应用开发技术】NVisionXR引擎基本介绍_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】NVisionXR引擎基本介绍

NVisionXR引擎基本介绍

一.

介绍

1.1NVisionXR是什么?

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

1.2

为什么是NVisionXR?

NVisionXR引擎是专门为AR应用开发而设计,提供了一套3D渲染引擎及AR模块接口,能够帮助开发者更高效地开发原生AR应用。它具有如下的特点:

①采用原生开发方式,与原生应用结合好

开发的应用包体小,更有利于AR产品推广

学习成本低

④专为AR应用开发而设计,兼容多款AR平台

1.3

现有版本特性

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

1.3.1

渲染功能特性

模型渲染,包括模型贴图,模型骨骼动画

灯光阴影,包括点光源,

平行光,

聚光灯

运动,

支持Bezier曲线运动

粒子系统,

集成了particleuniverse

粒子系统库,能够实现酷炫的粒子动画

1.3.2

多媒体功能特性

NVisionXR引擎集成了ijkPlayer,

从而能够实现在3D空间中渲染视频的功能。

1.3.3

增强现实跟踪功能特性

兼容了Vuforia平台基本功能,

能够识别多个Marker图片。

系统架构

2.1

系统层级

如上图所示,

NVisionXR的框架在结构上大体分为三个层级:

最底层是渲染引擎和集成的一些第三方库。

中间层是管理层,负责将底层提供的功能进行封装,组合,抽象,再以一种更加简便的形

式提供给上层。

上层是应用层,

它是用户进行应用开发直接对接的一层。

2.2MVC框架

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.3Controller类

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文件

2materials文件夹:

用于存放NVWidget设置Appearance相关的资源文件,如material脚本,存放在scripts子文件夹中;program脚本,存放在programs子文件夹中;纹理图片,存放在textures子文件夹中。

3

packs文件夹,用于存放压缩的zip文件。

4particle文件夹,用于存放粒子系统的脚本文件,如pu文件等。

以上各个文件夹的路径都在resources.cfg配置文件中定义,所有资源必需存放在资源目录里才能够使用

以上资源目录在Android工程里需要放在assets文件夹根目录下,ios的两个bundle放在工程根目录下即可。

5.1Models

models文件夹下存放了两类文件,一类是mesh文件,一类是skeleton文件。这两个文件是NVisionXR向用户提供的关于如何定义NVWidget形体以及如何为其添加骨骼动画的资源文件。

mesh和skeleton格式的文件自身具有体积小的优势。

5.1.1mesh文件

mesh文件,定义了NVWidget的形状,是nvisionXR向用户提供的一种模型格式,其内部包含了模型的顶点,纹理坐标,顶点法线等信息。

mesh文件中的顶点需要通过material文件来为其赋予颜色属性

,即其外表。

5.1.2skeleton文件

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.1program文件

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

5.2.2material

文件

material文件定义了物体的外表属性,即材质信息。

其大致结构如下:

material

name

{

technique

{

pass

{

}

}

}

上述是一个树结构,

material是根节点,technique和

pass是子节点,

节点具有属性和body,

属性可以是名字,

body需要在{}定义。

material节点里,

至少要定义一个technique,

一般情况下,我们只需要一个technique就可以了,

pass是我们主要定义材质属性的地方。

pass中常用属性参数有:

ambient

定义环境光颜色,

格式为rgb三个值,

其格式为amientrgb

diffuse

定义一个物体表面漫反射系数,当为全白时,即1.0,1.0,1.0时,

表示物体会反射光的全部颜色,

如果是0.0,0.0,0.0,

则物体不会反射光的颜色,表现为全黑,格式为rgba四个值,其格式为

diffusergba

注意上述rgba的值都在0~1之间。

texture_unit表示pass的一个子节点,

在其里面可以用textures里图片物体表面的纹理。

其格式如下:

texture_unit

{

textur

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论