VC下配置OPENGL框架
来源:百度文库 编辑:神马文学网 时间:2024/05/15 22:32:24
使用VC下的MFC很久了,但是开始接触的OPENGL都是在WIN32控制台下的程序,所以要将代码移植到MFC下这个想法已经很久,而且努力之后,已经实现,主要过程如下:
我们可以新建一个工程,工程名不妨为OPEGNGL0(后面还会有1,2……)
在VC中操作如下:Project-> Settings,然后单击LINK标签。在"Object/Library Modules"选项中的开始处(在 kernel32.lib 前)增加 OpenGL32.lib GLu32.lib 和 GLaux.lib 后单击OK按钮。
在"stdafx.h"里面加入以下三行代码
#include "gl\gl.h"
#include "gl\glu.h"
#include "gl\glaux.h" 在"OPENGL.H"里加入两个protected类型的变量
HGLRC m_hRC;
HDC m_hDC;
下面给整个工程重载以下几个消息
WM_CREATE WM_DESTROY WM_ERASEBKGND WM_SIZE WM_TIMER
最后手动添加两个函数到view类里
public:
bool InitGL();
void DrawGLScene();函数添加完毕,下面要做的就是往函数里添加一些简单的代码了。
void COpenGL0001View::DrawGLScene()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity();//这里可以加入你将要绘画的一些代码;
SwapBuffers(m_hDC);
}bool COpenGL0001View::InitGL()
{
glShadeModel(GL_SMOOTH); //平滑展示模型
glClearColor(0.0f,0.0f,0.0f,0.0f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST); //告诉系统对透视进行修正
return true;
}int COpenGL0001View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
PIXELFORMATDESCRIPTOR pfd= // /pfd 告诉窗口我们所希望的东东,即窗口使用的像素格式
{
sizeof(PIXELFORMATDESCRIPTOR), // 上述格式描述符的大小
1, // 版本号
PFD_DRAW_TO_WINDOW | // 格式支持窗口
PFD_SUPPORT_OPENGL | // 格式必须支持OpenGL
PFD_DOUBLEBUFFER, // 必须支持双缓冲
PFD_TYPE_RGBA, // 申请 RGBA 格式
24, // 选定色彩深度
0, 0, 0, 0, 0, 0, // 忽略的色彩位
0, // 无Alpha缓存
0, // 忽略Shift Bit
0, // 无累加缓存
0, 0, 0, 0, // 忽略聚集位
16, // 16位 Z-缓存 (深度缓存)
0, // 无蒙板缓存
0, // 无辅助缓存
PFD_MAIN_PLANE, // 主绘图层
0, // Reserved
0, 0, 0 // 忽略层遮罩
};
m_hDC=GetDC()->GetSafeHdc();
int setPixelFormat=::ChoosePixelFormat(m_hDC,&pfd);
::SetPixelFormat(m_hDC,setPixelFormat,&pfd);
m_hRC=::wglCreateContext(m_hDC);
::wglMakeCurrent(m_hDC,m_hRC);
InitGL();
SetTimer(1,1,NULL);
return 0;
}void COpenGL0001View::OnDestroy()
{
CView::OnDestroy();
// TODO: Add your message handler code here
::wglMakeCurrent(NULL,NULL);
::wglDeleteContext(m_hRC);
}void COpenGL0001View::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if(cy==0) cy=1;
glViewport(0,0,cx,cy);
glMatrixMode(GL_PROJECTION); //设置当前矩阵为投影矩阵
glLoadIdentity(); //重置当前矩阵为单位矩阵
//计算窗口的外观比例(远景透视图)
gluPerspective(45.0,(GLfloat)cy,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW); //设置当前矩阵为模型视力矩阵
glLoadIdentity();
} void COpenGL0001View::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
DrawGLScene();
CView::OnTimer(nIDEvent);
}
BOOL COpenGL0001View::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
return true;
//return CView::OnEraseBkgnd(pDC);
}
到这一步,基本上已经配置完了OPEGNGL环境了,如果需要添加一些场景之类的话,可以直接在函数DrawGLScene里进行,此工程到目前为止,还没有出现过问题。如果发现有什么问题,欢迎与我联系。
我们可以新建一个工程,工程名不妨为OPEGNGL0(后面还会有1,2……)
在VC中操作如下:Project-> Settings,然后单击LINK标签。在"Object/Library Modules"选项中的开始处(在 kernel32.lib 前)增加 OpenGL32.lib GLu32.lib 和 GLaux.lib 后单击OK按钮。
在"stdafx.h"里面加入以下三行代码
#include "gl\gl.h"
#include "gl\glu.h"
#include "gl\glaux.h" 在"OPENGL.H"里加入两个protected类型的变量
HGLRC m_hRC;
HDC m_hDC;
下面给整个工程重载以下几个消息
WM_CREATE WM_DESTROY WM_ERASEBKGND WM_SIZE WM_TIMER
最后手动添加两个函数到view类里
public:
bool InitGL();
void DrawGLScene();函数添加完毕,下面要做的就是往函数里添加一些简单的代码了。
void COpenGL0001View::DrawGLScene()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity();//这里可以加入你将要绘画的一些代码;
SwapBuffers(m_hDC);
}bool COpenGL0001View::InitGL()
{
glShadeModel(GL_SMOOTH); //平滑展示模型
glClearColor(0.0f,0.0f,0.0f,0.0f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST); //告诉系统对透视进行修正
return true;
}int COpenGL0001View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
PIXELFORMATDESCRIPTOR pfd= // /pfd 告诉窗口我们所希望的东东,即窗口使用的像素格式
{
sizeof(PIXELFORMATDESCRIPTOR), // 上述格式描述符的大小
1, // 版本号
PFD_DRAW_TO_WINDOW | // 格式支持窗口
PFD_SUPPORT_OPENGL | // 格式必须支持OpenGL
PFD_DOUBLEBUFFER, // 必须支持双缓冲
PFD_TYPE_RGBA, // 申请 RGBA 格式
24, // 选定色彩深度
0, 0, 0, 0, 0, 0, // 忽略的色彩位
0, // 无Alpha缓存
0, // 忽略Shift Bit
0, // 无累加缓存
0, 0, 0, 0, // 忽略聚集位
16, // 16位 Z-缓存 (深度缓存)
0, // 无蒙板缓存
0, // 无辅助缓存
PFD_MAIN_PLANE, // 主绘图层
0, // Reserved
0, 0, 0 // 忽略层遮罩
};
m_hDC=GetDC()->GetSafeHdc();
int setPixelFormat=::ChoosePixelFormat(m_hDC,&pfd);
::SetPixelFormat(m_hDC,setPixelFormat,&pfd);
m_hRC=::wglCreateContext(m_hDC);
::wglMakeCurrent(m_hDC,m_hRC);
InitGL();
SetTimer(1,1,NULL);
return 0;
}void COpenGL0001View::OnDestroy()
{
CView::OnDestroy();
// TODO: Add your message handler code here
::wglMakeCurrent(NULL,NULL);
::wglDeleteContext(m_hRC);
}void COpenGL0001View::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if(cy==0) cy=1;
glViewport(0,0,cx,cy);
glMatrixMode(GL_PROJECTION); //设置当前矩阵为投影矩阵
glLoadIdentity(); //重置当前矩阵为单位矩阵
//计算窗口的外观比例(远景透视图)
gluPerspective(45.0,(GLfloat)cy,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW); //设置当前矩阵为模型视力矩阵
glLoadIdentity();
} void COpenGL0001View::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
DrawGLScene();
CView::OnTimer(nIDEvent);
}
BOOL COpenGL0001View::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
return true;
//return CView::OnEraseBkgnd(pDC);
}
到这一步,基本上已经配置完了OPEGNGL环境了,如果需要添加一些场景之类的话,可以直接在函数DrawGLScene里进行,此工程到目前为止,还没有出现过问题。如果发现有什么问题,欢迎与我联系。
VC下配置OPENGL框架
基于MFC下的OpenGL框架
VC6.0中OpenGL开发环境配置
基于VC++的OpenGL编程讲座之概述
基于VC++的OpenGL编程讲座之坐标变换
基于VC++的OpenGL编程讲座之概述
基于VC++的OpenGL编程讲座之基本图元
手把手教你搭建用MFC进行OpenGL编程的框架
OpenGL的安装 - OpenGL
VC中如何配置可调试项目
linux下配置cvs
IIS下配置mapserver
XP下配置IIS
linux下配置cvs
[配置]Linux下配置DNS服务
[配置]Linux下JDK的安装配置
[配置]Linux下配置DNS服务
JavaWeb框架系列-Servlet配置篇(3)
震撼!在《烟草控制框架公约》下
在VMware下配置显卡
linux下配置jsp环境
Linux下配置DNS服务
linux下的FTP配置
tomcat下jaas配置实例