基于C#和Direct X的三维虚拟校园构建探讨

2015-03-28 06:10张继超马洋洋董塞漠
测绘工程 2015年1期
关键词:楼体窗体摄像机

张继超,马洋洋,董塞漠

(1.辽宁工程技术大学 测绘与地理科学学院,辽宁 阜新123000;2.中国伊斯兰教协会,北京100053)

随着虚拟现实技术的发展和“数字地球”概念的提出与广泛实践,对三维虚拟校园的构建研究也越来越多。三维虚拟校园可提供校园的虚拟环境,让人足不出户就能实现对该场景的漫游与交互,从而达到身临其境的主观感受。

Direct X自从1995年出现以来,己成为目前计算机领域中最广泛的3D标准规范,在众多3D开发领域得以应用。而C#开发语言,不仅能够实现对Direct X自身强大的渲染功能的调用,而且能将操作者的意图运用图像界面流畅地表现出来[1]。3DSMax是由Autodesk旗下的公司开发的三维建模和动画制作软件,具有强大、完美的三维建模功能,是当今世界上最流行的三维建模、动画制作及渲染软件。本文利用 C#调用 Direct X[2-3],结合3DSMax建模工具,对三维虚拟校园的构建方法进行探讨,并以辽宁工程技术大学(中华路校区)为例,实现了三维虚拟校园的初步构建。

1 三维建模背景及相关理论

1.1 三维建模理论

三维模型是物体的三维多边形表示,通常用计算机或者其它视频设备进行显示。显示的物体可以是现实世界的实体,也可以是虚构的东西,既可以小到原子,也可以大到很大的尺寸。任何自然界存在的物体都可以用三维模型表示[4]。

三维模型广泛用于任何使用三维图形的地方。实际上,它们的应用早于个人电脑上三维图形的流行。许多计算机游戏使用预先渲染的三维模型图像作为sprite用于实时计算机渲染

近年来,随着数字城市的发展,三维模型也在地球科学领域得到广泛应用,如建立数字高程模型、三维地质模型、数字小区、数字校园[6]等。

三维模型本身是不可见的,为增加模型的真实效果,常采用纹理映射或其他方法(如调整曲面法线、立体渲染等)来增强模型。

1.2 摄像机视图矩阵

为了将真实世界的对象以三维模型的形式表达出来,需要将世界空间的对象先转换为模型自身的空间坐标系,然后利用摄像机空间展示显示区域,其转换过程如图1所示。

图1 三维坐标转换过程

摄像机空间转换的过程需要3个参数:即摄像机位置、目标位置以及摄像机上下方向,这3个参数又称为摄像机矩阵,都为空间向量[7]。在Direct X中可以通过这3个向量形成一个视图矩阵。即以摄像机位置为起点、摄像机目标位置为终点的单位向量作为摄像机空间的Z′轴坐标(相对于世界空间),然后根据左手法则或右手法则计算出摄像机空间的X′轴坐标,最后计算出摄像机空间的Y′轴坐标。所以视图矩阵中保存摄像机空间X′,Y′,Z′轴坐标在X,Y,Z方向上的分量,以及在摄像机空间中世界坐标原点的位置,如图2所示。

图2 视图矩阵

2 C#调用Direct X构建虚拟场景

利用C#调用Direct X接口,完成场景的搭建、材质灯光的导入、场景整体渲染、摄像机导入等功能。

2.1 项目初步配置

1)新建项目并添加新建项。新建一个Visual C#空项目,设置其项目名称,在解决方案资源管理器中选择项目名称并添加新建项。

2)添加窗体及引用。在 “添加新项”窗体上选择“Windows窗体”模板,完成窗体添加,并在主菜单上选择“项目—添加引用”,在.NET中添加Direct X和 Direct X.Direct3D(X)等组件,完成 Direct X的调用。

2.2 3D场景底图构建

在全局中定义顶点变量,设置贴图图片上的水平和垂直位置的坐标分别为Tu和Tv,其中贴图坐标(0,0)表示图片左上角,贴图坐标(1,1)表示右下角。在全局中定义贴图变量texture及材质变量material,分别用于保存贴图图片对象和材质对象,通过指定材质类型可以设置三角形表面的反射等方式。将场景图片文件复制到项目目录下作为场景的底图,并修改渲染函数,导入贴图和材质函数的相关代码,进行渲染,然后以上述类似的方式绘制三角形,将两三角形拼接到一起,构建整个场景底图。

2.3 摄像机导入及设置

调整三角形顶点坐标及摄像机位置,然后修改摄像机函数Set Up Ca mera()中视图矩阵的代码,对摄像机进行旋转[8]。以围绕Y轴选择为例,首先在全局中定义旋转角度及摄像机位置等变量,然后修改摄像机函数,设置键盘输入的Left和Right键来控制摄像机的左右旋转,并通过直接添加窗体的On Key Down()重载函数来实现。

值得注意的是,上述过程实现了摄像机左右旋转的功能,但是这个旋转是相对于世界坐标系的Y轴,如果摄像机空间坐标系的Y轴和世界坐标系的Y轴不为同一个方向,这将导致旋转功能无法完全实现。因此在定义旋转轴时,应以摄像机空间坐标系的Y轴方向为旋转轴。除了左右旋转外,摄像机还应具有上下旋转来调整视角的功能,此时,其旋转轴为摄像机空间坐标系的X轴。

摄像机缩放的控制,可以通过设置摄像机位置的比例函数Scale()来实现。在窗体的 On-Key Down()重载函数中添加缩放摄像机代码,并可设置键盘快捷键(如键盘加号(+ 表示放大、减号(-)表示缩小)控制摄像机的放大和缩小操作。

2.4 绘制基本几何体

通过Direct3D绘制的每个对象都是由三角形组成的,一个三角形由3个点组成,而每个点都定义成一个向量来指定点的X,Y,Z坐标。所有基本体,主要是由长方体和球体组成[9]。对于任意一个六面体,其各顶点坐标编号如图3所示。

图3 六面体顶点坐标编号

通过绘制12个三角形即可形成图3所示的六面体,将该六面体的顶部和底部面、四周的面进行展开。值得注意的是,为了使顶面的法线向外(即顶点序号按顺时针排列),对于底部的面采用序号反向使得绘制的三角形可见。其结果如图4所示。

图4 立方体绘制结果

2.5 几何体的复制、贴图及场景搭建

在Direct X中,几何模型对象基本上都是通过Mesh来表示,它也是组成三维场景的基本元素之一。Mesh类具有一个Clone()方法用于复制网格对象至另外一个网格对象中,修改全局变量、初始化函数及渲染函数的相关代码,复制长方体,将之前建立的场景与几何体结合到一起,合并相关代码,进行整体三维场景的搭建[9]。将相关几何体进行材质贴图,使其变成完整楼体。

3 3DSMax模型构建

Direct X虽然可实现用户交互功能,运用鼠标与键盘的输入,多角度观测整体场景,但该软件的精度不高,对三维模型细节的渲染不够完善。因此,本文应用3DSMax软件对部分三维模型进行制作及渲染。

建模过程包括:三角网搭建、元素的对齐、线条的挤出、布尔运算、图形的缩放、空间坐标的选定、材质编辑以及渲染参数的设定等。

下面以致远楼为例,阐述3DSMax模型的构建过程。

1)绘制长方体,并设置其长、宽、高及材质,作为部分楼体轮廓,如图5所示。

图5 楼体轮廓

2)建立指定长方体,与楼体轮廓相交,运用布尔运算、复制阵列等,对楼体轮廓进行抠图,作为门窗的位置。

3)制作门窗,运用多个尺寸不同的长方体,按固定位置进行摆放,作为窗框、门框和玻璃,然后找到相关元素的材质参数,编辑材质,如图6所示。

图6 窗户制作

4)以同样的方式制作楼体轮廓的中心部分。运用镜像功能将楼体轮廓的右侧部分镜像并作为楼体的左侧部分,最后运用3DS的“倒角”和“挤出”功能,制作楼体的顶部及侧面元素并设置材质,如图7所示。

图7 镜像后模型

5)将所有制作完成的模型进行拼接,增加天光,设置高级照明参数并进行映射纹理,对模型进行渲染,如图8所示。

图8 渲染后“致远楼”模型

4 三维虚拟校园的构建

本文以辽宁工程技术大学(中华路校区)为例,结合校园遥感影像图和建筑物侧面照片纹理数据,进行了三维虚拟校园的构建。

4.1 3D场景互动平台构建

将校园遥感影像文件复制到项目目录下作为场景底图,修改渲染函数,导入贴图和材质函数的相关代码,进行渲染。然后,修改鼠标控制相关代码,得到校园3 D场景互动平台,如图9所示。

图9 校园3D场景互动平台

4.2 校园三维模型导入

在3DSMax下,选择具有普遍性、代表性以及真实场景的特殊性地物,完成典型地物要素的三维精确建模。主要包括:编辑地形、水泥地面及主要建筑物的导入、花坛的设计、草坪的渲染,并增加树木、垃圾箱、路灯等地物,提高虚拟校园的视觉效果。部分效果如图10所示。

5 结束语

本文基于C#调用Direct X,辅以3DSMax实现了三维虚拟校园的构建,包括三维场景的搭建;楼体元素的构建及导入;楼体贴图函数的运用及场景图的渲染;其他实体模型构建与导入;灯光及材质代码的编写;摄像机位置设置等。用户能够通过鼠标键盘等设备输入相关消息,并可以对三维场景进行多角度操作,真正实现了系统的用户交互功能。此外,通过3DMAX软件制作的模型场景,补偿了Direct X的表现效果,完善了三维虚拟校园的元素细节,增加了真实感。

[1] 肖泽云.基于Visual C#的Direct X开发实例[M].宜昌:三峡大学出版社,2010.

[2] 吴昊.关于C++BUILDER语言的Direct X开发问题的研究[J].软件导刊,2006,5(6):67-69.

[3] 李震宇.游戏开发之路——在C++Builder中进行Direct X编程[J].电脑编程技巧与维护,2000,6(3):72-86.

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

[5] 孙明杰,韩超.用C++6.0和Direct X实现太空射击游戏引擎[J].科技广场,2006,18(5):77-79.

[6] 王建敏,王凯,孟凡帅.校园三维景观设计与实现[J],测绘工程,2011,20(3):62-64.

[7] 徐黎明.Visual C++下Direct3D坐标变换的实现 [J].软件导刊,2008,7(2):77-79.

[8] LAH SAU MENG,KELVIN.Design and Development of a Peer-to-Peer Online Multiplayer Game Using Direct X and C#[A].TENCON 2004 IEEE Region 10 Conference,Singapore,2004:278-281.

[9] FENGHUA SHI.Visualization Modeling of Mine Road way based on Visual C#[J].Co mputer Society,2008,18(5):271-275.

猜你喜欢
楼体窗体摄像机
搭建我们的“幼儿园”
红砖厝装饰元素在近现代建筑中的运用——以厦门高崎国际机场楼体及嘉庚建筑为例
试谈Access 2007数据库在林业档案管理中的应用
摄像机低照成像的前世今生
新安讯士Q6155-E PTZ摄像机
山上一群猴
框架结构楼梯的震害分析与设计对策
如何消除和缓解“摄像机恐惧症”
巧设WPS窗体控件让表格填写更规范
高清新阵营