基于OpenGL的三维校园漫游系统可视化研究

2018-04-13 01:07刘萍萍陆兆攀高武奇
计算机技术与发展 2018年4期
关键词:实体模型漫游纹理

刘萍萍,陆兆攀,高武奇

(西安工业大学 计算机科学与工程学院,陕西 西安 710021)

0 引 言

随着虚拟现实及相关技术的不断进步与发展,人们之间的交流也将采用新的方式、进入新的领域,实现由文字图像到三维VR(虚拟现实)的转变[1]。当前以信息技术为背景的现代教育,绝大部分多媒体信息系统具有明显的局限性,例如学生只能按照时间的流程,按电脑中程序设计的流向有限制地进行浏览和学习,这大大降低了学生学习的参与性以及热情。而虚拟现实技术[2]能够创建与现实社会类似的环境,可以使人产生一种身临其境的真实感,能够使人与虚拟环境之间进行多维信息的交互,形象生动地表现教学内容,有效地营造一个跟随技术发展的教学环境,提高学生掌握知识、技能的效率,优化教学过程、提高教学质量、调动学生的学习积极性、突破教学的重点、难点。在教育方面营造一个“自主学习”的环境进而取代传统的“以教促学”的学习方式,为数字大学建设提供一个重要的校园信息化平台。但在虚拟仿真校园的应用上也只是简单地提供虚拟校园环境给学生及家长们浏览,在基于教学、教务、校园生活的交互方面还需要进一步的研究[1]。

文中以西安工业大学未央校区为虚拟空间,通过应用OpenGL编程、3D max建模技术以及SQL数据库技术,从OpenGL基本图形元的创建、渲染、视角的转换等方面,创建出具有全景图展示、固定路径漫游、交互式漫游、碰撞检测响应、漫游系统交互性等功能的虚拟校园漫游系统[3]。

1 虚拟校园漫游系统简介及相关技术

虚拟校园漫游系统[4-5](virtual campus)属于假想或者真实空间的仿真,漫游系统以地理、虚拟现实、多媒体、宽带等技术作为基础,结合了属性和地理空间信息等方面的内容,并进行了逼真的虚拟校园环境的构建,用户能够通过计算机网络对校园景观进行访问,并利用终端计算机在虚拟校园环境中展开漫游以及相应的搜索和查询等[6]。

1.1 虚拟校园漫游系统相关技术

1.1.1 OpenGL技术

OpenGL(open graphics library),也被称作是图形程序接口技术,是一套三维图形处理库,一个跨编程语言、跨平台的编程接口,一个功能强大、调用方便的底层图形库[7]。OpenGL具有性能高、稳定性好、工业标准、可靠度高、灵活性好、可伸缩性、可扩展性、容易使用等特点,可以被集成到Unix、Windows等窗口系统中,其功能基本上都以C函数的形式提供给外界,开发人员可利用这些函数轻松地对整个三维图形进行光色渲染。本系统以Visual C++为平台,利用OpenGL技术建立三维场景,调用3DS Max对建筑模型进行建模,实现虚拟漫游[8]。

1.1.2 SQL数据库技术

SQL数据库技术[9],即操作命令集,在使用时,不必考虑“怎么做”,只需要发出“做什么”的命令就可以,属于一种功能齐全的数据库语言。SQL功能强大,使用方便,成本低,性能高,已成为数据库操作的基础。

1.1.3 虚拟现实技术

虚拟现实技术(virtual reality)结合了多方面的应用,具有自主性、交互性以及感知性等特点,是一种高级仿真技术,其能够对虚拟世界进行创建之后的体验。其主要包括模拟环境、感知、自然技能和传媒设备等方面的内容。通过计算机可以进行环境的模拟,并利用专用设备让用户投入到相应过程中,使用户和环境之间的交互得以实现。

1.2 基于OpenGL的虚拟现实技术

基于OpenGL的虚拟现实技术[10]是通过计算机图形学的理论来建模实现,在这个过程中旨在实现校园的虚拟漫游与交互。本课题主要讨论基于VC++开发平台和OpenGL的虚拟校园漫游系统的设计和实现,利用3D Max建模,通过天空盒算法的Background节点技术实现天空绘制,并采用LOD算法实现地形渲染等,最终实现了虚拟校园漫游系统。系统开发流程如图1所示。

图1 系统开发流程

2 漫游系统的设计

虚拟场景的建设可分为三步:第一步,根据校园内各建筑物以及各环境物体的分布图和具体平面图,建立一个真实的虚拟校园;第二步,对校园内各单个实体对象分别建模,以场为基础,在空间上连续分布诸如地形、天空等景观对象,以离散的实体为特征,以独立的个体为存在的地形对象,如建筑物、树木、路灯等;第三步,构建好各个单独的实体场景后,再把这些场景整合在一起,合成完整的虚拟校园场景。

该设计利用OpenGL进行建模,采用3D纹理贴图的方式绘制场景,借助照相机、Photoshop等图像采集与处理的离散图像通过计算及处理进行了全景图的生成,最后在VC++6.0环境中进行交互控制,从而实现虚拟校园全景漫游系统。

系统基本功能模块如图2所示。

图2 系统基本功能模块

2.1 数据的收集与整理

在虚拟校园的实现过程中,完整的三维空间数据和影像数据是构建虚拟校园必不可少的。在建立地形模型的过程中,通常采取的方法是数字摄影测量。基于摄影测量的基本原理,以相片作为原始资料,通过影像处理、影像匹配等方法生成模拟模型和数字模型,然后转化成DEM格式,将形成的DEM与数字地图输入到相应的数据库。数据处理流程如图3所示。

图3 数据处理流程

在建筑物当中,不同内容的高度确定往往是依照建筑设计图纸来进行的,在获得建筑物几何特征三维模型的过程中,能够利用建筑设计图纸展开进一步的提取。可利用已有地图扫描数字化的矢量数据应对屋顶的三维建筑技术要求不高的建筑物。假如仅仅是得到了二维矢量数据内容,那么应当依照楼层层数进行高度的推断。

对于纹理数据,通过纹理图像能够对景物表面所具有的不一样的反射特性进行表示。在这个过程中所表示的纹理映射也就是把已经制定图像当中的部分内容进行映射,使之映射到纹理映射的图像片段当中,这种映射与图像颜色到图像坐标位置有密切关系,并且在这个过程中可以进行图段RGBA颜色的进一步修改。要使用当前的纹理绘制图元,必须在绘制每个顶点之前为该顶点制定纹理坐标。只需调用glTexCoord2d(s:Double;t:Double)函数即可。其中,s、t是相对2D纹理产生的s、t坐标。对所有纹理,无论其具有怎样的大小,在左上角也就是顶端的纹理坐标都是(0,0),右下角则是(1,1)。在这个过程中表示的是,纹理坐标应当是一个在0到1之间所具有的数字。

纹理贴图实现代码如下:

namespace OGL

{class CCylinder

{float m_Radia;//圆柱半径

floatm_Height;

int m_Slice;//圆柱由m_Slice个划分

CGLTexture *m_pTexture;

Public;

CCylinder():m_pTexture(NULL)

{m_Radia=1 280-128;

m_Height=1 024+1 024;

m_Slice=12;

CharCylinderTex[255]=“Scene1.JPG”;

LoadCylinderTexture(CylinderTex);}

void LoadCylinderTexture(char*CylinderTex)

{If(m_pTexture!=NULL)delete m_pTexture;

m_pTexture=new CGLTexture(Cylinder Tex);}

~CCylinder()

{ deletem_pTexture;}}

2.2 三维模型构建与可视化

在该系统开发中,通过3D Max软件与OpenGL的结合使用,降低了系统构建的复杂程度。构建虚拟校园模型的关键是要分析场景的形态特点,根据场景模型存在的状态特性,可划分为动态实体模型和静态实体模型。

在获得相应的纹理图片及信息数据之后,根据虚拟校园系统组成情况进行场景模型的建模。系统三维模型如图4所示。

图4 系统三维模型

(1)虚拟校园的静态实体模型构建。

校园静态实体[11]包括教学楼、图书馆、操场、道路及绿化等。静态建模主要是以实体自身特性的几何模型建模和以实体因外部环境引起的物理模型建模组成。静态实体模型的物理建模,主要是对因外在环境引起的不同实体纹理。而静态实体模型的几何模型,主要是自身外形的实体模型。在静态实体模型的几何建模过程中,根据采集的实体模型数据的复杂程度不同,对于规则静态实体模型可以使用3D Max来建立模型。而对于不规则实体模型,先使用AutoCAD对模型轮廓进行修改[12],再通过3D Max建立模型。

(2)虚拟校园的动态实体模型构建。

在构建校园系统模型过程中,构建运动部分时有可能会改变原来模型组织的内部结构,所以应在建模形成的模型文件中增加与运动部分链接的自由度节点,设置相应的定位坐标,并在自由度基础上对模型的运动部分进行分析,从而确定运动关系。

动态实体模型作为虚拟校园系统模型的重要组成部分,其建模过程是:用建模工具3D Max构建校园系统模型中动态模型的静态、动态两个部分,在构建动态模型过程中将自由度增大;增强动态实体模型的动画展示效果;在虚拟校园系统的模型中呈现动态模型的flash效果。

(3)天空场景的设计。

本系统中天空的实现使用了天空盒算法的Background节点,为虚拟校园场景的天空增加蓝天白云效果,以提高三维虚拟校园场景的真实性。在Background节点中,分别用skyColor和skyAngle域值来控制天空的颜色。skyColor域指定立体空间背景天空的颜色,域值是由一系列的红色、绿色和蓝色组合而成。skyAngle域是指定立体空间背景上需着色的位置的天空角。在这个过程中对所有天空的颜色进行设定,从而产生相应的过渡,产生渐变作用,从而使天空看起来更加逼真。

天空盒的实现是通过矩形方盒作为天空远景贴图,产生相应的立方体。首先生成一个足够大的立方体,然后将表现天气效果的不同天空纹理贴在立方体盒子的各个不同面上,避免出现太平面化、粗糙的情况,采用一种浅蓝色的天空使背景进一步得以消除,以此来表达模拟效果的逼真程度。作为天空背景的图片需满足的条件是:图形格式应当为BMP,即位图;根据size参数设置图片尺寸,尺寸有严格的要求,最好是2的倍数;设置好保存路径和名称,渲染时必须保证四边应与相关图像的位置相互连接。

2.3 三维模型的优化设计

(1)建筑物几何模型优化。

在虚拟校园系统中,依据学校中建筑物的外观以及结构展开分类,之后进行模型构建,对外观或者结构相同的建筑物采取同样的模型进行建造,对较为复杂的模型则通过拆分方法进行简化,之后展开建模。

在建筑物建模方面,几何模型包含顶部和墙面两方面的内容。墙面可以利用画面或者线段的手段得以实现。顶部包含一切顶点坐标,因为在建模过程中不同建筑物具有不同的顶部形状,不能采取通用模型对建筑物顶部的状况进行表达,需要依照相关规则排列的坐标数据对不同的信息进行推进,对所有建筑物都需要依照顶部外形特征展开分类,对于不同建筑物采取的几何模型数据也是完全不同的。

(2)三维虚拟校园建筑物的纹理映射。

“在影响翻译实践的诸多因素中,最活跃且起着决定性作用的,是翻译的主体因素。”[3]许钧总结了国内有关翻译的主体的讨论,得出翻译主体可以是:“译者,原作者与译者,译者与读者,原作者、译者与读者,”[4]虽然他没有具体的指出翻译主体的具体概念,但总的来看,由于译员在翻译活动中拥有独特地位、创造性和能动性,造成其在翻译主中的不可或缺性。许钧在《翻译的主体间性与视界融合》一文中提出:“翻译活动中作者、译者和读者之间关系的和谐是保证翻译成功的重要条件。”[5]

对建筑物窗户进行建模通常利用线段展开构造,对窗户的框架进行描述并展开渲染。由于校内建筑物体众多,若要一一进行建模,需要消耗太多的时间,且会影响系统运行速度。所以不同建筑物表面的窗户都能利用纹理映射的方法展开建模。具体的实现手段在于:将学校中所有建筑物的数据纹理展开加工并转换成对应格式,对所有面展开相应的映射。

(3)消隐处理。

在真实感图形生成中,为了提高模型的加载效率,需要对场景模型进行消隐处理。场景的消隐就是给定视点以及视线,进一步决定场景当中物体表面的可见性以及被遮挡之后不可见的特性。消隐可看成是一个排序问题,排序的效率可影响到消隐算法的效率。

在某个视点当中对三维物体进行观察,能够看到物体表面分布的点线面,而其他部分可能被这些部分进行遮挡,如果想要使三维物体得以展现,应当在确定相应的视线之后,对表面不可见的点线面进行消除,这种方法也就是消隐算法。

目前的消隐算法中,背面消除、Z缓冲器算法、画家算法以及扫描线算法等比较常见。

Z缓冲器算法主要是对投影平面上每个像素所对应的表面深度进行比较。不需要整个场景的几何数据,是所有图像空间算法当中较为简单的消隐内容。面对同样的像素,Z缓冲器往往是进行表面的保存,假如新的表面深度相对缓冲器表面深度与视点更加接近,那也就保存了新的内容。

Z缓冲器算法实现代码如下:

{for(x=0;x

for(y=0;y

置Z缓存的第(x,y)单元的颜色为背景色;}

for(每一个多边形平面)

for(投影平面上的每一个像素)

{计算多边形在该像素(x,y)处的深度值d;

If(d>Z缓存在(x,y)处的值)

{置Z缓存的第(x,y)单元的深度值为d;

置Z缓存的第(x,y)单元的颜色值为当前多边形颜色值;}}}

3 虚拟校园漫游系统交互性的实现

虚拟现实技术最主要的特征之一是实时交互性,是虚拟校园建设的核心。三维场景构建好后,需进行交互性的调试。系统可以通过实时交互控制,借助鼠标、键盘等外部输入设备,在电脑上实现校园的漫游虚拟。

3.1 交互漫游的实现

系统交互漫游时主要通过NavigationInfo(导航)节点和Viewpoint(视点)节点进行控制。浏览速度和方式通过NavigationInfo节点设置,浏览校园中相应场景时,其位置和朝向通过Viewpoint节点设置。用户借助键盘、鼠标等外部设备对校园场景直接交互功能的实现如图5所示。

图5 直接交互功能

3.2 交互漫游的控制

在系统实现的进程中,当用户站立角度发生改变时,场景内的物体就应当重新展开绘制。具体方法包括:利用场景中三维物体的改变得以完成,或者通过视点变换使交互场景画面得以改变。

gluLookAt()函数是OpenGL中提出的视点变换的方法,这种函数对旋转和平移的命令进行了封装,其通过眼睛位置、参考和矢量进行矩阵的改变,并将目标点映射到相应z轴当中,原点属于其观察点。在投影矩阵的过程中,场景映射到相关视区中心,而向上矢量则映射到y轴当中,不过在这个过程中向上矢量并不一定与视线到参考线之间进行平衡。

交互漫游控制实现的主要代码如下:

(1)初始化模型。

static t3DMode1 g_3DMode1[2];

CLoad3DS* m_3DS=new CLoad3DS;

m_3DS->Init(“neicum2 3DS”,0);

gLoadName(0);

m_3DS>show3DS(0,g_3DModel[0].Position x,g_3DModel[0].Position y,g_3DModel[0].Position z,0. 6,g_3DModel[0].bngitude,g_3DModel[0].latitude);

(2)选择函数。

hits=glRendeMode(GL_RENDER);

if(hits<=0)

return -1;

returnselectBuf[(hits-1)*4+3];

(3)平移函数。

g_3DModel[hits].Position x+=m_xTranslation;

g_3DModel[hits].Position y+=m_yTranslation;

(4)旋转函数。

g_3DMode[hits].longitude-=theta;

g_3DMode[hits].latitude+=phi;

3.3 碰撞检测功能的实现

碰撞检测技术[13]主要是对场景内部的物体进行,随着在场景内部全局Camera的移动,相当于观察者在场景中进行漫游。当观察者移动到一些场景内部时,如果没有碰撞检测,就会直接穿过物体,不符合实际情况,所以需要引入碰撞检测技术。

本模块主要利用包装盒算法[14]对三维场景中的物体区域进行判断,建立包装盒,判断场景中哪些物体应当展开碰撞检测。在发生包装盒级别碰撞的过程中,对三角形级别碰撞是否发生进行进一步的判断。这种包装盒级别分区域级别[15],最后进行的往往是三角形级别过程中的检测,相对于普通检测算法,精确度往往较高,而且避免了碰撞检测过程中导致的性能损失。在具体实现过程中有如下方面的手段:首先依照物体运动规律或者用户输入在每一帧的位置进行计算,这时不用对碰撞检测问题进行考虑,然后再对场景中的三角形进行循环检测。在循环的过程中进行如下操作:

(1)找到当前三角形所在的平面,暂且称之为平面S;

(2)对物体在上一帧以及当前位置进行判断,并判断其与平面S之间存在的关系。假如上一帧在平面之前,而这一帧已经达到了平面之后,那么进行第1步的计算。

(3)因为在平面两侧属于前后两帧物体的移动,也就表示物体已经穿过了平面当中。但是由于平面没有边界,这时不能表示物体与三角形之间产生了碰撞,还需要对物体在三角形三条边范围当中的界限进行判断。在通过了三条边之后进行平面PS1,PS2,PS3的垂直设置。并令其法线指向内部当中,对物体位置进行判断,判断其是否处于相应的平面当中,是则转步骤4,否则转步骤5。

(4)当确定物体与三角形产生碰撞之后进行位置的修正,使其能够依照S进行运动。

(5)当确定物体没有产生碰撞时,将下一个三角形作为相应的三角形,并重新返回步骤1。

摄像机虚拟漫游效果如图6所示。

图6 虚拟漫游效果

4 结束语

以虚拟现实技术为基础,介绍了基于OpenGL虚拟校园漫游系统的开发情况,对开发虚拟校园漫游系统的基本算法进行进一步研究,并对场景模型的建模和漫游交互功能等内容进行介绍和实现。完成了三维虚拟校园漫游系统的开发设计。通过测试,该虚拟校园漫游系统运行流畅。虚拟校园全景漫游系统真实地进行了三维景观的表述,用户可以借助鼠标和键盘等外部设备在三维虚拟校园场景中漫游,使校园真实感的交互操作得以实现。

参考文献:

[1] 李建荣,孔素真.虚拟现实技术在教育中的应用研究[J].实验室科学,2014,17(3):98-100.

[2] 赵 蔚,段 红.虚拟现实软件研究[J].计算机技术与发展,2012,22(2):229-233.

[3] 王文韬,谢阳群,李 力.虚拟现实技术在图书馆中的应用前景分析[J].图书馆,2016(5):10-14.

[4] 马利亚.基于虚拟现实的漫游系统关键技术的研究[D].哈尔滨:哈尔滨工程大学,2010.

[5] 刘小英,张 健.三维校园虚拟现实平台的设计与实现[J].湖北农业科学,2014,53(12):2909-2912.

[6] 李清艳,傅自钢.基于OpenGL的三维时钟设计[J].电脑与信息技术,2016,24(3):52-54.

[7] 肖 健,魏 雄,王仁波.基于OpenGL的大型建筑三维场景模拟的实现与意义[J].电子质量,2016(11):88-92.

[8] 马 萍.三维虚拟校园立体场景的设计与实现[D].济南:山东师范大学,2013.

[9] 王琰萍.山东信息职业技术学院虚拟校园的设计与实现[D].青岛:中国海洋大学,2011.

[10] 娄启业,程效军,谭 凯.基于AutoCAD和3DMax的建筑物三维建模[J].工程勘察,2013(11):71-74.

[11] 田文波.成都理工大学虚拟校园建设的研究[D].成都:成都理工大学,2013.

[12] ZHOU Z,FENG Y,GANG R,et al.Virtual reality based process integrated simulation platform in refinery:virtual refinery and its application[J].China Petroleum Processing & Petrochemical Technology,2011,13(3):74-84.

[13] NOVAKMARCINCIN J.Selected applications of virtual reality in manufacturing[J].Journal for Technology of Plasticity,2011,36(1):25-34.

[14] KAMARAJ D C,DICIANNO B E,MAHAJAN H P,et al.Stability and workload of the virtual reality-based simulator-2[J].Archives of Physical Medicine & Rehabilitation,2016,97(7):1085-1092.

[15] BAMODU O,YE X M.Virtual reality and virtual reality system components[J].Advanced Materials Research, 2013,765-767:1169-1172.

猜你喜欢
实体模型漫游纹理
基于BM3D的复杂纹理区域图像去噪
肺纹理增多是病吗?
霹雳漫游堂
霹雳漫游堂
TEXTURE ON TEXTURE质地上的纹理
基于ANSYS的发动机缸体模态分析
消除凹凸纹理有妙招!
边走边看:漫游海底 梦想成真
F8F-1B“熊猫”舰载战斗机实体模型工作图
OV-1“莫霍克”侦察机实体模型工作图