精品openGL讲义.ppt
《精品openGL讲义.ppt》由会员分享,可在线阅读,更多相关《精品openGL讲义.ppt(71页珍藏版)》请在三一办公上搜索。
1、1,一、OpenGL简介,什么是OpenGLOpenGL的组成一个简单的绘图程序OpenGL函数命名规范NT环境中OpenGL的命令解释流程,2,什么是OpenGL,是一个功能强大的图形库,用户可以很方便地开发所需要地有多种特殊视觉(如光照,纹理,透明,阴影)的三维图形。与软硬件平台无关的三维图形软件包,可运行于多种窗口系统之上包含图元生成、投影、光照、光栅化等图形显示过程所需的功能,3,发展历史,前身是由SGI公司为其图形工作站开发的IRIS GL,是一个工业标准的三维图形软件接口。向其他平台移植时,开发了OpenGL,有GL的功能,而且是开放的,使用于多种硬件平台及操作系统,用户可以创建出
2、接近光线跟踪的高质量静止或动画的三维彩色图象,而且是要比光线跟踪算法快一个数量级。,4,OpenGL的组成,OpenGL库包括115个基本函数函数以gl开头例:glColor3f(),glTranslate3f().完成图元的定义、几何变换、投影等功能,5,OpenGL的组成,OpenGL实用库实用函数43个函数以glu开头例:gluPerspective();完成更高层的图形处理如曲线曲面的生成、图象操作等OpenGL辅助库包括函数31个函数以aux开头例:auxInitWindow();主要用于窗口管理,6,主要特点,OpenGL可以在网络上工作,即客户机/服务器型,显示图形的计算机(客户
3、机)可以不是运行图形程序的计算机(服务器),客户机与服务器可以是不同类型的计算机,只要两者服从相同的协议。OpenGL是与硬件无关的软件接口,可以在多种硬件平台上运行,使得OpenGL的应用程序有较好的移植性。,7,OpenGL的工作顺序,构造几何要素(点,线,多边形,图象,位图),创建对象的数学描述。在三维空间上放置对象,选择有利的场景观察点。计算对象的颜色,这些颜色可能直接定义,或由光照条件及纹理间接给出。光栅化,把对象的数学描述和颜色信息转换到屏幕的象素。另外,也可能执行消隐,以及对象素的操作。,8,OpenGL程序的基本结构,第一部分是初始化部分:主要是设置一些OpenGL的状态开关,
4、如颜色模式(RGBA或ALPHA)的选择,是否作光照处理(若有的话,还需设置光源的特性),深度检验,裁剪等等。这些状态一般都用函数glEnable(?),glDisable(?)来设置,?表示特定的状态。,9,第二部分设置观察坐标系下的取景模式和取景框大小。主要用到三个函数:void glViewport(left,top,right,bottom);设置在屏幕上的窗口大小,四个参数描述屏幕窗口四个角上的坐标(以象素表示);void glOrtho(left,right,bottom,top,near,far);设置投影方式为正交投影(平行投影),其取景体积是一个各面均为矩形的六面体;void
5、 gluPerspective(fovy,aspect,zNear,zFar);设置投影方式为透视投影,其取景体积是一个截头锥体,在这个体积内的物体投影到锥的顶点。,10,第三部分是OpenGL的主要部分,使用OpenGL的库函数构造几何物体对象的数学描述,包括点线面的位置和拓扑关系,几何变换,光照处理等等。注:移植到使用MFC框架下的Windows程序中,由于Windows自身有一套显示方式,需要进行一些必要的改动以协调这两种不同显示方式。,11,绘图前的一些准备工作,清除当前窗口的内容,以免影响绘图的效果 void glClearColor(red,green,blue,alpha);给定
6、当前屏幕的背景设置颜色,red,green,blue,alpha 为RGBA颜色值.,12,void glClear(mask);命令标志要清除的缓冲区。可以清除的缓冲区如下表所示:,13,可以用glClearColor,glClearDepth,glClearIndex,glClearStencil,glClearAcc函数为各自对应的缓冲区赋值。若要同时清除多个缓冲区,使用上表中所列的mask位或组合,在速度上要比使用多次调用glClear函数要快得多。,14,描述几何要素,按一定的顺序给出几何要素的顶点,glVertex命令指定一个顶点,并在生成顶点后,把当前颜色,纹理坐标,法线等值赋给
7、这个顶点。函数void glVertex234sifdv(coords);有时用矢量形式定义顶点,执行效率高,但是它只能在glBegin与glEnd之间调用才有意义。,15,glBegin标志几何要素定义的开始,glEnd函数则标志结束一个几何要素的定义。函数 void glBegin(Glenum mode);mode 的值见下表。,16,17,一个简单的绘图程序,例程,#include#include#include#include void main(void)OpenAWindow();/创建一个窗口InitOpenGL();/初始化OpenGLglColor3f(1.0,1.0,1.
8、0);/设置当前颜色glBegin(GL_POLYGON);/开始绘图glVertex2f(-0.5,-0.5);glVertex2f(-0.5,0.5);glVertex2f(0.5,0.5);glVertex2f(0.5,-0.5);glEnd();glFlush();/强制输出KeepTheWindowOnScreenForAWhile();/使窗口在屏幕上保留一会,18,OpenGL函数命名规范,void glVertex3fv(Glfloat*vertex);前缀 后缀前缀gl,glu,aux-该函数属于哪个函数库后缀2,3,4-参数的维数b,s,l,f,d,ub,us,ui-参数的
9、数据类型v-以数组方式传递参数函数名中的单词首写字母大写,19,NT环境中OpenGL的命令解释流程,OpenGL命令,OpenGL DLL,客户,服务器,OpenGL ICD,加速卡DDI,Win32 DDI,Server DLL,视频驱动,应用程序,不带加速卡 带加速卡,应用程序,OpenGL命令,OpenGL DLL,客户,服务器,Server DLL,Win32 DDI,视频驱动,20,NT环境中OpenGL的命令解释流程,ICD是可安装的客户驱动(Installable Client Driver)DLL是动态联接库(Dynamic Link Library)DDI是设备驱动接口(D
10、evice Driver Interface),21,二、OpenGL图元,创建第一个应用程序图元的绘制图元的属性,22,创建第一个应用程序(1/8),初始化显示方式例:将显示方式置为单缓存、直接颜色方式,void auxInitDisplayMode(GL_SINGLE|AUX_RGBA);,void auxInitDisplayMode(Glbitfield mask);mask:GL_DOUBLE(GL_SINGLE)|AUX_RGBA(AUX_INDEX)|AUX_DEPTH|AUX_STENCIL|AUX_ACCUM,23,创建第一个应用程序(2/8),创建窗口初始化窗口的位置与大小
11、 创建并显示窗口,void auxInitPosition(Glint x,GLint y,GLsizei width,GLsizei height);(x,y):窗口的原点width,height:窗口的宽和高,void auxInitWindow(GLbyte*title);title:窗口标题,24,创建第一个应用程序(3/8),初始化帧缓存(颜色缓存)指定初始颜色清帧缓存,void glClearColor(GLclampf r,GLclampf g,GLclampf b,GLclampf a);缺省值:(0.0,0.0,0.0,0.0),void glClear(GL_COLOR_B
12、UFFER_BIT);,25,创建第一个应用程序(4/8),初始化深度缓存指定初始深度值 清深度缓存,void glClearDepth(GLclampd depth);缺省值:0.0,void glClear(GL_DEPTH_BUFFER_BIT);,26,创建第一个应用程序(5/8),设置投影方式置投影方式为平行投影置投影方式为透视投影,void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,Gldouble near,GLdouble far);,void glFrustum(GLdouble lef
13、t,GLdouble right,GLdouble bottom,GLdouble top,Gldouble near,GLdouble far);,27,创建第一个应用程序(6/8),指定图元的颜色绘图强制输出,void glColor*();,void glFlush(void);,28,创建第一个应用程序(7/8),例程2-1#include#include#include#include void KeepTheWindowOnScreenForAWhile()_sleep(2000);void main(void)auxInitDisplayMode(AUX_SINGLE|AUX_R
14、GBA);auxInitPosition(0,0,500,400);auxInitWindow(Create Your Own Program);glClearColor(0.0,0.0,0.0,0.0);glClearDepth(0.0);glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);,29,创建第一个应用程序(8/8),glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0);glColor3f(1.0,1.0,1.0);glBegin(GL_POLYGON);glVertex3f(-0.5,-0.5,0.0);glVert
15、ex3f(-0.5,0.5,0.0);glVertex3f(0.5,0.5,0.0);glVertex3f(0.5,-0.5,0.0);glEnd();glFlush();KeepTheWindowOnScreenForAWhile();,30,图元的绘制(1/2),图元的种类点、线段、多边形、矩形图元的表示点:三维坐标(x,y,z)齐次坐标(x,y,z,1)线段:两个端点多边形:顶点序列矩形:左下角点、右上角点绘制图元定义一个顶点void glVertex234sifdv(TYPE coords);,例:glVertex3f(1.0,1.0,1.0);,31,图元的绘制(2/2),glBeg
16、in()与glEnd()允许在glBegin()与glEnd()之间调用的OpenGL命令,void glBegin(GLenum mode);mode:GL_POINTS,GLLINES,GL_LINE_STRIP,GL_LINE_LOOP,GL_POLYGON,GL_TRIANGLE_STRIP,GL_TRIANGLE_FAN,GL_QUADS,GL_QUAD_STRIPvoid glEnd(void);,glVertex*();glColor*();glIndex();glNormal();glEvalCoord*();glCallList(),glCallLists();glTexCo
17、ord();glEdgeFlag();glMaterial();,32,图元的属性(1/5),颜色点大小(缺省值为1)线段线宽,void glColor*();void glIndex();,void glPointSize(GLfloat size);,void glLineWidth(GLfloat width);,33,图元的属性(2/5),线型:连续线(缺省值)、点画线等多边形绘制方式:顶点、边界、填充,void glPolygonMode(GLenum face,GLenum mode);face:GL_FRONT_AND_BACK(缺省值)GL_FRONTGL_BACKmode:G
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精品 openGL 讲义
链接地址:https://www.31ppt.com/p-6329635.html