VC环境下基于MFC框架的OpenGL的编程环境的配置
2010-03-04 20:59
555 查看
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.lib、glu32.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>
编译、运行程序。
然后就是发挥你的想象力,在三维世界里遨游啦^_^
学习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.lib、glu32.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>
编译、运行程序。
然后就是发挥你的想象力,在三维世界里遨游啦^_^
相关文章推荐
- VC环境下基于MFC框架的OpenGL的编程环境的配置
- VC环境下基于MFC框架的OpenGL的编程环境的配置
- VC++2010环境下基于MFC框架的OpenGL的编程环境的配置
- 基于VC++ MFC环境的OpenGL编程入门---第一篇
- Windows XP虚拟机绿色VC配置OpenGL开发环境
- Win7配置CUDA并搭建基于Theano框架的GPU加速环境
- OpenGL编程环境配置
- VC下配置OpenGL环境
- MFC环境下搭建OpenGL框架并进行数据文件读取以及模型绘制的注意事项
- 简单而强大的多线程串口编程工具CserialPort类(附VC基于MFC单文档协议通讯源程序及详细编程步骤)
- openGL编程-环境配置(glfw;glew;glm相关 )
- VC++配置OpenGL开发环境
- 基于VC++的OpenGL编程讲座之概述(1)
- 走进Zend Framework框架编程(二):软件安装和环境配置
- VC6.0 OpenGL环境配置及编程基础
- 在MFC环境下配置OpenGL导致闪屏的解决方案
- 基于MFC的OPENGL绘图框架搭建
- VC++孙鑫-第三章-MFC AppWizard的原理与MFC程序框架-讲WIN32SDK和MFC编程的相同过程
- DirectX与VC编程环境配置
- 基于MFC单文档SDI的OpenGL图形程序的基本框架