任何一种程序都有它的运行环境。OpenGL的所有绘图命令(函数)都必需在OpenGL的运行环境中使用,这个运行环境我们称为OpenGL的框架。我们现在使用的是微软公司的Windows系统,所有程序又都是在Windows系统下运行的,所以我们的OpenGL程序还得建立在Windows的程序框架上。在Windows系统下编制OpenGL程序必需首先建立Windows框架,再在Windows框架下建立OpenGL的框架。
我们这里主要是讲述游戏的开发,最好是用SDK的开发模式,所以Windows程序框架就得我们自己来建立了。好在这个包含OpenGL的Windows框架是一个通用的模式,我们今后所有的OpenGL程序都可以直接使用它,可以是一次建立,终身受用。
Windows程序框架
Windows框架是我们在Windows系统下运行的程序必需的架构。Windows框架主要由三个函数构建。
● WinMain() 程序入口。程序从这里开始运行。WinMain()的功能为定义一个Windows的窗口的样式、大小等等,并建立这个窗口。
● MsgProc() 窗口回调函数。Windows程序是基于事件响应的运行机制,MsgProc()窗口回调函数在整个运行周期中随时对回调函数所定义的外部事件(鼠标移动、点击,窗口变化,键盘和其它函数发出的消息) 做出反应。
● GameLoop() 消息循环。这是利用Windows的消息机制做成的主循环函数,它被程序反复执行。它的作用是侦听消息,有消息时返回Windows的消息链,没有消息时就执行OpenGL的图形处理Render()。
OpenGL程序框架
OpenGL的基本框架由四个函数组成。
● SetupPixelFormat(HDC hDC) 检测安装OpenGL。主要设置OpenGL的参数,并测试显卡安装OpenGL的图形系统。OpenGL安装成功后就不再使用。
● init(int Width, int Height) OpenGL视口进行变换。根据Windows窗口的变化对OpenGL视口进行变换。这里的视口就是我们看到的三维世界视觉效果的窗口。OpenGL安装成功后就不再使用。
● CleanUp() 清除OpenGL的连接。在程序退出时调用,清除OpenGL的视口和图形环境。
● Render() OpenGL图形处理。这是处理OpenGL图形的关键函数,它在程序的整个程序运行时间中都在调用,它的调用周期也就是我们的屏幕刷屏周期。我们今后的所有图形显示命令都在这里给出。
Windows程序框架与OpenGL程序框架的相互关系。
● WinMain()是程序入口点,在此将定义一个Windows的窗口的样式、大小等等,并建立这个窗口。
● Windows程序是基于事件响应的,在建立窗口的命令执行中,MsgProc()窗口回调函数对建立窗口的事件消息做出反映,马上调出OpenGL框架中的SetupPixelFomat()检测机器对OpenGL的支持情况,并安装OpenGL显示接口。
● 当窗口建立成功显示时,MsgProc()窗口回调函数对窗口尺寸变化事件消息又作出反映,调出OpenGL框架中的init()对OpenGL视口进行变换调整。
● Windows窗口生成后就进入GameLoop()主循环中,在此一直调出OpenGL框架中的Render()函数进行我们需要的图形处理。
● 程序退出时,调用CleanUp()清除OpenGL的连接。