基于OpenGL 的三维场景的模拟
文/朱晓飞 万哲
摘要:本文利用OpenGL 具有较好显
示效果和较高渲染速度的优点,
提出了一种用天空盒的方法来快
速构建三维场景,并利用C++ 的
特点实现了在三维场景中载入MD2
三维模型,实现模型动作的变换。
【关键词】OpenGL 三维场景 天空盒 三维模型
1 概述
OpenGL 是近几年发展起来的一个性能
卓越、跨平台的三维图形的编程接口规格。
OpenGL 是一个开放的三维图形软件包,它独
立于窗口系统和操作系统,以它为基础开发的
应用程序可以在任何支持该开发语言的硬件平
台上执行[2]。近些年来OpenGL 已经发展成为
工业标准的计算机三维图形软件开发接口,广
泛应用于游戏开发、地球科学和流体力学等领
域。
本文作者在对计算机图形学基础知识研
究基础上,利用OpenGL 这个功能强大的开放
式软件包,以VC++ 为开发平台,对现实世界
中的三维场景进行了模拟,并在场景中载入三
维模型, 以及实现模型动作的变换。
2 三维场景的设计
2.1 三维场景的设计
OpenGL 中构建三维场景最常用的方法是
使用天空盒的方法[3]。
天空盒方法,实际上就是把三维场景当
成是一个长方体的盒子,然后在这个长方体的
表面上贴上比较真实的纹理。为了达到比较真
实的效果,构成天空盒纹理的图片必须满足以
下3 个要求:(1)顶面的图片必须和前后左
右面的4 幅图的上边相连,如图1 所示;(2)
地面的图片必须和前后左右面的4 幅图的下边
相连,如图2 所示;(3)上下左右面的4 幅
图片必须首尾相连,如图3 所示。
通过天空盒的方法,只要使用优质无缝
连接的纹理,就可以达到很好的视觉效果。
2.2 三维模型的载入
在OpenGL 中,任何三维模型都是由点、
线段和多边形这些基本的几何图元组成的,但
是这种方法不适合构建比较复杂的三维模型。
实际中,通常都是使用第三方的三维模型。本
次场景构建中使用的是MD2 格式的三维模型。
2.2.1 MD2 模型文件简介
MD2 模型文件是Quake Ⅱ中专用的模型
文件。MD2 模型文件中存储了动画的各个关键帧,关键帧能唯一指定模型对应的动作,也
就是说MD2 模型文件中包含有三维物体多帧
的信息,只要通过读取模型文件就可以实现连
续的动画。
MD2 模型文件一般由两个文件组成,一
个是以.MD2 为后缀的文件,该文件通常用来
保存模型的各个点的信息。另一个就是一个图
片文件,该文件通常包含有模型的纹理。
2.2.2 MD2 模型文件的载入
MD2 文件中对帧的顶点信息和纹理坐标
信息都进行了压缩,所以在读取MD2 模型文
件中的顶点信息和纹理坐标信息的时候都要进
行解压缩。
为了使模型的动作比较光滑,一般需要
进行关键帧插值。也就是在模型动作的开始帧
和结束帧之间自动生成过度的帧,关键帧的插
值公式如公式(1)所示:
P(t) =P(0) +t*(P(1)-P(0) (1)
其中,t 是当前时间;
P(t) 是时刻t 时模型的位置;
P(0) 是模型开始时的位置;
P(1) 是模型结束时的位置。
3 三维场景的实现
3.1 场景的实现
利用2.1 节中讲述的天空盒方法对三维场
景进行构建。在渲染天空盒之前,将观察者的
位置设置在天空盒立方体的中心位置,这样无
论观察者如何移动,所看到的视野都是天空盒
的内部,从而营造出一种视觉上的无限连续状
态。
3.2 3D模型的载入
利用程序在三维场景中载入提前构建好
的MD2 三维模型。
通过设置不同键盘按钮按下时模型的下
一个动作和动作的开始帧就可以实现通过键盘
来完成模型动作的变换过程。
4 结语
本文简单介绍了一种基于VC 与OpenGL
的使用天空盒技术搭建三维场景的方法,然后
载入MD2 三维模型并实现模型动作的变换。
该方法采用面向对象程序设计语言C++ 进行
实现,可以进行封装与扩充,为后续的扩充工
作做准备。
参考文献
[1] 孙守迁, 王剑, 林宗楷.OpenGL 参考手册
[M]. 机械工业出版社,2001.
[2] 龚立民. 基于OpenGL 的地球/ 地图三维
模拟软件设计[M]. 信息技术,2006.
[3] 邓郑祥.OpenGL 编程指南第四版著[M].
人民邮电出版社,2005.
[4] 孙海英, 庞明勇. MD2 动画文件格式解析
[M]. 计算机技术与发展,2009.
作者单位
陕西省交通建设集团公司秦岭终南山公路隧道
分公司 陕西省西安市 710010