OpenGL 作图非常方便,故日益流行,但对许多人来说,是在微机上进行的,首先碰到的
问题是,如何适应微机环境。这往往是最关键的一步,虽然也是最初级的。
下面介绍如何在 VC++ 上进行 OpenGL 编程。其实相当简单明快,只因国内缺少这方面的
资料与例子,致使许多小细节要一个一个地试,耗去大量时间。希望各位有什么心得体会
也公布出来,从而节省每个人都要试试的时间。
言归正传,下面以画一条 Bezier 曲线为例,详细介绍 VC++ 上 OpenGL 编程的方法。这里
实际上也给出了个 C++ 良好封装性编程的范例。文中给出了详细注释,以便给初学者明确
的指引。一步一步地按所述去做,你将顺利地画出第一个 OpenGL 平台上的图形来。
一、产生程序框架 Test.dsw
New Project | MFC Application Wizard (EXE) | "Test" | OK
*注* : 加“”者指要手工敲入的字串
二、导入 Bezier 曲线类的文件。用下面方法产生 BezierCurve.h
BezierCurve.cpp 两个文件:
WorkSpace | ClassView | Test Classes| <右击弹出> New Class
| Generic Class(不用 MFC 类) | "CBezierCurve" | OK
三、编辑好 Bezier 曲线类的定义与实现。写好下面两个文件:
BezierCurve.h BezierCurve.cpp
四、设置编译环境:
1. 在 BezierCurve.h 和 TestView.h 内各加上:
#include #include #include
2. 在集成环境中,Project | Settings | Link | Object/library module
| "opengl32.lib glu32.lib glaux.lib" | OK
五、设置 OpenGL 工作环境:(下面各个操作,均针对 TestView.cpp )
1. 处理 PreCreateWindow(): 设置 OpenGL 绘图窗口的风格
cs.style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CS_OWNDC;
2. 处理 OnCreate():创建 OpenGL 的绘图设备。 OpenGL 绘图的机制 是: 先用 OpenGL 的绘
图上下文 Rendering Context (简称为 RC ) 把图画好,再把所绘结果通过 SwapBuffer() 函数
传给 Window 的绘图上下文 Device Context (简记为 DC).要注意的是,程序运行过程中,可
以有多个 DC,但只能有一个 RC。因此当一个 DC 画完图后,要立即释放 RC,以便其它
的 DC 也使用。在后面的代码中,将有详细注释。
int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
Init();
return 0;
}
void CTestView::Init()
{