VC环境下基于MFC框架的OpenGL的编程环境的配置

来源:互联网 发布:电子处方软件免费版 编辑:程序博客网 时间:2024/05/01 09:51

VC环境下基于MFC框架OpenGL的编程环境的配置

 

学习OpenGL时,一般都是在控制台环境下的窗口,这里简单介绍一下基于MFC框架OpenGL的编程环境的配置,希望对你有所帮助。

在开始之前,首先确保你的VC已经包含了相应的OpenGL库文件,否则,将无法进行编译。若没有的话,可以从这里下载:http://butterflydog.download.csdn.net/

然后解压,将INCLUDE文件夹中的头文件拷贝到VC安装目录下的/Include/GL文件夹中;

LIB文件夹中的头文件拷贝到VC安装目录下的/Lib文件夹中;

DLL文件夹中的头文件拷贝到C:/Windows/System32文件夹中;

 

  

     下面介绍在VC环境中建立基于OpenGL标准的应用程序框架的具体方法与步骤,阅读时务必认真,不要有所遗漏

(1)创建项目文件:选择File/New菜单选项,建立一个名为MyTest的单文档(SDI)应用程序

(2)选择Project/Setting菜单选项,在Link栏的Lib输入域中添加openg132.libglu32.lib,若需使用OpenGL的辅助库函数,则还需添加glaux.lib

(3) 为CMyTestView类添加一个公有的成员变量,类型为CClientDC,命名为*m_pDC

(4) 为CMyTestView类添加WM_DESTROY函数,并修改代码如下:注意,新添加的代码一定要加在原来代码之前,即m_pDC要先进行销毁。

void CMyTestView::OnDestroy() 

{

HGLRC   hrc;

hrc = ::wglGetCurrentContext();

::wglMakeCurrent(NULL,  NULL);

if (hrc)

::wglDeleteContext(hrc);

if (m_pDC)

delete m_pDC;

CView::OnDestroy();

// TODO: Add your message handler code here

}

 

(5) 为CMyTestView类添加成员函数 BOOL bSetupPixelFormat(void) , 用于与OpenGL相关的设置

/*定 义 像 素 存 储 格 式 */  

PIXELFORMATDESCRIPTOR pfd = { 

sizeof(PIXELFORMATDESCRIPTOR),    // pfd结构的大小 

1,                                // 版本号 

PFD_DRAW_TO_WINDOW |              // 支持在窗口中绘图 

PFD_SUPPORT_OPENGL |              // 支持 OpenGL 

PFD_TYPE_RGBA,                  // RGBA 颜色模式 

24,                               // 24 位颜色深度 

0, 0, 0, 0, 0, 0,                 // 忽略颜色位 

0,                                // 没有非透明度缓存 

0,                                // 忽略移位位 

0,                                // 无累加缓存 

0, 0, 0, 0,                       // 忽略累加位 

32,                               // 32 位深度缓存     

0,                                // 无模板缓存 

0,                                // 无辅助缓存 

PFD_MAIN_PLANE,                   // 主层 

0,                                // 保留 

0, 0, 0                           // 忽略层,可见性和损毁掩模

};  

int pixelformat;

if ( (pixelformat = ChoosePixelFormat(m_pDC->GetSafeHdc(), &pfd)) == 0 )

{

MessageBox("ChoosePixelFormat failed");

return FALSE;

}

if (SetPixelFormat(m_pDC->GetSafeHdc(), pixelformat, &pfd) == FALSE)

{

MessageBox("SetPixelFormat failed");

return FALSE;

}

return TRUE;

 

(6) CMyTestView类添加成员函数void Init() ,用于初始化,代码如下:

PIXELFORMATDESCRIPTOR pfd;

int  n;

HGLRC hrc;

m_pDC = new CClientDC(this);

ASSERT(m_pDC != NULL);

if (!bSetupPixelFormat())

return;

n = ::GetPixelFormat(m_pDC->GetSafeHdc());

::DescribePixelFormat(m_pDC->GetSafeHdc(), n, sizeof(pfd), &pfd);

hrc = wglCreateContext(m_pDC->GetSafeHdc());

wglMakeCurrent(m_pDC->GetSafeHdc(), hrc);

 

 

添加WM_CREATE消息处理函数,然后在OnCreate函数中进行调用:

// TODO: Add your specialized creation code here

Init();

 

(7) CMyTestView类添加成员函数void DrawScene(void), 用于绘图。同时在OnDraw函数中对其进行调用。

在这里为了测试,可以绘制一个球体,这里可以放置自己的绘图代码。

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glPushMatrix();

//绘制球体

glColor3f(0.25,0.36,0.85);

glutWireSphere(1.0,20,16);

glPopMatrix();

glFinish();

SwapBuffers(wglGetCurrentDC());

(8) 然后为CMyTestView类添加一个WM_SIZE消息的响应函数,用于窗口尺寸改变时的重绘代码,并设置视角,如下所示

void CMfcView::OnSize(UINT nType, int cx, int cy) 

{

CView::OnSize(nType, cx, cy);

// TODO: Add your message handler code here

int w,h;

w = cx;

h = cy;

if(h == 0)

h = 1;

float ratio = 1.0* w / h;

glMatrixMode(GL_PROJECTION);//在修改前重设坐标系

glLoadIdentity();

// Set the viewport视口 to be the entire window

glViewport(0, 0, w, h);

gluPerspective(45,ratio,1,1000);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

gluLookAt(0.0,0.0,5.0, 0.0,0.0,-1.0, 0.0f,1.0f,0.0f);

}

 

(9) 最后在中CMyTestView.h中包含OpenGL所需的头文件

#include <gl/gl.h>

#include <gl/glu.h>

#include <gl/glut.h>

编译、运行程序。

 

然后就是发挥你的想象力,在三维世界里遨游啦^_^

原创粉丝点击