APP下载

三维虚拟校园的应用研究

2020-07-10李秀玲

软件 2020年5期
关键词:碰撞检测漫游纹理

李秀玲

(忻州职业技术学院计算机系,山西 忻州 034000)

0 引言

研究和实验三维虚拟环境,实现虚拟校园的意义在于:

(1)通过虚拟校园,用户可以直观、详细地了解校园的景观和环境,能感受到栩栩如生的校园建筑,对校园环境产生身临其境的感觉。

(2)能够完善学校的网站功能,用户可以通过浏览器来体验校园逼真的视觉效果,并配以许多信息查询功能,有助于学校宣传,并提高学校的知名度。

(3)有利于学校招生,借助网络平台,建立虚拟校园,可以提高校园的美誉度帮助学校大范围的招生,从而增强学校的影响力和竞争力。

(4)优化学校建设,通过虚拟校园,学校可以方便的对学校结构进行分析,并做出合理的布局规划[3];另一方面设计者们可以首先在系统中对规划方案进行预设计,并通过虚拟导游员进行预览,得到合适的方案,这样就避免了盲目施工所带来的资源浪费。

由此,虚拟校园可认为包括学校现实的虚拟化和过程教学[5]。其虚拟校园包括模拟真实的校园景观,它的建筑可以是现有的建筑,也可以是正在建设的或准备建设的建筑。这个课题主要服务于现实的学校[2]。

1 虚拟校园系统的总体构建

根据作者自身的实际情况和综合能力,准备从程序底层开发,既运用 VC++和 OpenGL编程技术来实现整个虚拟校园系统[6],校园三维场景的建模主要采用3ds max这个软件,对建筑物表面纹理图片的处理主要使用Photoshop这个软件。

虚拟校园开发系统的总体构建如图1所示。

2 虚拟校园的功能模块

根据虚拟校园的总体构建图,将虚拟校园的功能分为设计界面、输入数据、建立模型和交互系统四大模块。如图2所示。

图1 系统开发的总体构建图Fig.1 The overall structure of system development

图2 虚拟校园系统的功能模块图Fig.2 Functional module diagram of virtual campus system

3 建立实体模型

3.1 收集数据及预先处理

在该系统中几何建模的主要数据来自设计图纸和实际测量的数据。图片主要来自数码相机对一些标志性建筑拍照得到的;纹理数据通过数码相片及素材库中的图片经过处理得到的。针对结构外观比较简单的建筑采用 OpenGL直接建模[1],如果建筑物较复杂,首先把模型进行拆分,拆成多个简单的模型,再进行建模[7]。

3.2 具体建模过程

采用OpenGL建模的方法是,对于建筑物的模型首先建立如下所示的统一的数据结构:

typedef struct Object_Type

{

int nObject_Type;int nNumPoint;

float dWidth_Direct;

float dHeights;

Point3DArray points;

}Object;

在OpenGL中墙面由面片来组成,首先根据摄影测量工具对墙面所收集的顶点进行处理,即把所有的顶点依次连接成一系列的四边形。具体生成的面片图3所示。

对于建筑物顶部的建模,可以通过其所有的顶点坐标生成。通常校园建筑物顶部都是平顶建筑,所以其模型能看作是顶部与墙面的组合[9]。这样就把一个复杂的建筑物简单化了。

还有校园中如果有如阶梯教室、实习实训场所等复杂的建筑物,可以根据这些建筑物外在的特点对其进行分解,分成若干形态简单的几何体,然后在定义这些几何体的数据模型[4]。

3.3 纹理映射过程

通常对于建筑物表面材质和颜色采用纹理映射的方法进行建模。具体的实现方法是:通过采集加工把建筑物上各个面的纹理数据转换成图形图像格式,在绘制每个面时在分别对每个面进行纹理映射。通过纹理映射得到的场景对象仿真度高,而且栩栩如生。下面的校园景观图4就是通过纹理映射得到的。

图3 墙面四边形结构图Fig.3 Wall quadrilateral structure

图4 纹理映射后的景观Fig.4 Texture-mapped landscape

4 系统交互的实现

4.1 交互漫游功能的实现

(1)通过键盘鼠标获取

用户通过键盘的上下左右键来完成相应的动作控制。每次完成一个动作按键系统就会产生一个事件,在系统中控制场景的变换主要是通过用户先点击相应的按键,然后系统程序把这个动作转换为控制命令,最后实现虚拟场景的变换。

在三维虚拟场景中大部分操作是由鼠标来完成的,如:三维场景的视角、旋转及定位等操作。所以在三维校园系统中实现用户的动作输入时常常是键盘鼠标配合起来使用共同来完成用户的操作。

(2)漫游的控制

在虚拟漫游系统中如果用户的视角发生改变时,场景中的对象也发生了相应的改变。这样就需要通过下面的方法来实现:一是通过场景中改变三维对象的坐标来完成,二是通过三维场景视点的变换来完成场景的改变。这种方法是通过对用户视点的变换来完成场景中对象的重新绘制。

当场景的建模完成后,通常要选择一个合适的视角作为观察点,或者来回不停地变换视角,来对场景进行观察。OpenGL中专门提供了函数gluLookAt( )用于视点的变换[10]。

void gluLookAt(GLdouble eyex,GLdouble eyey,

GLdouble eyez,

GLdouble centerx, GLdouble centery,

GLdouble centerz,

GLdouble upx, GLdouble upy, GLdouble

upz);

其中:eyex,eyez,eyez是指定视点位置

Centerx,centerz,centery指定参考点位置

Upx, upy,upz,指定视口向上的方向

具体如图5所示。

图5 函数gluLookAt()的坐标系Fig.5 Coordinates of the function glulookat

在虚拟校园漫游系统中人所处的位置的坐标方向始终向上,其中视点坐标的方向即向量坐标(upx,upy,upz)固定为(0.0f,1.0f,0.0f),然后通过键盘鼠标的操作,即提前设定一个变量然后通过键盘来调整速度,通过鼠标操作来确定相关的位移量。利用三维几何学知识计算出参考点与人眼之间的变化,最后通过函数gluLookAt()自动生成相应的三维场景。

4.2 动态漫游功能的实现

所谓动态漫游指用户在下图的三维正交投影图上点击,选定一条路线来实现场景漫游。

图6 三维正交投影示意图Fig.6 Three-dimensional orthogonal projection diagram

在三维校园场景中,通过点击鼠标确定一条路线,系统会自动获取点击点的坐标,然后计算出这条路线视点参数、目标点参数,然后把这些参数带入函数gluLookAt()中,来回地绘制场景,这样就完成了三维场景的路线漫游。在Windows下编程时,用计时器来实现时间间隔。在编程环境下创建一个计时器,该计时器就隔一定时间通知Windows向窗口发送信息,Windows通过响应这个信息就能以一定的时间间隔来完成任务。

4.3 碰撞检测

在本文中实现碰撞检测采用的是层次包围盒法,这种方法的具体做法是:首先给场景中的对象建立方体包围盒,属性参数设置为隐藏;然后在用户指定路线上的模型时给每个对象添加包围盒,最后在场景中进行漫游时添加碰撞检测。实现碰撞检测的具体流程图如下。

图7 碰撞检测的流程图Fig.7 Flow chart of collision detection

根据上面的流程图,首先为每个模型定义包围盒,包围盒其实就是一个正六面体,其属性参数设为隐藏,具体碰撞检测的初始化代码如下:

stuct OBJPOSI

{

float x, h, z;

float sizew;

float sizel;

float sizeh;

float showscale;

int objnum;

float angle;

};

其中 float x,h,z设对象的位置;float sizew设置包围盒的宽,float sizel设置包围盒的长,float sizeh设置包围盒高;float showscale设置对象的缩放倍数;float angle设置对象的角度。

碰撞检测时首先判断这两个对象的包围盒是否发生了碰撞这样做不仅程序简单,而且计算准确。

4.4 连接数据库

通过上面的研究工作,为了达到与周围环境的交互效果,还需要增加数据库的功能,即把三维校园中的对象都收入到数据库中,当用户任意选择建筑物时,选择到的建筑物为参数可以到数据库中查找,并将建筑物的名称及面积实时地显示在桌面上。具体实现过程是:首先获取用户点击对象的名称;然后在数据库中根据对象的名称查找相关的信息;最后将信息输出到桌面上。

由于这个三维场景的数据量不太,选择Access数据库就可以了。首先编写dll文件实现必要的函数接口。

boolg_open_db(); //初始化数据库

voidg_get_value(const char*valuename, const

char*id, const char*value);

//设置数据标注的脚本

支持

boolg_close_db(); //关闭数据库

这样数据库中的信息可以随时随军地更新,这样用户在交互式漫游时,可以随意点击触发,同时对于场景中出现的建筑物通过数据库查找更加详细的信息。

4.5 虚拟漫游系统的生成

为了实现能在虚拟场景中漫游,而且与周围场景发生交互,产生身临其境的感觉。需要在场景中添加背景音乐增强场景的沉浸感,首先选择一个适合场景的音乐作为背景音乐,这时需要应用脚本编辑器,在数据库函数类型中创建函数的初始化,然后添加背景音乐脚本,并插入语句设置其相关属性[8]。

经过以上过程的创建包括创建三维场景的构造、自然现象的模拟、数据库的设计、交互场景的构造及碰撞检测的实现等工作的完成,校园虚拟漫游系统的开发基本完成,其实现的效果图如图8所示。

图8 校园虚拟系统效果图Fig.8 Virtual system on campus

5 结语

高职院校作为以职业技能为主,我们需要的不是高科技,而是更为先进的理念和创新。互联网高速发展正在改变着人们的生活,虚拟现实技术正把越来越多的网上场景改造成真正的 3D场景,所以虚拟现实的明天在网络,网络的明天在虚拟现实。本系统可以推广到其它的虚拟系统应用和实现中,如“虚拟城市、虚拟小区”的研究和实现中。

猜你喜欢

碰撞检测漫游纹理
全新预测碰撞检测系统
基于BIM的铁路信号室外设备布置与碰撞检测方法
使用纹理叠加添加艺术画特效
霹雳漫游堂
Unity3D中碰撞检测问题的研究
TEXTURE ON TEXTURE质地上的纹理
NASA漫游记
消除凹凸纹理有妙招!
BIM技术下的某办公楼项目管线碰撞检测
边走边看:漫游海底 梦想成真