基于OpenGL的三维建筑可视化研究与仿真
摘 要: 为了实现虚拟图书馆的可视化仿真,综合运用实地测量、参考建筑图纸、拍摄等方法获取图书馆的外形轮廓,通过数学建模得到整个图书馆的数学建模,再借助基于C++的几何库,将图书馆的数学建模转化为图形实例,最后结合OpenGL技术,通过运用光照、材质和纹理,渲染出整个图书馆,使得图书馆仿真逼真、自然。仿真结果表明,构建的虚拟图书馆逼真地展现了图书馆的形态特征,真实感较好,为虚拟建筑的模拟提供了技术参考。
关键词: 数学建模; 几何库; OpenGL; 建筑仿真
中图分类号: TN911.71?34; TP391.41 文献标识码: A 文章编号: 1004?373X(2016)02?0078?04
Visualization research and simulation of OpenGL?based 3D architecture
MIN Fang1, ZHANG Zhixian2, YANG Gongting1
(1. Jincheng College, Nanjing University of Aeronautics and Astronautics, Nanjing 211156, China;
2. College of Automation, Nanjing University of Aeronautics and Astronautics, Nanjing 210016, China)
Abstract: In order to realize the visual simulation of the virtual library, the outline of the library is obtained by comprehensively using the methods of field measurement, architectural drawings reference, photographs, etc. The mathematical modeling of the entire library is obtained by mathematical expression, and converted into the graphic instance by virtue of the geometry library based on C++. In combination with OpenGL technology, the entire library is rendered by illumination, material and texture, which makes the library simulation realistic and natural. The simulation results show that the constructed virtual library can realistically exhibit the morphological characteristics of the library, and has perfect sens of reality, which provides a technical reference for virtual architecture simulation.
Keywords: mathematical modeling; geometry library; OpenGL; building simulation
0 引 言
虚拟三维建筑是虚拟现实研究领域的热点课题之一。虚拟建筑由数学建模、几何库、纹理和渲染等组成;其中建筑中各构件数学建模和几何编程,具有较高的挑战性。虚拟建筑在大型建筑的早期演示和论证、房地产演示等方面有着广大的应用场景[1]。目前,针对虚拟建筑仿真,国内外专家学者开展了一系列研究。文献[2]提出了一种面向对象的支持三维图形可重用的组件层次设计方法,分析了组件的性能、设计方法和图元算法,实现了基于OpenGL的支持三维虚拟场景、建模和运动仿真的组件设计,描述了实体的运动层次链接关系和数据结构,并实现了虚拟环境的建筑物建模和运动仿真。文献[3]采用了2种技术:基于图像的建模方法和基于几何网格顶点着色的建模方法,并对虚拟场景的光照、消隐、纹理影射技术等作了初步的探索。文献[4]提出OpenGL的特点和工作原理,详细论述了如何建立VC和OpenGL库应用接口及进行三维图形开发的具体步骤和基本过程,最后通过三维地形图绘制实例的过程分析,便于用户理解运用。本文以南京航空航天大学金城学院图书馆作为研究对象,实现特点如下:对几何图形数学建模;使用C++语言建立几何库;通过OpenGL编程,添加纹理,渲染虚拟图书馆模型;验证数学模型和几何库在虚拟建筑可视化研究的可行性。
整个系统模型的实现如图1所示。
1 几何库
1.1 点的实现
点类的数据成员是双精度浮点型数组xyz,以及记录数组大小的整型变量dim。点类的意义是表示在空间之间坐标系中的具体坐标。点类定义如图2所示。
图1 系统模型图
图2 点类
点作为空间几何中最基本的单位,对整个几何库具有十分重要的意义:几何库中的大部分构件计算与求解,最终要归结到点类实现。即当确定了点在空间坐标系中的位置之后,便可以实现一些基本构件(如线、面等)的计算与求解[4?5]。OpenGL渲染点的效果图见图3。
图3 渲染点
1.2 线的实现
直线的实现是以点为基础的。在空间直角坐标系中,一个坐标有多种含义:它既可以表示空间中的一个点;也可以表示一个有长度有方向的向量。因此在直线的定义中,运用了坐标的这两种含义。线类定义如图4所示。
图4 线类
直线由2个点类对象组成:bas表示一个点,为该直线上的一个点,vec表示一个向量,为该直线的方向。
在几何库中,默认直线的长度是无限的。这种表示方法的优势在于,根据具体应用场景的不同,可以理解成直线、射线和线段来使用。例如:当作为射线时,bas便代表它的起点,而vec就是它射向的方向;当作为线段时,bas便作为线段的一个点,vec的方向是它延伸的方向,vec的长度则是线段在该方向上的长度。OpenGL渲染直线的效果图如图5所示。
图5 渲染线
1.3 面的实现
面的实现也是以点为基础。在本系统中的几何库,对于面的表示和直线相同。只是对平面类中,相关的成员变量的理解和直线略有不同,面类定义如图6所示。
图6 面的类图
平面也是由2个点类对象组成。首先需要明确一点,就是一个面类的对象所表示的面是无限大的。其中bas指所表示的平面上的一个点,而vec则指所表示平面,以bas为起点,vec为方向的一条射线,这条射线为该平面的法向量。
2 数学建模
2.1 空间坐标系的构建
在建立空间直角坐标系时,假设观察者正面对着图书馆大门,设此方向为z轴的正方向,其上方为x轴的正方向,而右侧为y轴的正方向。
确立各个坐标轴的方向之后,给坐标轴设置一个原点。因为模拟的图书馆总体上为对称的结构。所以将图书馆两侧的中点设为y轴的原点,图书馆一楼的地面位置设为x轴的原点,面对观察者最近的台阶位置为z轴的原点[6],如图7所示。
2.2 比例尺的构建
本系统需要用计算机编程渲染模拟图书馆;虚拟场景中构成图书馆的每一个柱子每一根梁都必须满足一定的比例从而让渲染出的图书馆显得更加真实。因此,就必须用一定的比例对图书馆进行缩放。
图7 空间直角坐标系图
参考图书馆的设计图纸,将其按一定比例缩放到系统中。图书馆的外墙实现时,解决思路是全部贴上了规格一致的砖块,便可以将一个砖块的长宽设为一个基础单位,而在图书馆的整体渲染时,也会对每一个砖块进行单独的渲染,从而解决比例尺的问题[7]。
2.3 构件的表示
在完成坐标系和比例尺的构建之后,便可以表示构成图书馆的各个构件,这里的构件则是由虚拟建筑的几何实体或几何实体经过一系列运算所构成。
每一个构件都具有两个最基本的属性,即位置和参数。构件数学建模如式(1)所示:
[constructionpos,args] (1)
式(1)中construction表示构件;pos表示构件的位置;args表示构件的参数。
构件的位置是一个坐标,这个坐标为该构件在空间直角坐标系,按照z轴、x轴和y轴的优先级,选择值最小的坐标点。即所有构件上的点中,选出z轴上值最小的点,如果不止一个,在当中选出x轴上值最小的点,若还有重复,再比较y轴,选出y轴上值最小的点。该点即为该构件的位置。构件的参数是一系列的值,表示该构件的形状信息,如果一个构件为一个长方体,则构件的参数便为构件的长、宽和高。
有了构建之后,可以把整个图书馆作为对一系列构件进行求和操作的结果。
图书馆数学建模如式(2)所示:
[library=constructionpos,args] (2)
2.4 构件建模流程
本文所渲染模拟的建筑场景为南航金城学院的图书馆。图书馆的建筑风格方方正正,有棱有角,因此其构件基本上都为长方体的各种组合,这里以图书馆门前台阶为例,介绍对构件建模的大致流程。
台阶数学建模如式(3)所示:
[stairs(pos,len,wid,hei,num)] (3)
其中,pos表示台阶构件的位置坐标;len表示1节台阶的长度;wid表示1节台阶的宽度;hei表示1节台阶的高度;num表示台阶的总级数。
这里把台阶的每一级都看成为一个单独的长方体,而整个台阶,便是由一个个高度不断增加的长方体堆积而来。 根据上述表达式不难理解,pos为最初起始矩形的坐标,该矩形的长宽高也为输入的长宽高的值。而第二个矩形一直到第num个矩形,其起始坐标的z值加上宽度便为其位置坐标。对于其参数信息,长方体的长和宽不变,高度累加。也可以理解成,台阶中每一个长方体构件的坐标的z值和参数的高度值为一个等差数列,不断变化。公式表示如下:
[stairs=inumCubei(posi,len,wid,heii)](4) [posi?z=pos1?z+(i-1)?wid] (5)
[heii=hei+(i-1)?hei] (6)
3 渲 染
对场景的渲染可以分为四部分,选择视角、渲染点、光照与材质和纹理的设定[8?9]。
渲染具体算法描述如下:
算法输入:图书馆的数学模型
算法输出:渲染成果
算法步骤:
(1) sysinit() //系统初始化
(2) light_on() //光照初始化
(3) texture_on() //纹理初始化
(4) texture_bind() //绑定纹理
(5) while !mod.empty() //当渲染模型栈非空
(6) rend = mod.pop() //模型栈弹栈
(7) render(rend) //渲染模型
(8) end
4 实验结果与分析
4.1 点线渲染
首先,需要渲染出构件的点线模型如图8所示。
图8 渲染示例图1
这样做既可以检测构件的几何空间正确性,同时,这也是选择视角的基础,只有在有渲染图形的基础上,才可以根据已渲染的图形对视角进行调整。但如图8的渲染结果明显偏大,因此需要选择一个合适的视角,对渲染的图形进行观察,如图9所示。
图9 渲染示例图2
通过反复修改视角,得到一个较为贴近真实场景的图形,之后便可对图形进行光照和材质的加工[10],如图10所示。
图10 渲染示例图3
4.2 图书馆整体渲染
图书馆实物图如图11所示。
图11 图书馆实物图
加入大理石纹理的图书馆如图12所示。
图12 大理石纹理
加入木质纹理的图书馆如图13所示。
图13 木质纹理
5 结 语
本文以虚拟图书馆建模为例,介绍了虚拟建筑建立几何库、数学建模过程以及可视化仿真的过程和方法。今后希望能从几何库、数学建模和渲染这3个方面入手,提高系统的效率和稳定性,同时,通过完善改进对光线的模拟,以及图书馆材质的反复试验测试,使得渲染出的图书馆更加贴近真实的观测效果。
参考文献
[1] 徐旭东,王菁.基于OpenGL的虚拟吊兰建模与可视化研究[J].计算机工程与设计,2014,34(12):4304?4309.
[2] 周静海,宋晓宇,王永会.基于OpenGL的三维建筑设计组件的设计与实现[J].小型微型计算机系统,2002,23(6):766?768.
[3] 牛凤枝.基于OpenGL的三维场景再现研究[D].天津:河北工业大学,2006.
[4] 潘忠英.基于OpenGL的三维可视化方法研究[J].计算机与数学工程,2014,42(3):512?516.
[5] 罗笑南,王若梅.计算机图形学[M].3版.广州:中山大学出版社,2008:110?123.
[6] 杨柏林,陈根浪,徐静.OpenGL编程精粹[M].北京:机械工业出版社,2010:278?300.
[7] 朱炜.在Windows环境下设置基于VC++的OpenGL图形接口[J].计算机与网络,2007(8):173?174.
[8] 周扬,刘永涛.基于OpenGL的事故三维综合演示平台[J].重庆理工大学学报(自然科学版),2015(4):77?80.
[9] 邓军勇,李涛,蒋林,等.面向OpenGL的图形加速器设计与实现[J].西安电子科技大学学报(自然科学版),2015(3):143?149.
[10] 郑佳荣,王强,占文锋.三维建模方法研究现状综述[J].北京工业职业技术学院学报,2013,12(4):5?7.
[11] 史俊,富刚.基于OpenGL的语音控制数控加工仿真的研究[J].现代电子技术,2010,33(11):121?124.
[12] 王承祥,鞠建波,陶晨辰.基于VC++和OpenGL声纳浮标系统模拟器操作界面设计[J].现代电子技术,2012,35(14):137?139.