ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:43.44KB ,
资源ID:9567604      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9567604.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(win32下的OpenGL绘图环境框架.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

win32下的OpenGL绘图环境框架.docx

1、win32下的OpenGL绘图环境框架win32下的OpenGL绘图环境框架Win32下OpenGL入门主要的步骤包括:添加opengl头文件,库文件,键盘鼠标响应,像素格式设置,opengl环境初始化,绘图变量设置,创建窗口,窗口大小改变时响应,绘制场景,源文件1,新建一个win32项目(注意,不是console程序),在添加过程中,创建一个空的项目,然后,在解决方案资源管理器的源文件树目录下,添加一个cpp文件,文件可以命名为mian.cpp2,添加绘图相关的头文件和库文件,在新建的main.cpp中,加入如下头文件:#include / Windows的头文件#include / Hea

2、der File For The OpenGL32 Library#include / Header File For The GLu32 Library#include / Header File For The Glaux Library#include / 引入数学函数库中的Sin#include / Header File For Standard Input/Output在项目,配置属性-连接器-输入的附加依赖项里,加入opengl32.lib,glu32.lib,glaux.libglut.lib,如图所示。3,为创建绘图窗口,定义基本的相关变量,这些变量在opengl绘图中,都必

3、须用到。HGLRC hRC=NULL; / 窗口着色描述表句柄HDC hDC=NULL; / OpenGL渲染描述表句柄HWND hWnd=NULL; / 保存我们的窗口句柄HINSTANCE hInstance; / 保存程序的实例第一行设置的变量是Rendering Context(着色描述表)。每一个OpenGL都被连接到一个着色描述表上。着色描述表将所有的OpenGL调用命令连接到Device Context(设备描述表)上。我将OpenGL的着色描述表定义为 hRC 。要让您的程序能够绘制窗口的话,还需要创建一个设备描述表,也就是第二行的内容。Windows的设备描述表被定义为 hD

4、C 。DC将窗口连接到GDI(Graphics Device Interface图形设备接口)。而RC将OpenGL连接到DC。第三行的变量 hWnd 将保存由Windows给我们的窗口指派的句柄。最后,第四行为我们的程序创建了一个Instance(实例)。4,为响应键盘,鼠标等操作,以及窗口活动情况,是否全屏等bool keys256; / 保存键盘按键的数组bool active=TRUE; / 窗口的活动标志,缺省为TRUEbool fullscreen=TRUE; / 全屏标志缺省,缺省设定成全屏模式GLfloat rtri; / 用于几何体旋转的角度active 变量用来告知程序窗口

5、是否处于最小化的状态。如果窗口已经最小化的话,我们可以做从暂停代码执行到退出程序的任何事情。我喜欢暂停程序。这样可以使得程序不用在后台保持运行。 fullscreen 变量的作用相当明显。如果我们的程序在全屏状态下运行, fullscreen 的值为TRUE,否则为FALSE。这个全局变量的设置十分重要,它让每个过程都知道程序是否运行在全屏状态下。5,我们需要先定义WndProc()。必须这么做的原因是CreateGLWindow()有对WndProc()的引用,但WndProc()在CreateGLWindow()之后才出现。在C语言中,如果我们想要访问一个当前程序段之后的过程和程序段的话,

6、必须在程序开始处先申明所要访问的程序段。所以下面的一行代码先行定义了WndProc(),使得CreateGLWindow()能够引用WndProc()。LRESULTCALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); / WndProc的定义6,绘图视口的尺寸以及在窗口大小改变时的响应函数。不管窗口的大小是否已经改变(假定您没有使用全屏模式)。甚至您无法改变窗口的大小时(例如您在全屏模式下),它至少仍将运行一次-在程序开始时设置我们的透视图。OpenGL场景的尺寸将被设置成它显示时所在窗口的大小。GLvoid ReSizeGLScene(GLsizei

7、width, GLsizei height) / 重置OpenGL窗口大小 if (height=0) / 防止被零除 height=1; / 将Height设为1 glViewport(0, 0, width, height); / 重置当前的视口glMatrixMode(GL_PROJECTION); / 选择投影矩阵 glLoadIdentity(); / 重置投影矩阵 / 设置投影模式为透视投影 gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f); glMatrixMode(GL_MODELVIEW); /

8、选择模型观察矩阵 glLoadIdentity(); / 重置模型观察矩阵透视图设置屏幕。意味着越远的东西看起来越小。这么做创建了一个现实外观的场景。此处透视按照基于窗口宽度和高度的45度视角来计算。0.1f,100.0f是我们在场景中所能绘制深度的起点和终点。 glMatrixMode(GL_PROJECTION)指明接下来的两行代码将影响projection matrix(投影矩阵)。投影矩阵负责为我们的场景增加透视。 glLoadIdentity()近似于重置。它将所选的矩阵状态恢复成其原始状态。调用 glLoadIdentity()之后我们为场景设置透视图。glMatrixMode(G

9、L_MODELVIEW)指明任何新的变换将会影响 modelview matrix(模型观察矩阵)。模型观察矩阵中存放了我们的物体讯息。最后我们重置模型观察矩阵。如果您还不能理解这些术语的含义,请别着急。在以后的教程里,我会向大家解释。只要知道如果您想获得一个精彩的透视场景的话,必须这么做。7,接下的代码段中,我们将对OpenGL进行所有的设置。我们将设置清除屏幕所用的颜色,打开深度缓存,启用smooth shading(阴影平滑),等等。这个例程直到OpenGL窗口创建之后才会被调用。此过程将有返回值。但我们此处的初始化没那么复杂,现在还用不着担心这个返回值int InitGL(GLvoid

10、) / 此处开始对OpenGL进行所有设置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; / 初始化 OKGL_SMOOTH:阴影平滑通过多边形精细的

11、混合色彩,并对外部光进行平滑。我将在另一个教程中更详细的解释阴影平滑。深度缓存:将深度缓存设想为屏幕后面的层。深度缓存不断的对物体进入屏幕内部有多深进行跟踪。几乎所有在屏幕上显示3D场景OpenGL程序都使用深度缓存。它的排序决定那个物体先画。这样您就不会将一个圆形后面的正方形画到圆形上来。深度缓存是OpenGL十分重要的部分。8,绘图部分。下一段包括了所有的绘图代码。任何您所想在屏幕上显示的东东都将在此段代码中出现。 这里,绘制了一个简单的金字塔,每个顶点采用不用的颜色int DrawGLScene(GLvoid) / 从这里开始进行所有的绘制 glClear(GL_COLOR_BUFFER

12、_BIT | GL_DEPTH_BUFFER_BIT); / 清除屏幕和深度缓存 glLoadIdentity(); / 重置当前的模型观察矩阵 glTranslatef(-1.5f,0.0f,-6.0f); / 左移 1.5 单位,并移入屏幕 6.0 glRotatef(rtri,0.0f,1.0f,0.0f); / 绕Y轴旋转金字塔 glBegin(GL_TRIANGLES); / 开始绘制金字塔的各个面 glColor3f(1.0f,0.0f,0.0f); / 红色 glVertex3f( 0.0f, 1.0f, 0.0f); / 三角形的上顶点 (前侧面) glColor3f(0.0f

13、,1.0f,0.0f); / 绿色 glVertex3f(-1.0f,-1.0f, 1.0f); / 三角形的左下顶点 (前侧面) glColor3f(0.0f,0.0f,1.0f); / 蓝色 glVertex3f( 1.0f,-1.0f, 1.0f); / 三角形的右下顶点 (前侧面) glColor3f(1.0f,0.0f,0.0f); / 红色 glVertex3f( 0.0f, 1.0f, 0.0f); / 三角形的上顶点 (右侧面) glColor3f(0.0f,0.0f,1.0f); / 蓝色 glVertex3f( 1.0f,-1.0f, 1.0f); / 三角形的左下顶点 (

14、右侧面) glColor3f(0.0f,1.0f,0.0f); / 绿色 glVertex3f( 1.0f,-1.0f, -1.0f); / 三角形的右下顶点 (右侧面) glColor3f(1.0f,0.0f,0.0f); / 红色 glVertex3f( 0.0f, 1.0f, 0.0f); / 三角形的上顶点 (后侧面) glColor3f(0.0f,1.0f,0.0f); / 绿色 glVertex3f( 1.0f,-1.0f, -1.0f); / 三角形的左下顶点 (后侧面) glColor3f(0.0f,0.0f,1.0f); / 蓝色 glVertex3f(-1.0f,-1.0f

15、, -1.0f); / 三角形的右下顶点 (后侧面) glColor3f(1.0f,0.0f,0.0f); / 红色 glVertex3f( 0.0f, 1.0f, 0.0f); / 三角形的上顶点 (左侧面) glColor3f(0.0f,0.0f,1.0f); / 蓝色 glVertex3f(-1.0f,-1.0f,-1.0f); / 三角形的左下顶点 (左侧面) glColor3f(0.0f,1.0f,0.0f); / 绿色 glVertex3f(-1.0f,-1.0f, 1.0f); / 三角形的右下顶点 (左侧面) glEnd(); rtri+=0.2f; / 增加三角形的旋转变量

16、return TRUE; 关于绘图:在opengl里面绘图,首先要了解的就是坐标原点,OpenGL的坐标原点默认情况下,在屏幕中心。OpenGL的坐标系统是右手坐标系统,默认情况下,屏幕朝上为y,朝左为x,朝外为z。9,释放程序的绘图指针。在程序退出之前调用。KillGLWindow() 的作用是依次释放着色描述表,设备描述表和窗口句柄。GLvoid KillGLWindow(GLvoid) / 正常销毁窗口 if (fullscreen) / 我们处于全屏模式吗? ChangeDisplaySettings(NULL,0); / 是的话,切换回桌面,因为全屏模式直接关闭窗口,可能引发错误 S

17、howCursor(TRUE); / 显示鼠标指针 if (hRC) / 我们拥有OpenGL渲染描述表吗? if (!wglMakeCurrent(NULL,NULL) / 我们能否释放DC和RC描述表? MessageBox(NULL,释放DC或RC失败。,关闭错误,MB_OK | MB_ICONINFORMATION); if (!wglDeleteContext(hRC) / 我们能否删除RC? MessageBox(NULL,释放RC失败。,关闭错误,MB_OK | MB_ICONINFORMATION); hRC=NULL; / 将RC设为 NULL if (hDC & !ReleaseDC(hWnd,hDC) / 我们能否释放 DC? MessageBox(NULL,释放DC失败。,关闭错误,MB_OK | MB_ICONINFORMATION);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1