Win7环境使用VC2008进行OpenGL编程

2012-03-12 19:33:35|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:C/C++, 图形/图像, MFC|来源:唯设编程网

OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言、跨平台编程接口(Application programming interface)的规格,它用于生成二维三维图像。OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库,提供了非常优秀的二维、三维图象操作API。使用VC可以方便的进行OpenGL编程,由于它函数全名、基础类库丰富、接口函数灵活多样,已经被广泛应用在各个工业领域。

本文主要介绍VC进行OpenGL编程时建立视场和程序框架,这是一个通用的OpenGL程序框架,通过调用OpenGL函数完成五子棋棋盘的绘制,读者将一步步地建立一个基础性的OpenGL程序,对VC+OpenGL进行开发的基础设置工作建立初步的认识。

Step 1、启动VS2008,一个基于基于对话框的MFC应用程序glGobang。

Step 2、使用同样的方法,在同一个解决下面创建一个Win32应用程序OpenGLLib,引用程序类型选择dll,附加选项选择导出符号,添加公公头文件以用于栏勾选MFC复选框,以便我们的类库中能够使用MFC定义的数据类型。

Step 3、在OpenGLLib项目的stdafx.h中添加使用OpenGL相关类库的头文件包含语句和Lib导入语句:

// 添加OpenGL使用的相关类库
#include "glgl.h"
#include "glglu.h"
#pragma comment (lib,"OpenGL32.lib")
#pragma comment (lib,"glu32.lib")

Step 4、在OpenGLLib项目定义绘图用到的类COpenGLLib,完整的头文件如下:

// 下列 ifdef 块是创建使从 DLL 导出更简单的
// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 OPENGLLIB_EXPORTS
// 符号编译的。在使用此 DLL 的
// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
// OPENGLLIB_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
// 符号视为是被导出的。
#ifdef OPENGLLIB_EXPORTS
#define OPENGLLIB_API __declspec(dllexport)
#else
#define OPENGLLIB_API __declspec(dllimport)
#endif
// 添加矩阵相关计算类库
#include "..libMatrix.h"
#include "..libVector_math.h"
#pragma comment (lib,"..libMathUtility.lib")

// 此类是从 OpenGLLib.dll 导出的
class OPENGLLIB_API COpenGLLib {
private:
	CClientDC* my_pDC;
	// 初始化OpenGl环境
	void init(void);
	// 初始化定义像素格式
	BOOL initPixelformat();	
public:
	COpenGLLib(CClientDC* pDC);	
	~COpenGLLib();
	// 重置画布大小
	void resetCanvasSize(int cx,int cy);
	// 执行绘图操作
	void draw();
	//draw的实现函数,以后采用外部接入的方式
	void drawChessboard(CMatrix& matrix);
	//绘制一个棋子
	void drawChessman();
};

extern OPENGLLIB_API int nOpenGLLib;

OPENGLLIB_API int fnOpenGLLib(void);

由于程序使用到了线性代数矩阵和向量的相关运算,所以添加头文件Matrix.h、Vector_math.h并导入用到的库MathUtility.lib,这些和OpenGL的使用没有必然联系,读者可以忽略。

Step 5、OpenGLLib绘图类的具体实现。

5.1. OpenGL绘图工具类构造函数和析构函数:

//定义线的宽度	
float lWidth[2];
COpenGLLib::COpenGLLib(CClientDC* pDC){
	//验证my_pDC不能等于NULL
	ASSERT(my_pDC!=NULL);
	my_pDC=pDC;
	init();
}
COpenGLLib::~COpenGLLib(){
	HGLRC hrc;
	hrc=::wglGetCurrentContext();
	::wglMakeCurrent(NULL,NULL);
	if(hrc)
		::wglDeleteContext(hrc);	
}

构造函数首先对绘图类OpenGLLib的CClientDC进行赋值,并调用init函数初始化OpenGL绘图用到的相关资源。析构函数中调用::wglGetCurrentContext()函数获取当前线程的当前OpenGL渲染描述表保存在临时变量hrc中,然后将当前的OpenGL选人描述表设置成NULL,最后调用::wglDeleteContext函数释放保存在hrc中的OpenGL渲染描述表

发表评论0条 】
网友评论(共?条评论)..
Win7环境使用VC2008进行OpenGL编程