设为首页 加入收藏

TOP

2.2.2 面向对象风格的框架(5)
2013-10-07 13:15:29 来源: 作者: 【 】 浏览:68
Tags:2.2.2 面向 对象 风格 框架

2.2.2 面向对象风格的框架(5)

上面这一段代码是来处理消息循环的,和上一节消息循环的结构是一样的,不同的是第138行处理WM_PAINT消息,首先调整窗口大小,然后调用Draw()来绘制图形,最后交换缓存。第176和181行处理按键按下和释放时是通过调用键盘类Keys对应的方法来实现。其他设置窗口位置和大小的消息请读者对照源程序理解,最后一个消息是自定义的切换窗口消息WM_TOGGLEFULLSCREEN,它其实是将全屏标志取反,然后向窗口发送一个WM_QUIT消息即可。

前面已经提到该类提供了4个统一的接口,进而来完成OpenGL程序的逻辑过程,为了能够熟练使用该框架,你必须熟悉下面4个函数接口:

bool Initialize() :它执行所有初始化工作,如果成功则返回true。

void Deinitialize() :执行所有卸载工作。

void Update(DWORD milliseconds) :执行所有更新操作,传入的参数为两次操作经过的时间,以毫秒为单位。

void  Draw():执行所有绘制操作。

为了能够进一步说清楚这4个函数的作用,下面就举一个例子来说明问题,我们来绘制一个线状茶壶,首先从GL_Application类派生出一个子类Example,定义如下:

 
从第36行即可看出Example类是继承自GL_Application类,它实现了其父类的四个方法,同时在第45行将其父类定义为自己的友元类,这样就可以调用父类的静态方法Create()来生成一个程序实例,代码见下面,它首先实例化一个Example对象,然后将其强制转化为其父类类型。
 

最后在第48行定义了一个变量,用来保存茶壶的旋转角度。

下面让我们来看一下Initialize()函数究竟作了哪些设置,先看一下代码:

 
 

第60行设置清除颜色缓冲区时所用的颜色为黑色,第61行设置深度缓存中所有像素的深度值为1.0, 第62~63行设置进行深度测试的类型为小于等于时渲染,并开启深度测试。下面一行指定使用平滑着色模式,即Ground着色,第65行启用了反走样处理,使颜色和纹理坐标插值采用质量最好选项处理,最后调用子类的ResizeDraw()函数改变OpenGL窗口大小。在实际的程序中,我们必须要实现这个函数,当然函数的定义和声明已经写好了,所要做的就是在第67行添加需要的代码即可。

绘制函数的代码如下:

 

在实际的绘制函数中,我们可以绘制任何我们所需要的图形,在这里我们绘制一个线状茶壶。首先,第100行按照我们在Initialize()中设置的清空颜色和深度值来清空颜色缓存和深度缓存,然后第101~104行先重置当前的模型观察矩阵,并进行模型变换。第105行设置绘制颜色为蓝色,第106行通过使用aux辅助库函数auxWireTeapot绘制一个线状茶壶,具体运行截图见图2-6,你可能对前面这些函数不是很清楚,请不要担心,在以后的章节中我们会详细地进行介绍。

下一个要介绍的是更新函数,代码如下:

 
 


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.2.2 面向对象风格的框架(6) 下一篇2.2.2 面向对象风格的框架(4)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: