APP下载

三维校园虚拟现实平台的设计与实现

2015-01-06刘小英张健

湖北农业科学 2014年12期
关键词:漫游纹理虚拟现实

刘小英+张健

摘要:虚拟校园是虚拟现实技术的一个重要应用方面,通过虚拟校园,人们只需要一台计算机即可了解校园整体风貌。以攀枝花学院主体建筑为研究对象,利用SketchUp构建三维模型,应用GIMP进行纹理贴图处理。运用VC++6.0结合OpenGL技术,读取三维模型,实现漫游交互控制及碰撞检测功能。系统运行表明,该系统场景逼真,能够展现学校风貌,为学校提供了一个新的窗口。

关键词:虚拟校园;OpenGL;VC++6.0;SketchUp

中图分类号:TP391.9        文献标识码:A        文章编号:0439-8114(2014)12-2909-04

Design and Implementation of Virtual Reality Platform for 3D Campus

LIU Xiao-yinga,ZHANG Jianb

(a. School of Mathematics and Computer Science; b. School of Transportation and Automobile Engineering, Panzhihua University,

Panzhihua  617000, Sichuan, China)

Abstract: Virtual campus is an important application about virtual reality technology. People only need a computer to have the overall view of the campus through the virtual campus. Taking the main building of Panzhihua university as a research object, using SketchUp to build 3D model and GIMP to process texture mapping, and VC++6.0 and OpenGL technology, the 3D model was read, and then the roaming interactive control and collision detection function were implemented. The system operation showed that the system could show realistic scenes of the school and provide school views with a new window.

Key words: virtual campus; OpenGL; VC++6.0; SketchUp

虚拟现实技术是一种融合了计算机图形技术、多媒体技术和仿真技术等多种技术的综合集成技术[1]。虚拟现实技术已被广泛应用于视景仿真、虚拟工程设计、文化遗产数字化保护等领域[2,3]。随着虚拟现实技术的发展,虚拟校园的构建已经成为各大高校学者研究的热点。虚拟校园结合地理信息技术、虚拟现实技术、计算机网络技术等高新技术,实现对真实校园环境中的三维景观的数字化和虚拟化[4]。构建虚拟校园系统,并发布在校园网站或者其他网络上,使很多使用者不用亲临学校,即可了解校园整体风貌。

SketchUp是目前最流行的三维建模及渲染软件,被广泛用于室内设计、建筑建模、虚拟现实等领域[5,6],其构造模型方法简单易上手,模型美观,便于虚拟校园多场景构建。OpenGL作为开发交互式的三维应用程序方面使用最为广泛且有着高度评价的3D图形接口,作为一个性能优越的图形API,OpenGL主要能实现基本图形的绘制、三维图形的几何变换、提供RGBA和颜色索引两种颜色模式、提供辐射光、漫反射光和镜面光以及制定图形表面的反射特性,即材质属性设置、提供纹理映射功能、提供三维人机交互接口,用户可以通过输入输出设备进行交互操作[7,8]。利用SketchUp构建了攀枝花学院主体建筑的三维场景模型,应用VC++6.0并结合OpenGL技术,实现了攀枝花学院校园的虚拟漫游。

1  校园虚拟场景的构建

通过导入学校的卫星地图来参照各个建筑之间的位置关系,进行场景的逼真布局。以攀枝花学院为真实场景参照,利用SketchUp构建虚拟模型。由于模型构建的数据量较大,所以在构建场景时采用对模型先建造后合并的方法。校园虚拟场景构建流程如图1所示。

1.1  数据采集与处理

要使构建的校园建筑形象逼真,需对建筑表面进行逼真的纹理贴图,使构建的校园场景具有沉浸感。因此需要大量的平面及立体资料,数据采集工作就显得尤为重要,主要分为以下两个方面:

1)校园平面信息的获取及建筑物的高度信息确定。卫星地图是部分地理数据的真实反映,通过电子地图和卫星地图作为参考。卫星地图具有比例尺,根据地图的比例尺来确定模型的长宽比例和在校园内的相对位置。采用测量和几何估算来获取建筑物的高度信息,如可以通过测量某建筑单层的高度乘以楼层数来估算出该建筑的整体高度。

2)对建筑整体和局部的细节进行数据采集,采集的建筑局部细节需进一步处理作为纹理贴图。数据的处理主要是利用Photoshop软件对采集回来的图片资料进行裁剪,调整大小,并导出为.bmp格式的位图,用做模型的纹理贴图。

1.2  校园建筑物场景模型的建立

1.2.1  模型建立  虚拟三维立体建模和漫游技术是虚拟现实的基础[9,10]。系统模型是由SketchUp建立的,首先将采集到的卫星地图导入SketchUp,将其做为背景构建虚拟校园地平面,以确定建筑的相对位置及方位的逼真度,然后参照此信息进行建模。校园的卫星地图及平面三维建模图如图2所示。endprint

图3展示的是校园主要建筑物分析测试中心主观比例建模和真实尺寸建模的对比图。通过对比可以看出,主观建模不美观且不真实,和实际建筑相差甚远;而真实尺寸建模美观大方,符合建筑美学以及黄金分割比例,真实感较强,有沉浸感。因此,具体建模时一定要运用真实尺寸建模,利用SketchUp中的测量工具,测出建筑的真实尺寸比例,只有严格按照真实尺寸建模才能达到美观逼真的效果。

1.2.2  模型优化与贴图  模型建立好后,在贴图之前还需要对模型进行一些优化操作,需要去掉模型表面不需要的线条和隐藏的平面,一方面可以减少纹理图片的数量;另一方面在模型文件被加载到程序中时可以避免因计算多余的面而造成的系统资源的浪费。

纹理贴图的制作是通过SketchUp对某一平面设置自定义纹理,并导出纹理为图像。导出的纹理图像用来作为纹理贴图制作时的尺寸模板,将其用GIMP作为图层打开。然后,在GIMP中导入墙体、门窗图片作为图层,制作建筑物墙面的纹理贴图。在GIMP中将制作好的纹理贴图导出为位图格式的图片,通过SketchUp导入到虚拟模型中,并勾选“用作图像”选项,将纹理图像贴在正确的平面上。此时就可以将贴上纹理图像的平面删掉,只保留纹理图像。用同样的方法对其他平面进行纹理贴图。建好模型后,选用SketchUp的导出功能导出成3DS文件。

分析测试中心、会堂、办公楼、图书馆及第二教学楼等校园主要建筑的建模及贴图后的SketchUp渲染效果如图4所示。

1.2.3  模型合并  在单个建筑的模型建好后,将所有模型加载到同一个场景中,并对模型的位置和大小进行调整,使其看起来更自然更逼真。图5所示为建好后的虚拟场景部分展示。

2  3DS模型文件的读取

将模型转换为3DS模型文件以后,需要导入到OpenGL程序框架中,首先需要对VC++6.0中的OpenGL编译环境进行设置,环境设置好后,开始导入3DS格式文件,在OpenGL中重新构建并显示学校建筑模型。在读入3DS格式文件时,程序首先要判断该文件是不是3DS格式,若不是则直接返回,不进行任何操作,若是3DS文件则进入下一步操作,即读取文件中的模型数据。在读取数据时,可以根据实际需要选择性地读入需要的块,忽略一些未知的块。在读入块结构数据时,可以用递归的方法实现,返回上一级的条件是当前已经读入的块的字节数是否等于块的长度;从父块转向读入其子块,用Switch语句实现,通过子块的ID号来判断进入哪个分支。程序流程图如图6所示。

读取3DS文件后,利用OpenGL自带的函数添加灯光效果,并利用贴图函数添加天空、水泥地面及草地,使其场景显得更为真实。

3  人机交互漫游的设计

人机交互漫游是通过键盘对漫游视角进行控制,当视点的位置、方向和参考点发生改变时,场景中的物体相对于观察者的方位也发生了改变,从而产生了“动感”,达到能进能退、能够旋转、视角俯仰、沉浸其中的效果。

系统中的视点即为人的眼睛,对场景显示的漫游控制在OpenGL中利用gluLookat()函数,通过设置相应的参数来达到漫游的效果。由于OpenGL的坐标系和3DS Max的坐标系是不同的,3DS Max中模型的z轴指向上方,而OpenGL中模型的z轴是垂直屏幕指向用户的,因此需要将顶点坐标的y轴和z轴翻转过来。本系统由键盘执行的漫游命令包括场景左右旋转、场景缩放、视点改变等。响应左、右旋转命令时,视点保持不变,分别绕z轴沿逆、顺时针旋转一定角度;响应场景缩放命令时,视点分别沿视线方向移动一定距离。按照这种响应方法,通过空间向量分解运算,即可计算出新的视点和参考点坐标。人机交互控制功能键及功能如表1所示。

4  碰撞检测技术的实现

确定了建筑的位置信息后,参照建筑的方位,才能确定出需要碰撞检测的墙面位置信息。系统要能进行碰撞检测,也就是说检测观察者在行进中是否遇到了阻碍,如到了墙边,则不能继续前进,不能出现穿墙而过的情况。碰撞检测的原理是首先通过if函数判断障碍,遇到障碍则返回为真,没遇到则返回为假。对树木实行碰撞绕行方法,即视点行走到树木面前,如果有障碍,则x方向回原点,或者x方向不变,y方向回原点,如果没障碍,绕行。

以图书馆及树木的碰撞检测为例,核心代码如下:

BOOL baiscobj::iftf(float x,float z,int i)      //判断障碍

{ if  (x>=295 && x<=310)//判断图书馆凸出墙

{

if (( z<= -313 && z>= -335) || (z<= -473 && z>= -495))

// AfxMessageBox("22222111111");

return TRUE;

}

else if (x>=290 && x<=297)//判断图书馆正面墙

{

if ( (z<= -265 && z>= -380) || (z<= -435 && z>= -545))

{

return TRUE;

}

}

对树木的碰撞绕行核心代码如下:

void baiscobj::zangan(float x,float z)//碰撞绕行

{endprint

//AfxMessageBox("11111");

float pp;

for(int  i=0;i<=40;i++) //树木障碍检测

{

if(iftf(g_eye[0],g_eye[2],i)) //有障碍

{

pp=g_eye[0];g_eye[0]=x; //x方向回原点

if(!iftf(g_eye[0],g_eye[2],i))

continue ; //没障碍,绕行。

else

g_eye[0]=pp; //有障碍,x方向不变

pp=g_eye[2];

g_eye[2]=z; //y方向回原点

if(!iftf(g_eye[0],g_eye[2],i))  ; //没障碍了,绕行。return

else

g_eye[2]=pp; //有障碍,y方向不变

}

}

}

5  结论

应用SketchUp建模工具对攀枝花学院的主体建筑和校园整体平面建立虚拟模型,利用GIMP建立建筑纹理贴图,最后进行模型合并,结合Windows环境下OpenGL图形编程实现了三维校园虚拟现实平台的建立,实现了人机交互控制及碰撞检测,系统运行表明,该系统场景逼真,能够展现学校风貌,使用户不必亲临攀枝花学院即可了解学校的整体风貌,具有较强的沉浸感及实用价值。

参考文献:

[1] 王振德,王艳春.虚拟现实技术及其在虚拟校园中的应用研究[J].安徽农业科学,2013,41(7):3223-3224,3235.

[2] 任  镤,王文剑,白雪飞. 基于虚拟现实技术的山西大学堂建筑复原[J].计算机仿真,2012,29(11):20-24.

[3] 黄志锋,李  笑,秦辉明.基于OpenGl和SolidWorks的遥操作工程机器人建模与仿真[J].机机械设计与制造,2012(12):157-159.

[4] 王艳安,曾俊峰,安运华.长江大学校园虚拟漫游系统设计[J].湖北农业科学,2010,49(9):2237-2240.

[5] 兰玉芳,付金霞,徐霞华,等.基于SketchUp与ArcGIS的校园3DGIS的设计与实现[J].遥感技术与应用,2013,28(2):346-351.

[6] 张瑞菊. SketchUp 结合Google Earth在虚拟校园中的应用[J].计算机应用,2013,33(S1):271-272,297.

[7] 柏  林,陈根浪,徐  静. OpenGL编程精粹[M].北京:机械工业出版社,2010.1-2.

[8] 樊雅萍,黄生学,温佩芝,等. 基于OpenGL的机器人虚拟漫游系统开发[J].系统仿真学报,2005,17(10):2426-2428,2441.

[9] 原发杰,路立伟,邱健壮.校园三维虚拟漫游系统的建设研究[J].山东农业大学学报(自然科学版),2011,42(4):586-590.

[10] 张青峰,吴发启,周  淑,等.校园虚拟漫游设计初探[J].测绘科学,2005,30(6):124-126.endprint

//AfxMessageBox("11111");

float pp;

for(int  i=0;i<=40;i++) //树木障碍检测

{

if(iftf(g_eye[0],g_eye[2],i)) //有障碍

{

pp=g_eye[0];g_eye[0]=x; //x方向回原点

if(!iftf(g_eye[0],g_eye[2],i))

continue ; //没障碍,绕行。

else

g_eye[0]=pp; //有障碍,x方向不变

pp=g_eye[2];

g_eye[2]=z; //y方向回原点

if(!iftf(g_eye[0],g_eye[2],i))  ; //没障碍了,绕行。return

else

g_eye[2]=pp; //有障碍,y方向不变

}

}

}

5  结论

应用SketchUp建模工具对攀枝花学院的主体建筑和校园整体平面建立虚拟模型,利用GIMP建立建筑纹理贴图,最后进行模型合并,结合Windows环境下OpenGL图形编程实现了三维校园虚拟现实平台的建立,实现了人机交互控制及碰撞检测,系统运行表明,该系统场景逼真,能够展现学校风貌,使用户不必亲临攀枝花学院即可了解学校的整体风貌,具有较强的沉浸感及实用价值。

参考文献:

[1] 王振德,王艳春.虚拟现实技术及其在虚拟校园中的应用研究[J].安徽农业科学,2013,41(7):3223-3224,3235.

[2] 任  镤,王文剑,白雪飞. 基于虚拟现实技术的山西大学堂建筑复原[J].计算机仿真,2012,29(11):20-24.

[3] 黄志锋,李  笑,秦辉明.基于OpenGl和SolidWorks的遥操作工程机器人建模与仿真[J].机机械设计与制造,2012(12):157-159.

[4] 王艳安,曾俊峰,安运华.长江大学校园虚拟漫游系统设计[J].湖北农业科学,2010,49(9):2237-2240.

[5] 兰玉芳,付金霞,徐霞华,等.基于SketchUp与ArcGIS的校园3DGIS的设计与实现[J].遥感技术与应用,2013,28(2):346-351.

[6] 张瑞菊. SketchUp 结合Google Earth在虚拟校园中的应用[J].计算机应用,2013,33(S1):271-272,297.

[7] 柏  林,陈根浪,徐  静. OpenGL编程精粹[M].北京:机械工业出版社,2010.1-2.

[8] 樊雅萍,黄生学,温佩芝,等. 基于OpenGL的机器人虚拟漫游系统开发[J].系统仿真学报,2005,17(10):2426-2428,2441.

[9] 原发杰,路立伟,邱健壮.校园三维虚拟漫游系统的建设研究[J].山东农业大学学报(自然科学版),2011,42(4):586-590.

[10] 张青峰,吴发启,周  淑,等.校园虚拟漫游设计初探[J].测绘科学,2005,30(6):124-126.endprint

//AfxMessageBox("11111");

float pp;

for(int  i=0;i<=40;i++) //树木障碍检测

{

if(iftf(g_eye[0],g_eye[2],i)) //有障碍

{

pp=g_eye[0];g_eye[0]=x; //x方向回原点

if(!iftf(g_eye[0],g_eye[2],i))

continue ; //没障碍,绕行。

else

g_eye[0]=pp; //有障碍,x方向不变

pp=g_eye[2];

g_eye[2]=z; //y方向回原点

if(!iftf(g_eye[0],g_eye[2],i))  ; //没障碍了,绕行。return

else

g_eye[2]=pp; //有障碍,y方向不变

}

}

}

5  结论

应用SketchUp建模工具对攀枝花学院的主体建筑和校园整体平面建立虚拟模型,利用GIMP建立建筑纹理贴图,最后进行模型合并,结合Windows环境下OpenGL图形编程实现了三维校园虚拟现实平台的建立,实现了人机交互控制及碰撞检测,系统运行表明,该系统场景逼真,能够展现学校风貌,使用户不必亲临攀枝花学院即可了解学校的整体风貌,具有较强的沉浸感及实用价值。

参考文献:

[1] 王振德,王艳春.虚拟现实技术及其在虚拟校园中的应用研究[J].安徽农业科学,2013,41(7):3223-3224,3235.

[2] 任  镤,王文剑,白雪飞. 基于虚拟现实技术的山西大学堂建筑复原[J].计算机仿真,2012,29(11):20-24.

[3] 黄志锋,李  笑,秦辉明.基于OpenGl和SolidWorks的遥操作工程机器人建模与仿真[J].机机械设计与制造,2012(12):157-159.

[4] 王艳安,曾俊峰,安运华.长江大学校园虚拟漫游系统设计[J].湖北农业科学,2010,49(9):2237-2240.

[5] 兰玉芳,付金霞,徐霞华,等.基于SketchUp与ArcGIS的校园3DGIS的设计与实现[J].遥感技术与应用,2013,28(2):346-351.

[6] 张瑞菊. SketchUp 结合Google Earth在虚拟校园中的应用[J].计算机应用,2013,33(S1):271-272,297.

[7] 柏  林,陈根浪,徐  静. OpenGL编程精粹[M].北京:机械工业出版社,2010.1-2.

[8] 樊雅萍,黄生学,温佩芝,等. 基于OpenGL的机器人虚拟漫游系统开发[J].系统仿真学报,2005,17(10):2426-2428,2441.

[9] 原发杰,路立伟,邱健壮.校园三维虚拟漫游系统的建设研究[J].山东农业大学学报(自然科学版),2011,42(4):586-590.

[10] 张青峰,吴发启,周  淑,等.校园虚拟漫游设计初探[J].测绘科学,2005,30(6):124-126.endprint

猜你喜欢

漫游纹理虚拟现实
使用纹理叠加添加艺术画特效
TEXTURE ON TEXTURE质地上的纹理
REALITY BITES
NASA漫游记
虚拟现实技术向科幻小说借灵感
消除凹凸纹理有妙招!
浅谈虚拟现实
边走边看:漫游海底 梦想成真