正文

GL的简单封装类与游戏编程基础2007-05-17 23:25:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/rickone/25967.html

分享到:

用MFC习惯了,所以想把GL的一些东西封装成类,放在MFC里一起搭应用程序。

GL当初是被设计成与硬件及平台无关的专业3D绘图API,也就是说用GL的时候,你可以把你正在用计算机这件事忘了,你是在进行艺术创作!

虽然MS不太情愿支持GL,但从WIN NT开始也正式把GL加入了WIN32 API中,在一组dll中实现,所以使用起来也还方便。

WINDOWS下GL实现的基本原理(其它平台的不知道),因为有GDI/GDI+,所以GL在这里显得有些像异类,在GDI下画图是使用的图形设备上下文(描述表)DC,而在GL里是渲染描述表RC,所有的gl*绘画函数都是在一个当前RC上进行的,绘制完之后用WIN API SwapBuffers(HDC)交换缓存到DC,进行图形的显示。

class CGLFrame;可以看成是对RC的封装,所以可以认为它就是GL本身。

它的构造函数不做任何事情,将产生一个对象,未做初始化。初始化要在CreateRC()中完成。

BOOL CGLFrame::CreateRC(CDC *pdc, CRect &rect, BOOL bMWA);

pdc : 一个CDC在堆上的对象,可以是CClientDC等,在析构函数中有delete pdc的操作。

rect : 是初始的显示宽度

bMWA : 标识是否在多窗口应用下绘画,默认为FALSE。

从这之后,将由CGLFrame对象托管RC资源,及进行绘图操作(绘图还是用gl*函数,只是放在特定的地方)

举个例子,在基本对话框应用程序下使用CGLFrame

1,包含必要的头文件和库文件(或者直接把glframe.h和glframe.cpp添加到工程)

2,从CGLFrame下继承自己的CMyFrame

3,在CSampleDlg中创建CMyFrame的对象,m_glfrm

4,在CSampleDlg::OnInitDialog()里进行RC的创建:
CClientDC *pdc=new CClientDC(this);
CRect rect;
GetClientRect(&rect);
m_glfrm.CreateRC(pdc,&rect,FALSE);

5,在需要进行渲染的地方调用:m_glfrm.Render();(或者RenderMWA()在多窗口下)进行渲染。

6,最后,重载虚函数void CMyFrame::OnPaint(),进行自己绘图的操作,如果不重载,将是基类的Demo。

最后值得注意的是,把对话框的边框风格设成Thin或者None,可以使全屏显示的时候不至出现边框。

关于动画和游戏

动画就是让计算机快速的呈现静止的画面,使人的眼睛看上去以为是运动的画面,让计算机隔一个确定的时间就进行计数并渲染下一帧(画面),就构成了连续的动画。

可以把每一帧看成是一个单位动画时间,整个动画就是一个历史,各个时刻要绘什么样的画面呢?决定某个时刻下画面的内容的是什么呢?是前一帧动画内的数据,它是个因果系统,更像是‘真实世界’。

游戏是特殊的动画,决定游戏某一时刻画什么,除了时间之外,还包括鼠标,键盘的输入以及网络数据,也就是说游戏具有操纵感,让现实世界的人‘进入’虚拟世界。

游戏编程才刚刚开始学,很多还不会。只是弱弱的说一些,关于游戏中追求高FPS,我觉得不是很重要,人眼的感觉能力从20Hz开始就会感觉是连续的,显示器也是有一定的刷新频率(76Hz?),为什么游戏要追求更加高得多的FPS(帧率,刷新率)呢?我想到的是,可以把游戏更进一步细分,分成游戏帧和显示帧,多个游戏帧构成一个显示帧,每个游戏帧之间推动游戏时间,处理游戏数据和鼠标键盘操作,但不渲染(最费时的工作),等到了显示帧的时候再进行渲染,游戏帧快可以提高操作感,显示帧达到显示设备或者人眼的水平就够了,这样做会不会有更好的效果呢?

如果要做游戏,GLFrame对鼠标键盘消息,以及定时器的实现都没有做,要借助其它的方法实现。

目前在google code SVN上有一个和euc的斯诺克项目niceshot,可以查看:
http://code.google.com/p/niceshot/

里面有GLFrame的代码和测试,以及niceshot的Demo引擎。 2007/05/17 rickone

 

Demo 抓图,运动中的撞球

阅读(5714) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册