- 浏览: 162916 次
- 性别:
- 来自: 广州
最新评论
-
雷蕾_ing:
...
python 模拟POST -
blink31:
TextOut不能换行,请问有其他的解决办法吗?
C++下的OpenGL文字显示的完美解决方案 -
lwz7512:
这么强悍!
在优酷的几道笔试题 -
lwz7512:
下了,谢谢分享!
opengl3D台球源代码 -
xltank:
今天过期了。。。
flash builder 序列号
from:http://huhuiowen.blog.163.com/blog/static/130103920083193167420/
对话框中OpenGL的设置
基于对话框的OpenGL图形程序的基本框架
1、 理论基础
a、在对话框中建立需要OpenGL绘图的窗口,并按OpenGL得要求设置窗口的属性和风格;
b、在该窗口的创建过程中,设置好显示的像素格式,并创建OpenGL绘制描述表RC;
c、在窗口的绘制过程中,首先获得Windows设备描述表DC,然后将其与事先设置好的OpenGL绘制表述表RC联系起来;
d、调用OpenGL命令进行图形绘制;
e、退出OpenGL图形窗口时,释放OpenGL绘制描述表RC和Windows设备描述表DC。
2、变成步骤
a、设置好OpenGL得编程环境
b、启动vc6.0,选择NEW菜单,在NEW对话框中选择Project标签,选择"MFC
AppWizard(exe)",新建一个基于对话框的工程。名称为MyDlgOpenGL。
c、删除对话框的静态文本控件。
d、选择insert->new
class菜单,在工程中插入一个新类COpenGL,基类选择generic CWnd。
e、利用MFC
ClassWizard为COpenGL类添加消息WM_CREATE、WM_PAINT得响应函数,WM_CREATE为了设置绘图像素格式,创建渲染描述表。WM_PAINT进行OpenGL渲染。
f、在OpenGL.h中加入源代码
public:
virtual ~COpenGL();
///////////////////////////////////////////////////////////
//添加的成员函数与成员变量
int MySetPixelFormat(HDC hdc);
void DrawColorBox(void);
HDC hdc;
HGLRC hglrc;
GLfloat step,s;
////////////////////////////////////////////////////////////
g、在文件OpenGL.cpp中加入如下代码
COpenGL::COpenGL()
{
//给成员变量赋初值
step = 0.0;
s = 0.1;
}
COpenGL::~COpenGL()
{
wglMakeCurrent(NULL,NULL);
wglDeleteContext(hglrc);//删除渲染描述表
::ReleaseDC(m_hWnd,hdc);//释放设备描述表
}
/////////////////////////////////////////////////////////////////////////////
// COpenGL message handlers
//设置像素格式
int COpenGL::MySetPixelFormat(HDC hdc)
{
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 iPixelFormat;
// 为设备描述表得到最匹配的像素格式
if((iPixelFormat = ChoosePixelFormat(hdc, &pfd))
== 0)
{
MessageBox("ChoosePixelFormat Failed", NULL, MB_OK);
return 0;
}
// 设置最匹配的像素格式为当前的像素格式
if(SetPixelFormat(hdc, iPixelFormat, &pfd) ==
FALSE)
{
MessageBox("SetPixelFormat Failed", NULL, MB_OK);
return 0;
}
return 1;
}
int COpenGL::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// 设置当前的绘图像素格式
MySetPixelFormat(::GetDC(m_hWnd));
// 获得绘图描述表
hdc = ::GetDC(m_hWnd);
// 创建渲染描述表
hglrc = wglCreateContext(hdc);
// 使绘图描述表为当前调用现程的当前绘图描述表
wglMakeCurrent(hdc, hglrc);
return 0;
}
void COpenGL::OnPaint()
{
// CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
//调用OpenGL绘图函数进行图形绘制
// glClearColor(0.0,1.0,0.0,1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//清除颜色缓存和深度缓存
s+=0.005;
if(s>1.0)
s=0.1;
step = step + 1.0;
if (step > 360.0)
step = step - 360.0;
glPushMatrix();
glScalef(s,s,s);
glRotatef(step,0.0,1.0,0.0);
glRotatef(step,0.0,0.0,1.0);
glRotatef(step,1.0,0.0,0.0);
DrawColorBox();
glPopMatrix();
glFlush();
SwapBuffers(hdc);
// Do not call CWnd::OnPaint() for painting messages
}
void COpenGL::DrawColorBox(void)
{
GLfloat p1[]={0.5,-0.5,-0.5}, p2[]={0.5,0.5,-0.5},
p3[]={0.5,0.5,0.5}, p4[]={0.5,-0.5,0.5},
p5[]={-0.5,-0.5,0.5}, p6[]={-0.5,0.5,0.5},
p7[]={-0.5,0.5,-0.5}, p8[]={-0.5,-0.5,-0.5};
GLfloat m1[]={1.0,0.0,0.0}, m2[]={-1.0,0.0,0.0},
m3[]={0.0,1.0,0.0}, m4[]={0.0,-1.0,0.0},
m5[]={0.0,0.0,1.0}, m6[]={0.0,0.0,-1.0};
GLfloat c1[]={0.0,0.0,1.0}, c2[]={0.0,1.0,1.0},
c3[]={1.0,1.0,1.0}, c4[]={1.0,0.0,1.0},
c5[]={1.0,0.0,0.0}, c6[]={1.0,1.0,0.0},
c7[]={0.0,1.0,0.0}, c8[]={1.0,1.0,1.0};
glBegin (GL_QUADS); //绘制多个四边形
glColor3fv(c1);
glNormal3fv(m1);
glVertex3fv(p1);
glColor3fv(c2);
glVertex3fv(p2);
glColor3fv(c3);
glVertex3fv(p3);
glColor3fv(c4);
glVertex3fv(p4);
glColor3fv(c5);
glNormal3fv(m5);
glVertex3fv(p5);
glColor3fv(c6);
glVertex3fv(p6);
glColor3fv(c7);
glVertex3fv(p7);
glColor3fv(c8);
glVertex3fv(p8);
glColor3fv(c5);
glNormal3fv(m3);
glVertex3fv(p5);
glColor3fv(c6);
glVertex3fv(p6);
glColor3fv(c3);
glVertex3fv(p3);
glColor3fv(c4);
glVertex3fv(p4);
glColor3fv(c1);
glNormal3fv(m4);
glVertex3fv(p1);
glColor3fv(c2);
glVertex3fv(p2);
glColor3fv(c7);
glVertex3fv(p7);
glColor3fv(c8);
glVertex3fv(p8);
glColor3fv(c2);
glNormal3fv(m5);
glVertex3fv(p2);
glColor3fv(c3);
glVertex3fv(p3);
glColor3fv(c6);
glVertex3fv(p6);
glColor3fv(c7);
glVertex3fv(p7);
glColor3fv(c1);
glNormal3fv(m6);
glVertex3fv(p1);
glColor3fv(c4);
glVertex3fv(p4);
glColor3fv(c5);
glVertex3fv(p5);
glColor3fv(c8);
glVertex3fv(p8);
glEnd();
}
h、在文件MyDlgOpenGLDlg.h中加入如下源代码。
////////////////////////////////////////////////////
//添加类COpenGL的头的说明文件
#include "OpenGL.h"
//////////////////////////////////////////////////////////////////////////
在class CMyDlgOpenGLDlg : public CDialog中添加
发表评论
-
GUI设计禁忌
2010-01-07 12:02 990本文列举Jeff Johnson:《GUI设计禁忌》一书中 ... -
LOD地形设计(三)
2010-01-05 05:03 1021LOD地形根据视点的变化决定是否进行网格分割,因此系统应设计一 ... -
LOD地形设计(二)
2010-01-05 05:02 1212自从LOD地形第一节推出以来,受到不少朋友的关注,本人真是受宠 ... -
LOD地形设计(一)
2010-01-05 05:01 1118在大规模的三维场 ... -
Windows SDK笔记
2009-04-16 16:45 1407应程序需求需要重写窗体内子控件某一特定消息,可怜我苦苦找了 ... -
关于的glut 的配置
2009-02-09 17:46 1700OpenGL 是一套 用于三维作图的API。与Direct3 ... -
OpenGL的消隐与双缓冲(2)
2009-02-09 17:46 1638#include "stdafx.h" ... -
C语言读取bmp位图文件(含bmp格式定义)
2009-02-09 17:45 3903loadbmp.h #ifndef _LOADBMP_H_ ... -
openGL贴图(借助glx),并测试性能(FPS)2
2009-02-09 17:45 1193client.c #include <sys/type ... -
alpha混合技术
2009-02-09 17:44 1500alpha混合技术 alpha混合技术对熟悉游戏的人来说不会 ... -
C语言将raw data(rgb/rgba)写成bmp文件(bmp24或32)
2009-02-09 17:44 3732int bmp_write(unsigned char *im ... -
OpenGL坐标变换专题
2009-02-09 17:43 2530OpenGL通过相机模拟、可 ... -
OpenGL曲线绘制:线段
2009-02-09 17:42 1894以线段方式绘制曲线。例如:正弦曲线。 glBegin(GL_ ... -
用VC++做OpenGL程序框架时出现非法错误
2009-02-09 17:40 10141.OpenGL.cpp 文件包含的头文件有没有{}不配对的情 ... -
opengl编写游戏的可移植性 具体表现
2009-02-09 17:39 1088OpenGL是个与硬件无关的软件接口,可以在不同的平台如Win ... -
什么是显卡的OpenGL模式
2009-02-09 17:39 1669OpenGL是近几年发展起来的一个性能卓越的三维图形标准。 ... -
关于-opengl在魔兽中的应用
2009-02-09 17:38 2007OpenGL在画质上是优于Direct的,这个“画质”不是指感 ... -
如何让显卡支持OpenGL模式????????
2009-02-09 17:38 3335OPENGL 不支持问题 这也 ... -
opengl3D台球源代码
2009-01-20 09:59 24383D台球,可以平面也可以从不同角度击球,使用OPENGL渲染, ... -
Jeff Molofee(NeHe)的OpenGL教程 - 碰撞检测与模型运动
2009-01-20 09:30 1650原 文 : Lesson 31: Collis ...
相关推荐
标签进一步强调了关键概念:“mfc对话框opengl”表明这是关于在MFC对话框中使用OpenGL,“opengl_对话框”表示对话框中内嵌OpenGL画布,“opengl_类”意味着有一个自定义的类用于封装OpenGL操作,“opengl对话框”...
基于对话框的opengl实例程序,演示如何建立基于对话框的opengl程序
在Windows环境中,特别是使用Microsoft Visual C++ 6.0(简称VC++6.0)开发图形应用程序时,OpenGL通常与对话框(Dialog Box)结合使用,以创建具有交互性的图形用户界面。 构建OpenGL的对话框涉及以下关键知识点:...
在MFC对话框中使用OpenGL编程,涉及到一系列关键步骤,这些步骤确保了OpenGL可以在MFC框架下正确地渲染图形。以下是对这些步骤的详细解析: ### 1. 导入OpenGL库 首先,你需要在项目中引入OpenGL的相关库。这包括`...
在OpenGL中,可以使用glViewport和glOrtho或gluPerspective函数来控制视口和投影。 自动旋转功能通常通过定时器和OpenGL的旋转矩阵实现。设置一个定时器,每隔一定时间更新旋转角度,然后在OnDraw函数中应用新的...
5. 设备上下文(DC)和OpenGL上下文:了解如何在Windows环境中设置和使用OpenGL渲染上下文。 6. 注释的使用:编写清晰的代码注释以提高代码可读性。 7. 用户界面交互:设计用户可以通过对话框与3D环境进行交互的方式...
在Windows编程环境中,基于对话框(Dialog Box)的OpenGL显示是一种常见的实现图形用户界面(GUI)的方法。对话框是用户与应用程序交互的窗口,而OpenGL则是一个强大的图形库,用于生成2D和3D图像。将这两者结合,...
首先,为了在MFC对话框中使用OpenGL,我们需要在资源编辑器中添加一个自定义控件,通常是CStatic派生的控件,因为CStatic是MFC中最常用来显示静态文本或图像的控件。然后,我们需要重写这个控件的OnPaint方法,以便...
在“基于MFC对话框的OpenGL类”项目中,我们首先需要了解如何在MFC对话框中嵌入OpenGL支持。这通常涉及到以下几个关键步骤: 1. **创建OpenGL上下文**:在MFC对话框的初始化阶段,我们需要创建一个OpenGL渲染上下文...
在本例中,可能需要GLUT来帮助设置OpenGL环境,比如创建窗口和初始化上下文,但由于是基于对话框的,你可能并不直接使用GLUT的窗口管理功能,而是用MFC的对话框机制。 最后,测试和调试是必不可少的步骤。确保你的...
3. **设置OpenGL上下文**:在对话框的初始化代码中,你需要为OpenGL控件创建一个OpenGL上下文。这通常在`OnInitDialog()`函数中完成。你可以使用`CWnd::GetDC()`获取设备上下文(DC),然后调用`wglCreateContext()`...
为了在对话框中嵌入OpenGL,我们需要创建一个自定义的窗口类,该类继承自CWnd,并且重写Create函数,以便为OpenGL提供必要的初始化设置。 在创建OpenGL窗口时,我们需要调用`wglCreateContext`函数来获取OpenGL上...
你需要在Create函数中设置WS_EX_CLIENTEDGE风格,以便获得一个可用于OpenGL绘图的设备上下文(DC)。 2. 在OnPaint方法中,获取窗口的设备上下文,然后创建一个OpenGL上下文,绑定到这个设备上下文。调用...
在Windows环境中,结合MFC(Microsoft Foundation Classes)库,我们可以创建基于对话框的应用程序来展示OpenGL图形。 在“基于对话框的OpenGL程序框架”中,主要涉及到以下几个关键知识点: 1. **OpenGL上下文...
OpenGL是一种强大的图形库,用于在各种操作...通过这个项目,你可以学习到如何在对话框中设置和管理OpenGL上下文,以及如何将OpenGL绘图逻辑与用户交互结合起来。这将有助于提升你在图形界面设计和图形编程方面的技能。
本篇文章将深入探讨如何在MFC对话框中集成OpenGL,实现动态的图形渲染。 首先,要理解MFC对话框的基本结构。MFC是微软提供的C++类库,它简化了Windows API的使用,使得创建和管理窗口和对话框变得更为容易。对话框...
这个`Opengl_dialog`项目提供了一个起点,让你能够轻松地在MFC对话框中集成OpenGL,从而创建出具有丰富视觉表现力的应用程序。随着对OpenGL和MFC理解的深入,你可以进一步扩展此框架,实现更复杂的图形功能。
在OpenGL中,模型数据通常以顶点、法线和纹理坐标的形式存在,可能存储在.obj、.3ds或自定义格式的文件中。加载这些文件需要使用文件I/O函数,如fopen、fread等,并解析文件内容,将数据结构化为OpenGL可以理解的...
3. OpenGL上下文的创建和管理,以及如何在MFC控件中设置和使用它。 4. 熟悉OpenGL的绘图函数,如glBegin(), glEnd(), glVertex3f(), glColor3f(), 和glDrawArrays()等。 5. 双缓冲的概念和SwapBuffers()函数的用途,...
在本文中,我们将深入探讨如何在MFC(Microsoft Foundation Classes)框架中集成OpenGL,以便在对话框中实现3D图形的交互式操作。MFC是微软提供的一种C++类库,用于构建Windows应用程序,而OpenGL则是一种强大的跨...