论文部分内容阅读
[摘 要] 虚拟场景是虚拟现实应用中必不可少的部分,但是由于其构成的复杂性使得对它的管理和编辑非常困难。在构建虚拟现实引擎时,如何更好地组织和管理虚拟场景对加快显示速度以及提高场景编辑效率都非常重要。本文论述了利用OSG提供的管理方式组织虚拟场景的方法,对工程实践有一定的参考意义。
[关键词] 虚拟场景 OSG 树形结构
1. 引言
虚拟场景是指通过模仿真实世界的景观,由计算机生成的仿真世界。有了这样的虚拟环境,人们可以“身临其境”地置身于该景观中,并在其中自由“行走”和“观看”。如何真实的通过计算机生成的虚拟环境表达现实世界,一直是计算机图形学的一个重要研究方向。当前的方法一般分为三类:基于几何造型、基于图像绘制以及基于几何和图像混合[1],目前基于几何造型的方法构建虚拟场景仍然是被广泛采用的技术。但是采用这种方法构建虚拟场景是一个复杂的过程,除了要对场景中的所有景物都进行建模之外,还要将建模之后的模型根据真实场景的需要,将其置于虚拟场景中,并使其具有自身的物理特性且表现“真实”,是极其复杂的工作,目前通常会借助虚拟现实引擎来辅助完成。
虚拟现实引擎是一个辅助的工具,它对场景的组织需要借助相应的管理方式,这样可以方便地对场景进行规划和设置。我们在构建虚拟现实引擎时研究了如何对虚拟场景中的数据进行组织和管理,以及在OSG[2](Open Scene Graph)中如何进行实现的方法。
2. 虚拟环境的场景构建层次
2.1 虚拟场景组织的复杂性
虚拟场景中的对象可以分为三类:空间对象、物品对象和场景对象[3]。物品对象是场景中具体的物体,如陈设、人物等;空间对象包括物体的材质、纹理、方位等。虚拟现实应用要模仿真实的环境就需要将其基本环境信息一一体现。以现实世界一个广场及其周围的景物为例:在广场周围会有若干栋建筑物和一些辅助设施,每一个建筑物会有多个房间,每一个房间中又包含许多事物。每一栋建筑物相当于一个子场景,而建筑物中的房间是下一级子场景,在每一个房间中的陈设等物体是一个个的对象,我们要实现这样的虚拟世界,除了要包含一定的物体之外,还要实现其中的空间对象。而实现空间对象就需要对场景及其中的物体进行有效的组织和管理。
在构建上述的虚拟场景时,如果仅仅将这些建筑物和其中的物体对象简单置入场景中,物体同物体之间没有关联,会对管理和设置带来很大困难。例如:若要对某场景中的20个物体进行属性设置,其中的属性包含了很多方面,如方位、纹理、运动等等,若物体相互独立,我们就需要对其中的每一个物体分别设置属性,对有些共有的属性也需要分别设置,很显然这种方式非常不便,如果能够将其进行归类,对共有的属性能够实现一次设置就能影响全局就会对我们的操作带来便利,如何更好地对场景及其中的物体进行组织是需要探讨的问题。
2.2 采用层次结构构建虚拟场景
由于虚拟场景中物体的复杂和多样性,为了能对虚拟世界中的每个物体进行相应的设置,使其更加真实且具有灵活性,又便于用户进行交互和修改,需要采用一定的方式对其进行组织和管理,树形的层次结构就是一种很好的管理方式。
一个应用通常由若干个场景构成,我们将场景分离,并采用层次结构,对每个场景,构建时都需向其中添加对象(物体)。当运行应用时,不必同时调入多个场景,只需根据用户当前的观看点调入相应场景,这样既可以降低对资源的占用,又可以加快显示速度。当场景中的对象数目较多时,为了能对它们有效实施管理,可以采用树形的结构进行组织[4]。
3. OSG简介
3.1 OSG特性概述
OSG是一款高效实时的三维图形开发包,OSG构建于OpenGL图形函数库之上,全部采用标准C++语言开发,主要应用于游戏、虚拟现实和科学计算可视化与仿真领域中的高性能图形程序的开发,它的许多功能和运行性能优于许多现有商业虚拟引擎。OSG具体的特性和使用方法可以从其官方网站获得,由于其出现较晚,而且具有开放性的特点,目前还没有成熟的资料可供参考。
在OSG中包含许多功能模块,它将不同特性封装在不同的类中,并对其实施管理。其中以核心库为重点,其他还有工具集和特效库。在核心库中以核心OSG为重点,其中提供了基本的场景类和物体类,通过它,OSG就可以实现对场景和其中物体的高效管理。
3.2 核心OSG相关类及其组织形式
核心OSG包含的类有:节点访问器(NodeVisitor)、物体类(Object)、帧同步控制类、纹理类(Texture)、状态类(State)等等。在OSG中,涉及场景管理的类主要集中在osg::Object,Object是一个基类,由它可以派生出许多对象类,由它可以派生出许多对象类。
场景中的每个物体都可以被认为是由一个或若干个节点构成,节点也具有层次,一个节点可以包含若干子节点。在这些类中, osg::Drawable是一个可绘制图形类,虚拟场景空间中的复杂三维物体可以被分解为若干个Drawable,每个Drawable有一个相应的编号,可以根据编号访问具体的Drawable节点。每个Drawable节点还可以进一步被分解,Geometry是从中派生的几何体类,通过它提供的函数可以获取几何体的形状、顶点数组、法线、颜色数组以及相关的属性等信息,从而实现对物体的操作。
4. OSG对场景的管理
OSG将应用及场景和其中的对象按照树的形式进行组织,树由若干节点(Node)构成,应用相当于树根,同一个应用工程中,可以包含若干个场景,每个场景也可以被认为是一个节点,场景节点之下还包含若干物体。进入场景后,其中的物体可以进一步被归类和细分,如几何体、网格、顶点等,还可以被分为不同的类别,如实体、图片、灯光、辅助物体等等。
在OSG中将节点划分为不同的类型,我们要实现对场景中物体的操纵和控制,需要将场景及其中的每个物体归结为是由一个或若干个节点构成,节点也具有层次,一个节点可以包含若干子节点。同层的节点及其子节点可以被归为一组(Group),组也相当于一个节点,它可以同其它节点并列存在,给组设置相关属性类型,则该组中的节点也具备这种属性。可以对不同组统一管理和操纵。
同层的节点及其子结点可以被归为一组,这样可以对不同的组(Group)统一管理和操纵。Group又可以被划分为若干种类的子节点,如变换节点(Transform)、灯光(Light Source)、LOD等等,每种类型节点有相应的特性设置,在虚拟场景中表现出不同的特征。在虚拟场景中表现出不同的特征。节点类还可以被划分为若干Geode,也就是geometry node,屬于场景中的叶节点,可以通过它访问Drawable节点,由此同Drawable建立关联。有了Drawable、Geode、Shape等基本的几何体,我们就可以实现在虚拟现实应用中对物体进行属性编辑和操纵。
这样的管理形式使场景结构清晰,便于访问、控制和操纵。
5.结束语
虚拟场景是虚拟现实应用中必不可少的部分,但是由于其构成的复杂性使得对它的管理和编辑非常困难。在构建虚拟现实引擎时,如何更好的组织和管理虚拟场景对加快显示速度以及提高场景编辑效率都非常重要。OSG是目前较新、性能较好的虚拟现实开发工具包,利用它的组织方式可以非常方便的对虚拟场景进行组织和管理,但是目前OSG的相关资料非常有限,本文在实践的基础上总结了OSG对虚拟场景进行组织的形式和方法,对具体的工程实践有一定的参考意义。
本文作者创新点:以OSG作为虚拟引擎的开发工具包,采用OSG提供的树形层次结构的场景管理方法,开发的虚拟引擎可以对复杂的虚拟场景实施有效管理,在具体的工程实践中有广泛的应用价值。
参考文献:
[1] 周昆,童一颖等.VECW一个虚拟环境的构造和漫游系统[J].计算机辅助设计与图形学学报,2000,vol12(5):355.
[2] www.openscenegraph.org .
[3] 唐晶磊,蔡勇等.基于VR与Agent技术的室内漫游系统[J].微计算机信息,2006,7-1:265-267.
[4] 程菊明.虚拟展示平台核心技术的研究与实现[D].广西大学,2006.6:22-24.
[关键词] 虚拟场景 OSG 树形结构
1. 引言
虚拟场景是指通过模仿真实世界的景观,由计算机生成的仿真世界。有了这样的虚拟环境,人们可以“身临其境”地置身于该景观中,并在其中自由“行走”和“观看”。如何真实的通过计算机生成的虚拟环境表达现实世界,一直是计算机图形学的一个重要研究方向。当前的方法一般分为三类:基于几何造型、基于图像绘制以及基于几何和图像混合[1],目前基于几何造型的方法构建虚拟场景仍然是被广泛采用的技术。但是采用这种方法构建虚拟场景是一个复杂的过程,除了要对场景中的所有景物都进行建模之外,还要将建模之后的模型根据真实场景的需要,将其置于虚拟场景中,并使其具有自身的物理特性且表现“真实”,是极其复杂的工作,目前通常会借助虚拟现实引擎来辅助完成。
虚拟现实引擎是一个辅助的工具,它对场景的组织需要借助相应的管理方式,这样可以方便地对场景进行规划和设置。我们在构建虚拟现实引擎时研究了如何对虚拟场景中的数据进行组织和管理,以及在OSG[2](Open Scene Graph)中如何进行实现的方法。
2. 虚拟环境的场景构建层次
2.1 虚拟场景组织的复杂性
虚拟场景中的对象可以分为三类:空间对象、物品对象和场景对象[3]。物品对象是场景中具体的物体,如陈设、人物等;空间对象包括物体的材质、纹理、方位等。虚拟现实应用要模仿真实的环境就需要将其基本环境信息一一体现。以现实世界一个广场及其周围的景物为例:在广场周围会有若干栋建筑物和一些辅助设施,每一个建筑物会有多个房间,每一个房间中又包含许多事物。每一栋建筑物相当于一个子场景,而建筑物中的房间是下一级子场景,在每一个房间中的陈设等物体是一个个的对象,我们要实现这样的虚拟世界,除了要包含一定的物体之外,还要实现其中的空间对象。而实现空间对象就需要对场景及其中的物体进行有效的组织和管理。
在构建上述的虚拟场景时,如果仅仅将这些建筑物和其中的物体对象简单置入场景中,物体同物体之间没有关联,会对管理和设置带来很大困难。例如:若要对某场景中的20个物体进行属性设置,其中的属性包含了很多方面,如方位、纹理、运动等等,若物体相互独立,我们就需要对其中的每一个物体分别设置属性,对有些共有的属性也需要分别设置,很显然这种方式非常不便,如果能够将其进行归类,对共有的属性能够实现一次设置就能影响全局就会对我们的操作带来便利,如何更好地对场景及其中的物体进行组织是需要探讨的问题。
2.2 采用层次结构构建虚拟场景
由于虚拟场景中物体的复杂和多样性,为了能对虚拟世界中的每个物体进行相应的设置,使其更加真实且具有灵活性,又便于用户进行交互和修改,需要采用一定的方式对其进行组织和管理,树形的层次结构就是一种很好的管理方式。
一个应用通常由若干个场景构成,我们将场景分离,并采用层次结构,对每个场景,构建时都需向其中添加对象(物体)。当运行应用时,不必同时调入多个场景,只需根据用户当前的观看点调入相应场景,这样既可以降低对资源的占用,又可以加快显示速度。当场景中的对象数目较多时,为了能对它们有效实施管理,可以采用树形的结构进行组织[4]。
3. OSG简介
3.1 OSG特性概述
OSG是一款高效实时的三维图形开发包,OSG构建于OpenGL图形函数库之上,全部采用标准C++语言开发,主要应用于游戏、虚拟现实和科学计算可视化与仿真领域中的高性能图形程序的开发,它的许多功能和运行性能优于许多现有商业虚拟引擎。OSG具体的特性和使用方法可以从其官方网站获得,由于其出现较晚,而且具有开放性的特点,目前还没有成熟的资料可供参考。
在OSG中包含许多功能模块,它将不同特性封装在不同的类中,并对其实施管理。其中以核心库为重点,其他还有工具集和特效库。在核心库中以核心OSG为重点,其中提供了基本的场景类和物体类,通过它,OSG就可以实现对场景和其中物体的高效管理。
3.2 核心OSG相关类及其组织形式
核心OSG包含的类有:节点访问器(NodeVisitor)、物体类(Object)、帧同步控制类、纹理类(Texture)、状态类(State)等等。在OSG中,涉及场景管理的类主要集中在osg::Object,Object是一个基类,由它可以派生出许多对象类,由它可以派生出许多对象类。
场景中的每个物体都可以被认为是由一个或若干个节点构成,节点也具有层次,一个节点可以包含若干子节点。在这些类中, osg::Drawable是一个可绘制图形类,虚拟场景空间中的复杂三维物体可以被分解为若干个Drawable,每个Drawable有一个相应的编号,可以根据编号访问具体的Drawable节点。每个Drawable节点还可以进一步被分解,Geometry是从中派生的几何体类,通过它提供的函数可以获取几何体的形状、顶点数组、法线、颜色数组以及相关的属性等信息,从而实现对物体的操作。
4. OSG对场景的管理
OSG将应用及场景和其中的对象按照树的形式进行组织,树由若干节点(Node)构成,应用相当于树根,同一个应用工程中,可以包含若干个场景,每个场景也可以被认为是一个节点,场景节点之下还包含若干物体。进入场景后,其中的物体可以进一步被归类和细分,如几何体、网格、顶点等,还可以被分为不同的类别,如实体、图片、灯光、辅助物体等等。
在OSG中将节点划分为不同的类型,我们要实现对场景中物体的操纵和控制,需要将场景及其中的每个物体归结为是由一个或若干个节点构成,节点也具有层次,一个节点可以包含若干子节点。同层的节点及其子节点可以被归为一组(Group),组也相当于一个节点,它可以同其它节点并列存在,给组设置相关属性类型,则该组中的节点也具备这种属性。可以对不同组统一管理和操纵。
同层的节点及其子结点可以被归为一组,这样可以对不同的组(Group)统一管理和操纵。Group又可以被划分为若干种类的子节点,如变换节点(Transform)、灯光(Light Source)、LOD等等,每种类型节点有相应的特性设置,在虚拟场景中表现出不同的特征。在虚拟场景中表现出不同的特征。节点类还可以被划分为若干Geode,也就是geometry node,屬于场景中的叶节点,可以通过它访问Drawable节点,由此同Drawable建立关联。有了Drawable、Geode、Shape等基本的几何体,我们就可以实现在虚拟现实应用中对物体进行属性编辑和操纵。
这样的管理形式使场景结构清晰,便于访问、控制和操纵。
5.结束语
虚拟场景是虚拟现实应用中必不可少的部分,但是由于其构成的复杂性使得对它的管理和编辑非常困难。在构建虚拟现实引擎时,如何更好的组织和管理虚拟场景对加快显示速度以及提高场景编辑效率都非常重要。OSG是目前较新、性能较好的虚拟现实开发工具包,利用它的组织方式可以非常方便的对虚拟场景进行组织和管理,但是目前OSG的相关资料非常有限,本文在实践的基础上总结了OSG对虚拟场景进行组织的形式和方法,对具体的工程实践有一定的参考意义。
本文作者创新点:以OSG作为虚拟引擎的开发工具包,采用OSG提供的树形层次结构的场景管理方法,开发的虚拟引擎可以对复杂的虚拟场景实施有效管理,在具体的工程实践中有广泛的应用价值。
参考文献:
[1] 周昆,童一颖等.VECW一个虚拟环境的构造和漫游系统[J].计算机辅助设计与图形学学报,2000,vol12(5):355.
[2] www.openscenegraph.org .
[3] 唐晶磊,蔡勇等.基于VR与Agent技术的室内漫游系统[J].微计算机信息,2006,7-1:265-267.
[4] 程菊明.虚拟展示平台核心技术的研究与实现[D].广西大学,2006.6:22-24.