设为首页 加入收藏

TOP

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

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

在GLWindow.h中第29行定义的Create()函数非常重要,用来创建一个Windows窗口,具体实现见上面,首先在第155行设置全屏标志,然后设置像素描述结构,第180行定义窗口的类型,然后检查如果是全屏模式,将调用成员函数ChangeScreenSetting()来进行窗口模式转换,转换成功则隐藏鼠标并设置为顶层窗口,若不成功则尝试窗口模式。

第199~251行调整我们的窗口,使其客户区的大小为我们设置的大小。如果窗口左上角的X或Y坐标为负,则调整为0并调整窗口的位置。

第218~228行根据上面我们对窗口属性的设置来创建窗口,创建成功则保存在句柄m_hWnd中。第238行查找一种最接近的像素格式,并设置为我们的像素格式。第247行创建OpenGL渲染描述表,并与设备描述表进行关联,最后显示和调整OpenGL窗口的大小。

 
在上面创建窗口Create()函数中,我们用到了一个改变窗口显示设置的方法ChangeScreenSetting(),它首先在第136行定义一个DEVMODE结构体,并设置其成员值,包括显示宽度、高度及位深等属性,最后调用ChangeDisplaySetting()根据该结构体来设置显示模式。
 
上面一段代码是成员函数ReshapeGL()的实现,它的主要作用是当我们的窗口大小改变时,通知OpenGL进行调整窗口。第123~125行,得到窗口的宽度和高度并重新设置为视口的宽度和高度。第126~128行对透视投影进行设置,主要是对投影平面宽度与高度的比率进行修正,进行这两步调整后就可以保证投影后的图像不会发生变形。最后两行把当前操作的矩阵恢复为模型视点矩阵。
 

最后一个在操作就是删除窗口Destroy(),它主要完成取消当前渲染描述表与设备描述表的关联,并删除渲染描述表和设备描述表,还有删除当前窗口。最后第286~290行检查如果为全屏模式则首先变换到窗口模式,并显示鼠标。

2.键盘类Keys的设计及实现

 

我们用一个键盘数组m_KeyDown[]来保存键盘256个按键的状态,若某个键被按下则对应数组值为true,反之,按键释放则值为false。第44行定义了Clear()方法,对键盘数组信息进行清空,它在构造函数中被调用,保证了键盘信息的准确性。第46行定义了检查某个按键是否被按下的方法IsPressed(),它实际上是通过检查对应按键数组中的值是否为true来实现的。

第48行定义了设置按键按下的方法SetPressed(),它设置对应按键数组的值为true;同样,第50行定义了设置按键释放的方法SetReleased(),在程序中调用这两个方法就可以更新键盘消息进行人机交互了。

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

评论

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