如何设置opengl结合vc开发绚丽的3D图形---操作详解
2009-10-18 20:59
513 查看
从这里获得不少帮助,把自己辛苦总结的东西也贡献出来吧,好东西大家一起分享
1)系统环境设置:
1.将开发库中的.h文件拷贝到Visual C++ 6.0的/Include/GL目录中 在2008中如没有这个文件目录,可自行创建
2.将.lib文件拷贝到Visual C++ 6.0的/lib目录中
3.将.dll文件拷贝到操作系统的system32目录中
以上文件可上网搜索opengl开发库函数下载,在 工程/设置/连接 中 物体或库模块中添加 opengl32.lib glu32.lib glut32.lib glaux.lib
2)在文件 StdAfx.h 中添加OpenGL函数定义的头文件,这样就可以在工程的任何位置调用其各种函数
#include<gl/gl.h>
#include<gl/glu.h>
#include<gl/glaux.h>
#include<gl/glut.h>
3)在View类中添加如下成员变量:
CDC *m_pDC; //创建绘图设备
HGLRC m_hRC; //OpenGL绘制描述表
HPALETLE m_hPalette; //OpenGL调色板,简单图形绘制可省略
void DrawScene(CDC *cDC); //绘制图形函数,绘图的语法和实现具体参考opengl书籍,材质、光照、渲染等内容为进一步美化绘图
void SetLogicalPalette(void); //设置逻辑调色板
int InitOpenGL(); //初始化opengl相关数值
void DestroyOpenGL(); //销毁绘图设备和绘图描述表
BOOL SetPixelFormat(void); //设置像素格式
4)以下是各函数内容的实现,具体可参考opengl书籍
BOOL CPointView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.style|=WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
return CView::PreCreateWindow(cs);
}
BOOL CPointView::bSetupPixelFormat()
{
static PIXELFORMATDESCRIPTOR pfd=
{
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |PFD_DOUBLEBUFFER,
24,
0,0,0,0,0,0,
0,
0,
0,
0,0,0,0,
32,
0,
0,
PFD_MAIN_PLANE,
0,
0,0,0
};
int pixelformat;
if((pixelformat=ChoosePixelFormat(m_pDC->GetSafeHdc(),&pfd))==0)
{
MessageBox("choose pixel format failure!");
return FALSE;
}
if(SetPixelFormat(m_pDC->GetSafeHdc(),pixelformat,&pfd)==FALSE)
{
MessageBox("set pixel format failure!");
return FALSE;
}
return TRUE;
}
void CPointView::InitOpenGL()
{
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);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
}
void CPointView::OnSize(UINT nType, int cx, int cy) //当窗口尺寸发生改变,调用此函数,其内容主要是设置投影视图范围
{
CView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
int w=cx;
int h=cy;
GLfloat nRange=1.0f;
if(h==0)h=1;
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w<h)
glOrtho(-nRange,nRange,-nRange*h/w,nRange*h/w,-nRange,nRange);
else
glOrtho(-nRange*h/w,nRange*h/w,-nRange,nRange,-nRange,nRange);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void CPointView::OnDestroy()
{
CView::OnDestroy();
// TODO: Add your message handler code here
HGLRC hrc;
hrc=::wglGetCurrentContext();
::wglMakeCurrent(NULL,NULL);
if(hrc)
::wglDeleteContext(hrc);
if(m_pDC)
delete m_pDC;
}
图形操作描述表在实例中的应用:
HDC hdc;
HGLRC hglrc;
hglrc=wglCreateContext(hdc);
wglMakeCurrent(hdc,hglrc);
DrawScene();
wglMakeCurrent(NULL,NULL);
wglDeleteContext(hglrc);
DeleteObject(hdc);
在编程中必须映射的消息函数:
PreCreateWindow
OnCreate
OnDestroy
OnSize
OnEraseBkgnd
OnInitialUpdate
OnDraw
OnIdle
1)系统环境设置:
1.将开发库中的.h文件拷贝到Visual C++ 6.0的/Include/GL目录中 在2008中如没有这个文件目录,可自行创建
2.将.lib文件拷贝到Visual C++ 6.0的/lib目录中
3.将.dll文件拷贝到操作系统的system32目录中
以上文件可上网搜索opengl开发库函数下载,在 工程/设置/连接 中 物体或库模块中添加 opengl32.lib glu32.lib glut32.lib glaux.lib
2)在文件 StdAfx.h 中添加OpenGL函数定义的头文件,这样就可以在工程的任何位置调用其各种函数
#include<gl/gl.h>
#include<gl/glu.h>
#include<gl/glaux.h>
#include<gl/glut.h>
3)在View类中添加如下成员变量:
CDC *m_pDC; //创建绘图设备
HGLRC m_hRC; //OpenGL绘制描述表
HPALETLE m_hPalette; //OpenGL调色板,简单图形绘制可省略
void DrawScene(CDC *cDC); //绘制图形函数,绘图的语法和实现具体参考opengl书籍,材质、光照、渲染等内容为进一步美化绘图
void SetLogicalPalette(void); //设置逻辑调色板
int InitOpenGL(); //初始化opengl相关数值
void DestroyOpenGL(); //销毁绘图设备和绘图描述表
BOOL SetPixelFormat(void); //设置像素格式
4)以下是各函数内容的实现,具体可参考opengl书籍
BOOL CPointView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.style|=WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
return CView::PreCreateWindow(cs);
}
BOOL CPointView::bSetupPixelFormat()
{
static PIXELFORMATDESCRIPTOR pfd=
{
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |PFD_DOUBLEBUFFER,
24,
0,0,0,0,0,0,
0,
0,
0,
0,0,0,0,
32,
0,
0,
PFD_MAIN_PLANE,
0,
0,0,0
};
int pixelformat;
if((pixelformat=ChoosePixelFormat(m_pDC->GetSafeHdc(),&pfd))==0)
{
MessageBox("choose pixel format failure!");
return FALSE;
}
if(SetPixelFormat(m_pDC->GetSafeHdc(),pixelformat,&pfd)==FALSE)
{
MessageBox("set pixel format failure!");
return FALSE;
}
return TRUE;
}
void CPointView::InitOpenGL()
{
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);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
}
void CPointView::OnSize(UINT nType, int cx, int cy) //当窗口尺寸发生改变,调用此函数,其内容主要是设置投影视图范围
{
CView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
int w=cx;
int h=cy;
GLfloat nRange=1.0f;
if(h==0)h=1;
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w<h)
glOrtho(-nRange,nRange,-nRange*h/w,nRange*h/w,-nRange,nRange);
else
glOrtho(-nRange*h/w,nRange*h/w,-nRange,nRange,-nRange,nRange);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void CPointView::OnDestroy()
{
CView::OnDestroy();
// TODO: Add your message handler code here
HGLRC hrc;
hrc=::wglGetCurrentContext();
::wglMakeCurrent(NULL,NULL);
if(hrc)
::wglDeleteContext(hrc);
if(m_pDC)
delete m_pDC;
}
图形操作描述表在实例中的应用:
HDC hdc;
HGLRC hglrc;
hglrc=wglCreateContext(hdc);
wglMakeCurrent(hdc,hglrc);
DrawScene();
wglMakeCurrent(NULL,NULL);
wglDeleteContext(hglrc);
DeleteObject(hdc);
在编程中必须映射的消息函数:
PreCreateWindow
OnCreate
OnDestroy
OnSize
OnEraseBkgnd
OnInitialUpdate
OnDraw
OnIdle
相关文章推荐
- [转]如何设置opengl结合vc开发绚丽的3D图形---操作详解
- 基于 OpenGL 进行 3D 图形开发
- Android OpenGL与3D应用开发之3D图形绘制
- OpenGl开发详解《一》——绘制简单图形
- VC、OpenGL、ArcGIS Engine开发的二维三维结合的GIS系统
- /LGC图形渲染/基于 OpenGL 进行 3D 图形开发
- Android开发 OpenGL ES绘制3D 图形实例详解
- 如何在Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作(远程开发)
- 如何设置VC中的WinpCap开发环境
- 基于VC 6.0 开发的MFC程序如何在文件资源管理器中浏览并选中操作文件
- 基于 OpenGL 进行 3D 图形开发
- iOS开发—对NSOperation操作设置依赖关系
- Socket中如何设置连接超时-通过测试(VC)
- iOS开发系列课程(08) --- 事件处理详解和手势操作
- VC++常用数据类型及其操作详解
- JAVAWEB开发之Hibernate详解(一)——Hibernate的框架概述、开发流程、CURD操作和核心配置与API以及Hibernate日志的使用
- UITableView,UICollectionView和CoreData完美结合进行增删改操作,如何导入大量数据,如何利用NSEntityMigrationPol
- 火云开发课堂 - 《Shader从入门到精通》系列 第十五节:在Shader中对3D模型进行颜色设置
- linux串口操作及设置详解
- VC 中如何从字符串中分离文件名与路径+路径操作