- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Windows 下一般已经带上了 OpenGL 的 opengl32. dll 动态连接库, 读者可在 windows 目录下的 SYSTEM 32 子目录中查到。但是一般没有直接带 glu32. dll、 glut32.dll、glut.dll 等。必须再单独将这些动 态链接库入 Windows 目录下 的 SYSTEM32 子目录中去。
myReshape 是一个函数指针。这个函数带有两个参数, 即窗口改变后的新宽度和
新高度。
◇auxMainLoop() 循环绘制场景, 参数 myDisplay 即为场景绘制函数。当窗
口需要更新或场景发生改变时, 程序便调用 myDisplay, 更新绘制场景。
二、创建基于 MFC 的 OpenGL 单文档应用程序 限于篇幅,有关详细内容请参考有关书籍。这里只归纳总结一下利用 VC 的
{
glViewport(0,0,w,h);
// 设置窗口缩放时的视口变换
}
int main(int argc, char* argv[])
{
auxInitDisplayMode(AUX_SINGLE | AUX_RGBA); //初始化显示模式
auxInitPosition(0,0,400,400);
int pixelFormat=ChoosePixelFormat(dc.m_hDC,&pfd);//选择像素格式
BOOL success=SetPixelFormat(dc.m_hDC,pixelFormat,&pfd);// 设 置 像 素
格式
//创建绘图上下文 RC
m_hRC=wglCreateContext(dc.m_hDC);
wglMakeCurrent(NULL,NULL); wglDeleteContext(m_hRC);//删除渲染上下文 m_hRC ⑥改造 OnDraw:根据当前的视点、视距、观看方向等参数,设置合适的 OpenGL 视景体属性,使用户能够看到预期的场景外观。添加的代码如下:
wglMakeCurrent(pDC->m_hDC,m_hRC);
并且图形缓存为单缓存(SINGLE BUFFER)。
◇auxInitPosition () 定义窗口的初始位置, 前两个参数(0, 0) 为窗口的左上
角点的屏幕坐标, 后两个参数(500, 500) 为窗口的宽度和高度。
◇auxInitWindow ()窗口初始化,字符参数是窗口名称。
◇ auxReshapeFunc() 窗 口 大 小 改 变 时 重 新 定 义 场 景 形 状 尺 寸 。 参 数
0,0,0,0, //accum bits ignored
32, //32 位 z 缓冲
0, //不使用模板缓存
0, //no auxiliary buffer
PFD_MAIN_PLANE,
//选择主层面
0, //保留
0,0,0 //layer masks ignored
};
CClientDC dc(this);//创建设备环境类对象 dc
③改造 OnSize 函数:当视图尺寸变化是,应及时将新的客户区尺寸通知 OpenGL, 方能够正确在窗口客户区域显示二维场景,通过命令 glViewPort 完成这项工作。 ④改造 OnEraseBkgnd 函数:重载视图类的 OnEraseBkgnd 成员,使之返回 TRUE 值可以阻止 Windows 重画窗口背景,因为 OpenGL 自己会设置窗口背景,这样 可以防止窗口频繁刷新(如移动窗口)时产生的闪烁现象。 ⑤改造 OnDestroy 函数:在 OnDestroy 成员中需要释放 OnCreate 成员中 RC 所 占用的资源,命令 wglDeleteContext 可以完成这个工作,但在释放 RC 之前,还 需要使用命令 wglMakeCurrent()断开 RC 与设备描述表 DC 的连接。具体代码如 下:
cs.style=WS_CLIPCHILDREN|WS_CLIPSIBLINGS; ②改造 OnCreate 函数:定义像素存储格式,并创建一个 OpenGL 操作所必须的 绘图上下文 RC(Rendering Context)。使用一个 PIXELFORMATDESCRIPTOR 结 构来指定像素格式,使用 wglCreateContext()函数创建绘图上下文 RC。
将头文件<gl.h >、< glu. h>、< glut. h>和< glaux. h>拷贝到 VC 的 include 子目录下。
1. 3 OpenGL 简单例程举例 创建一个基于控制台的应用程序 首先运用 OpenGL 辅助库的窗口管理功能来讲解一个简单的 OpenGL 图
形应用实例, 这个例程创建一个基于控制台的应用程序,在窗口绘制一个线框球。 // Console.cpp : Defines the entry point for the console application. #include "stdafx.h" #pragma warning(disable : 4305) #include <windows.h> //添加 OpenGL 头文件 #include <GL/gl.h> #include <GL/glu.h> #include <GL/glaux.h> //定义用户函数及回调函数 void myInit(void); void CALLBACK myReshape(GLsizei w,GLsizei h); void CALLBACK myDisplay(void);
DrawScene(); //用户自定义函数,用来编写 OpenGL 绘制语句的 wglMakeCurrent(pDC->m_hDC,NULL);// 使 m_hRC 为非现行的绘图上下文 在 DrawScene( )函数中编写具体的绘图程序。首先需要设置视点、视距和观看方 向等场景参数,然后绘制图元。
//窗口显示位置
auxInitWindow("My First Console OpenGL Application"); //窗口标题
myInit();
auxReshapeFunc(myReshape);
auxMainLoop(myDisplay);
return 0;
}
◇auxInitDisplayMode( ) 设置窗口显示模式为 RGBA 方式, 即彩色方式,
void myInit(void) {
glClearColor(0.0,0.0,0.0,0.0); //背景清除颜色 glShadeModel(GL_FLAT); //图形绘制模式 }
void CALLBACK myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
在 VC 下添加 OpenGL 静态链接库: opengl32.lib、glu32.lib、 glaux.lib、 glut32.lib。
将动态链接库文件 opengl32.dll、GLUT.dll、GLUT32.dll、GLU.dll 拷贝到 系统的"Windows(或 WinNT)\system32\"目录下。
MFC 类库使 penGL 与 Windows 接口的基本方法和步骤, 并举出一个完整的例 子。
2. 1Windows 下的 OpenGL 函数 W indows 下的 OpenGL 包含 200 多个库函数, 这些函数都按一定的格式来 命名, 即每个函数都以 gl 开头。Windows 下的 OpenGL 除了具有基本的 OpenGL 函数外, 还支持其他两类函数: (1) W indows 专用库函数(WGL ) : 6 个函数, 每个函数以 wgl 开头; (2) W in32 AP I 函数: 5 个函数, 函数前面没有专用前缀; 6 个 WGL 函数用于连接 OpenGL 和 W indows。这些函数用于 Windows 环境下的 OpenGL 窗口能够进行渲染着色, 在窗口内绘制位图字体以及把文本 放在窗口的某一位置等。这些函数把 W indows 和 OpenGL 揉合在一起; 最后的 5 个 Win32 函数用于处理象素存储格式和双缓存, 显然这些函数仅仅能够用于 W in32 系统而不能用于其他 OpenGL 平台。 2. 2 OpenGL for W indows 程序设计基本步骤 下面通过一个例子具体讲述利用 VC 的 MFC 类库编写 OpenGL for W indows 的基本步骤: ①改造 PreCreateWindow 函数:将窗口的客户区设置为 OpenGL 能够支持的风 格。具体添加代码如下:
OpenGL 基础知识
1 OpenGL 函数库及简单例程
1. 1OpenGL 函数库 OpenGL 是一个针对图形硬件的软件接口(Software Interface)。它包括 200
多个图形操作函数, 分属于三个基本图形库, 即基础库、实用库、辅助库。OpenGL 基础库是 OpenGL 最底层的图形函数库, 它提供大量的几何图原和图象单元的 操作, 约含 115 个函数, 函数前缀为 gl, 列于头文件<gl.h > 中; OpenGL 实用库 ( the OpenGL Utility Library, GLU ) 是在基础库上开发的高级实用函数库, 它提 供更方便的纹理映射、坐标变换和复杂三维物体建模的调用, 约含 43 个函数, 前 缀 为 glu, 列 于 头 文 件 < glu. h> 中 ;OpenGL 辅 助 库 ( the OpenGL Auxiliary Library,AUX) 是为 OpenGL 编程初学者提供的一系列窗口管理、输入输出及三 维复杂物体绘制的特殊函数库, 因 OpenGL 本身并不带窗口系统, 也不提供复杂 场景绘制功能, 因此提供辅助库便于快速入门,正式应用时可不用这些函数, 而 直接在所用窗口系统下实现这些功能, 辅助库约含 31 个函数, 前缀为 aux, 列于 头文件< aux. h> 中。 1. 2 基本接口编程