OpenGL编程基础.ppt
《OpenGL编程基础.ppt》由会员分享,可在线阅读,更多相关《OpenGL编程基础.ppt(63页珍藏版)》请在三一办公上搜索。
1、2023/7/7,华中科技大学计算机学院 李国宽,1,1、OpenGL简介 OpenGL(Open Graphics Library,开放图形库),是一个二维/三维的计算机图形和模型库,它源于SGI(Silicon Graphics inc.)公司为其图形工作站开发的IRIS GL,在跨平台移植过程中发展成为OpenGL。目前,OpenGL已成为开放的国际图形标准。,一、OpenGL框架,2023/7/7,2,OpenGL的功能:模型绘制 绘制点、线和多边形,构造三维模型。模型观察 建立变换(坐标变换,投影变换,视窗变换)。颜色模式的指定:RGBA模式和颜色索引模式 光照应用 图象效果增强:反
2、走样、混合和雾化 位图和图象处理 纹理映射 实时动画:双缓存技术(double buffer)交互技术 提供人机交互的接口。,OpenGL的特点从程序开发人员的角度来看,OpenGL是一组绘图命令的API集合。利用这些API能够方便地描述二维和三维几何物体,并控制这些物体按某种方式绘制到显示缓冲区中。OpenGL的API集提供了物体描述、平移、旋转、缩放、光照、纹理、材质、像素、位图、文字、交互以及提高显示性能等方面的功能,基本涵盖了开发二、三维图形程序所需的各个方面。与一般的图形开发工具相比,OpenGL具有以下几个突出特点:,(1)跨平台特性 OpenGL与硬件、窗口和操作系统是相互独立的
3、。为了构成一个完整功能的图形处理系统,其设计实现共分 5 层:图形硬件、操作系统、窗口系统、OpenGL和应用软件。因而,OpenGL可以集成到各种标准窗口和操作系统中。例如,操作系统包括UNIX,Windows NT,Windows 95/98,DOS等;窗口系统包括X Windows,Microsoft Windows等。OpenGL图形函数定义独立于任何程序设计语言,在各种编程语言中,如C,C+,FORTRAIN,Ada和Java等,都可以调用OpenGL的库函数。,(2)应用的广泛性OpenGL是目前最主要的二、三维交互式图形应用程序开发环境,已成为业界最受推荐的图形应用编程接口。自从
4、1992年发表以来,OpenGL已被广泛地应用于CAD/CAM、三维动画、数字图像处理以及虚拟现实等领域,Kinetix公司的3D Studio Max就是突出的代表。无论是在PC机上,还是在工作站甚至是大型机和超级计算机上,OpenGL都能表现出它的高性能和强大威力。,(3)网络透明性 建立在客户/服务器模型上的网络透明性是OpenGL的固有特性,它允许一个运行在工作站上的进程在本机或通过网络在远程工作站上显示图形。利用这种性质能够均衡各工作站的工作负荷,共同承担图形应用任务。(4)高质量和高性能 无论是在CAD/CAM、三维动画还是可视化仿真等领域,OpenGL高质量和高效率的图形生成能力
5、都能得到充分的体现。在这些领域中,开发人员可以利用OpenGL制作出效果逼真的二、三维图像来。,(5)出色的编程特性 OpenGL在各种平台上已有多年的应用实践,加上严格的规范控制,因此OpenGL具有良好的稳定性。OpenGL具有充分的独立性与易使用性等。,2023/7/7,8,2、OpenGL的工作方式(1)体系结构 一个完整的窗口系统的OpenGL图形处理系统的结构如右图所示:最底层为图形硬件,第二层为操作系统,第三层为窗口系统,第四层为OpenGL,最上面的层为应用软件。,2023/7/7,9,(2)OpenGL的流水线 当应用程序进行OpenGL API函数调用时,OpenGL命令将
6、被放在一个命令缓冲区中,这样,命令缓冲区中包含了大量的命令、顶点数据和纹理数据。当这个缓冲区被清空时,缓冲区中的命令和数据都将传递给流水线的下一个阶段。,2023/7/7,10,(3)OpenGL状态机制 OpenGL的工作方式是一种状态机制,它可以进行各种状态或模式设置,这些状态或模式在重新改变它们之前一直有效。状态变量可以通过glEnable()、glDisable()这两个函数来设置成有效或无效状态。另外可以用下列四个函数来获取某个状态变量的值:glGetBooleanv()、glGetDoublev()、glGetFloatv()和glGetIntegerv()。,2023/7/7,1
7、1,3、OpenGL的组成 OpenGL是一种API,包括了多个图形函数,主要由以下函数库组成。(1)OpenGL核心库:gl(2)OpenGL实用程序库:glu(3)OpenGL编程辅助库:aux(4)OpenGL实用程序工具包(OpenGL utility toolkit,GLUT):glut(5)Windows专用库:wgl(6)Win32 API函数库,2023/7/7,12,4、OpenGL中的数据类型,2023/7/7,13,5、函数命名约定OpenGL函数都遵循一个命名约定,即采用以下格式:例如函数glColor3f(),gl表示这个函数来自库gl.h,color表示该函数用于颜
8、色设定,3f表示这个函数采用了三个浮点数参数。,2023/7/7,14,6、OpenGL中的颜色在OpenGL中,一种颜色用红、绿、蓝成分的混合来表示,每种成分的值范围是0.0到1.0。,OpenGL初步编程,在Windows下开发和创建一个OpenGL程序的基本步骤:第一步,选择一个编译环境,如VC+第二步,安装GLUT工具包 第三步,建立一个OpenGL工程 第四步,编译连接 第五步,执行程序,OpenGL初步编程,OpenGL库和头文件:动态库:opengl32.dll glu32.dll glut32.dll 放入windowssystem32目录下静态库:opengl32.lib g
9、lu32.lib glut32.lib放入VC安装目录的LIB目录下头文件:gl.h glu.h glut.h放入VC安装目录的IncludeGL文件夹下,程序清单1.1:在窗口内绘制一个矩形/GLRect.c#include#include#include#include/函数RenderScene用于在窗口中绘制需要的图形void RenderScene(void)/用当前清除色清除颜色缓冲区,即设定窗口的背景色glClear(GL_COLOR_BUFFER_BIT);/设置当前绘图使用的RGB颜色 glColor3f(1.0f,0.0f,0.0f);/使用当前颜色绘制一个填充的矩形glR
10、ectf(100.0f,150.0f,150.0f,100.0f);/刷新OpenGL命令队列glFlush();,/函数ChangeSize是窗口大小改变时调用的登记函数void ChangeSize(GLsizei w,GLsizei h)if(h=0)h=1;/设置视区尺寸glViewport(0,0,w,h);/重置坐标系统,使投影变换复位glMatrixMode(GL_PROJECTION);glLoadIdentity();/建立修剪空间的范围 if(w=h)glOrtho(0.0f,250.0f,0.0f,250.0f*h/w,1.0f,-1.0f);else glOrtho(0
11、.0f,250.0f*w/h,0.0f,250.0f,1.0f,-1.0f);glMatrixMode(GL_MODELVIEW);glLoadIdentity();/函数SetupRC用于初始化,常用来设置场景渲染状态void SetupRC(void)/设置窗口的清除色为白色 glClearColor(1.0f,1.0f,1.0f,1.0f);,void main(void)/初始化GLUT库OpenGL窗口的显示模式glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);/创建一个名为GLRect的窗口glutCreateWindow(GLRect);/设置当
12、前窗口的显示回调函数和窗口再整形回调函数glutDisplayFunc(RenderScene);glutReshapeFunc(ChangeSize);SetupRC();/启动主GLUT事件处理循环glutMainLoop();,GLRect程序运行结果,2023/7/7,21,1、画点、线和面glBegin(GL_POINTS);glVertex3f(0.0f,0.0f,0.0f);glVertex3f(10.0f,10.0f,10.0f);glEnd();计算机中的图元只是把一组顶点或顶点列表解释为屏幕上绘制的某些形状,而顶点是用函数glVertex3f来定义,该函数中的参数指明定义点
13、的x、y和z坐标。,二、用OpenGL绘图,2023/7/7,22,2023/7/7,23,(1)点的大小void glPointSize(GLfloat size);GLfloat sizes2;/保存绘制点的尺寸范围GLfloat step;/保存绘制点尺寸的步长glGetFloarv(GL_POINT_SIZE_RANGE,sizes);glGetFloatv(GL_POINT_SIZE_GRANULARITY,&step);(2)线宽void glLineWidth(GLfloat width)GLfloat sizes2;/保存线宽的尺寸范围GLfloat step;/保存线宽尺寸的
14、最小间隔glGetFloarv(GL_LINE_WIDTH_RANGE,sizes);glGetFloatv(GL_LINE_WIDTH_GRANULARITY,&step);,2023/7/7,24,(3)线型glEnable(GL_LINE_STIPPLE);glLineStipple(GLint factor,GLushort pattern);pattern是一个16位值,他指定了画线时所用的模式。每一位代表线段的一部分是开还是关。默认情况下,每一位对应一个象素,但factor参数充当倍数可以增加模式的宽度。在应用模式时,pattern是逆向使用的,即模式的最低有效位最先作用于指点线段
15、。,2023/7/7,25,2、绕法与多边形模式 在绘制三角形的过程中,三个顶点将三角形封闭的过程是有序的,即三角形的构成路径具有方向性,我们把指定顶点时顺序和方向的组合称为“绕法”。绕法是任何多边形图元的一个重要特性。一般默认情况下,OpenGL认为逆时针绕法的多边形是正对着的。glFrontFace(GL_CW);glFrontFace(GL_CCW);,2023/7/7,26,函数glPolygonMode用于设定多边形模式:glPolygonMode(GLenum face,GLenum mode);其中,参数face用于指定多边形的哪一个面受到模式改变的影响(GL_FRONT,GL_
16、BACK或GL_FRONT_AND_BACK)。参数mode用于指定新的绘图模式。GL_FILL是默认值,生成填充的多边形;GL_LINE生成多边形的轮廓;而GL_POINT只画出顶点。,2023/7/7,27,3、多边形颜色的设置 在OpenGL中,颜色实际上是对各个顶点而不是对各个多边形指定的。(1)glShadeModel(GL_FLAT)告诉OpenGL用指定多边形最后一个顶点时的当前颜色作为填充多边形的纯色,唯一例外是GL_POLYGON图元,它采用的是第一个顶点的颜色。(2)glShadeModel(GL_SMOOTH)告诉OpenGL从各个顶点给三角形投上光滑的阴影,试图在为各个
17、顶点指定的颜色之间进行插值。,Gouraud明暗处理通常算法为:先用多边形顶点的光强线性插值出当前扫描线与多边形边交点处的光强,然后再用交点的光强线插值处扫描线位于多边形内区段上每一象素处的光强值。采用Gouraud明暗处理不但可以使用多边形表示的曲面光强连续,而且计算量很小。,2023/7/7,29,4、深度测试 深度测试是一种移除被挡住表面的有效技术。为了启用深度测试,只要调用:glEnable(GL_DEPTH_TEST);glDisable(GL_DEPTH_TEST);另外为了使深度缓冲区正常完成深度测试功能,在每次渲染场景时,必须先清除深度缓冲区:glClear(GL_DEPTH_
18、BUFFER_BIT);,2023/7/7,30,5、多边形构造规则(1)所有多边形都必须是平面的。(2)第二条规则是多边形的边缘决不能相交,而且多边形必须是凸的。解决:对于非凸多边形,可以把它分割成几个凸多边形(通常是三角形),再将它绘制出来。问题:轮廓图形状态会看到组成大表面的所有小三角形。处理OpenGL提供了一个特殊标记来处理这些边缘,称为边缘标记。glEdgeFlag(True)glEdgeFlag(False),1、OpenGL中的变换(1)视图变换:指定观察者或摄影机的位置;(2)模型变换:在场景中移动对象;(3)模型视图变换:描述视图变换与模型变换的对偶性;(4)投影变换:对视
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OpenGL 编程 基础
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5441897.html