单文档视图结构中利用OpenGL绘制图形
2006-10-31 14:44
417 查看
这次介绍在MFC下单文档视图结构中绘制三维图形的一些步骤.
(1) 创建一个新的工程,新建一个基于单文档(SDI)的工程,名称为SDOpenGL.
(2) 添加OpenGL库.
Project->Settings...->Link标签下,在"Object/library Module"编辑框中加入"opengl32.lib
glu32.lib",(中间为空格),确定.
(3) 添加消息响应函数.WM_CREATE,WM_DESTROY,WM_SIZE的响应函数.
(4) 修改StdAfx.h文件
#include <gl/gl.h>
#include <gl/glaux.h>
#include <gl/glu.h>
(5) 修改SDOpenGLView.h文件
//添加成员函数和成员变量
BOOL RenderSene();//
BOOL SetupPixelFormat();
BOOL InitializeOpenGL(CDC* pDC);
HGLRC m_hRC; //OpenGL绘制描述表
CDC *m_pDC; //OpenGL设备描述表
(6) 修改SDOpenGLView.cpp文件
void CSDOpenGLView::OnDraw(CDC* pDC)
{
CSDOpenGLDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
//////////////////////////////////////////////////////////////////
RenderScene(); //渲染场景
//////////////////////////////////////////////////////////////////
}
int CSDOpenGLView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
//////////////////////////////////////////////////////////////////
//初始化OpenGL
m_pDC = new CClientDC(this);
InitializeOpenGL(m_pDC);
//////////////////////////////////////////////////////////////////
return 0;
}
void CSDOpenGLView::OnDestroy()
{
CView::OnDestroy();
// TODO: Add your message handler code here
/////////////////////////////////////////////////////////////////
//删除调色板和渲染上下文、定时器
::wglMakeCurrent(0,0);
::wglDeleteContext( m_hRC);
if (m_hPalette)
DeleteObject(m_hPalette);
if ( m_pDC )
{
delete m_pDC;
}
/////////////////////////////////////////////////////////////////
}
void CSDOpenGLView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
/////////////////////////////////////////////////////////////////
//添加窗口缩放时的图形变换函数
glViewport(0,0,cx,cy);........
/////////////////////////////////////////////////////////////////
}
//////////////////////////////////////////////////////////
// 初始化openGL场景
//////////////////////////////////////////////////////////
BOOL CSDOpenGLView::InitializeOpenGL(CDC* pDC)
{
m_pDC = pDC;
SetupPixelFormat();
//生成绘制描述表
m_hRC = ::wglCreateContext(m_pDC->GetSafeHdc());
//置当前绘制描述表
::wglMakeCurrent(m_pDC->GetSafeHdc(), m_hRC);
return TRUE;
}
//////////////////////////////////////////////////////////
// 设置像素格式
//////////////////////////////////////////////////////////
BOOL CSDOpenGLView::SetupPixelFormat()
{
PIXELFORMATDESCRIPTOR pfd = {
sizeof(PIXELFORMATDESCRIPTOR), // pfd结构的大小
1, // 版本号
PFD_DRAW_TO_WINDOW | // 支持在窗口中绘图
PFD_SUPPORT_OPENGL | // 支持 OpenGL
PFD_DOUBLEBUFFER, // 双缓存模式
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;
pixelformat = ::ChoosePixelFormat(m_pDC->GetSafeHdc(), &pfd);//选择像素格式
::SetPixelFormat(m_pDC->GetSafeHdc(), pixelformat, &pfd); //设置像素格式
return TRUE;
}
//////////////////////////////////////////////////////////
// 场景绘制与渲染
//////////////////////////////////////////////////////////
BOOL CSDOpenGLView::RenderScene()
{
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);//设置背景颜色
glClear(GL_COLOR_BUFFER_BIT);//清除颜色缓存
glColor3f(0.2f, 0.6f, 1.0f);//绘图颜色
............//绘制函数
::SwapBuffers(m_pDC->GetSafeHdc()); //交互缓冲区!!!
return TRUE;
}
具体参考:http://hi.baidu.com/lion_luoluo/blog/item/3e7dcb3d5c3f79c79e3d6200.html
(1) 创建一个新的工程,新建一个基于单文档(SDI)的工程,名称为SDOpenGL.
(2) 添加OpenGL库.
Project->Settings...->Link标签下,在"Object/library Module"编辑框中加入"opengl32.lib
glu32.lib",(中间为空格),确定.
(3) 添加消息响应函数.WM_CREATE,WM_DESTROY,WM_SIZE的响应函数.
(4) 修改StdAfx.h文件
#include <gl/gl.h>
#include <gl/glaux.h>
#include <gl/glu.h>
(5) 修改SDOpenGLView.h文件
//添加成员函数和成员变量
BOOL RenderSene();//
BOOL SetupPixelFormat();
BOOL InitializeOpenGL(CDC* pDC);
HGLRC m_hRC; //OpenGL绘制描述表
CDC *m_pDC; //OpenGL设备描述表
(6) 修改SDOpenGLView.cpp文件
void CSDOpenGLView::OnDraw(CDC* pDC)
{
CSDOpenGLDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
//////////////////////////////////////////////////////////////////
RenderScene(); //渲染场景
//////////////////////////////////////////////////////////////////
}
int CSDOpenGLView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
//////////////////////////////////////////////////////////////////
//初始化OpenGL
m_pDC = new CClientDC(this);
InitializeOpenGL(m_pDC);
//////////////////////////////////////////////////////////////////
return 0;
}
void CSDOpenGLView::OnDestroy()
{
CView::OnDestroy();
// TODO: Add your message handler code here
/////////////////////////////////////////////////////////////////
//删除调色板和渲染上下文、定时器
::wglMakeCurrent(0,0);
::wglDeleteContext( m_hRC);
if (m_hPalette)
DeleteObject(m_hPalette);
if ( m_pDC )
{
delete m_pDC;
}
/////////////////////////////////////////////////////////////////
}
void CSDOpenGLView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
/////////////////////////////////////////////////////////////////
//添加窗口缩放时的图形变换函数
glViewport(0,0,cx,cy);........
/////////////////////////////////////////////////////////////////
}
//////////////////////////////////////////////////////////
// 初始化openGL场景
//////////////////////////////////////////////////////////
BOOL CSDOpenGLView::InitializeOpenGL(CDC* pDC)
{
m_pDC = pDC;
SetupPixelFormat();
//生成绘制描述表
m_hRC = ::wglCreateContext(m_pDC->GetSafeHdc());
//置当前绘制描述表
::wglMakeCurrent(m_pDC->GetSafeHdc(), m_hRC);
return TRUE;
}
//////////////////////////////////////////////////////////
// 设置像素格式
//////////////////////////////////////////////////////////
BOOL CSDOpenGLView::SetupPixelFormat()
{
PIXELFORMATDESCRIPTOR pfd = {
sizeof(PIXELFORMATDESCRIPTOR), // pfd结构的大小
1, // 版本号
PFD_DRAW_TO_WINDOW | // 支持在窗口中绘图
PFD_SUPPORT_OPENGL | // 支持 OpenGL
PFD_DOUBLEBUFFER, // 双缓存模式
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;
pixelformat = ::ChoosePixelFormat(m_pDC->GetSafeHdc(), &pfd);//选择像素格式
::SetPixelFormat(m_pDC->GetSafeHdc(), pixelformat, &pfd); //设置像素格式
return TRUE;
}
//////////////////////////////////////////////////////////
// 场景绘制与渲染
//////////////////////////////////////////////////////////
BOOL CSDOpenGLView::RenderScene()
{
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);//设置背景颜色
glClear(GL_COLOR_BUFFER_BIT);//清除颜色缓存
glColor3f(0.2f, 0.6f, 1.0f);//绘图颜色
............//绘制函数
::SwapBuffers(m_pDC->GetSafeHdc()); //交互缓冲区!!!
return TRUE;
}
具体参考:http://hi.baidu.com/lion_luoluo/blog/item/3e7dcb3d5c3f79c79e3d6200.html
相关文章推荐
- Android官方开发文档Training系列课程中文版:OpenGL绘图之图形绘制
- 利用AppFace美化VC程序(对话框或文档视图结构)
- [OpenGL]利用OpenGL绘制一些简单的图形
- 文档视图结构中利用序列化机制使用OLE剪贴板
- 直接在MFC的对话框上利用OpenGL绘制图形
- 文档视图结构中利用序列化机制使用OLE剪贴板
- 利用AppFace美化VC程序(对话框或文档视图结构)
- 绘制二元函数z=f(x,y)=(x^2-2*x)*exp(-x^2-y^2-x*y)的曲线及其三视图和三维表面图形
- 如何在文档视图结构界面程序中弹出对话框并通过edit control控件传递数据
- MFC文档视图结构内幕
- openGL学习笔记1(入门----如何绘制 直线、多边形、圆、利用图片绘制图形等)
- MFC文档/视图结构体系及SDI回顾(1)
- 文档结构视图(3)
- 文档/视图结构详细介绍
- C#利用GDI绘制常见图形和文字
- VC视图文档结构
- openGL—绘制简单二维图形
- 利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档
- 利用java实现android项目结构API文档
- Android OpenGL与3D应用开发之3D图形绘制