OPENGL简介.ppt

上传人:啊飒飒 文档编号:14912568 上传时间:2022-02-24 格式:PPT 页数:33 大小:425.50KB
返回 下载 相关 举报
OPENGL简介.ppt_第1页
第1页 / 共33页
OPENGL简介.ppt_第2页
第2页 / 共33页
OPENGL简介.ppt_第3页
第3页 / 共33页
OPENGL简介.ppt_第4页
第4页 / 共33页
OPENGL简介.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《OPENGL简介.ppt》由会员分享,可在线阅读,更多相关《OPENGL简介.ppt(33页珍藏版)》请在三一文库上搜索。

1、OpenGL是一个功能强大的图形库,用户可以很方便地利用它开发出有多种特殊视觉效果(如光照、纹理、透明、阴影)的三维图形。前身是SGI公司设计的一个图形开发软件库IRIS GL(Graphics Library)。现在,OpenGL已经成为应用最为广泛的二维和三维图形编程接口。,OpenGL概述,OpenGL特点,应用广泛 跨平台性 高质量和高性能 出色的编程特性,OpenGL的工作顺序,构造几何要素,创建对象的数学描述。在三维空间上放置对象,选择有利的场景观察点。 计算对象的颜色,这些颜色可能直接定义,或由光照条件及纹理间接给出。 光栅化,把对象的数学描述和颜色信息转换到屏幕的象素。,Ope

2、nGL程序结构,1. 基本语法,常用的程序设计语言,如C、C+、Pascal、Fortran和Java等,都支持OpenGL的开发。这里只讨论C版本下OpenGL的语法。,基本库:主要功能包括物体描述、平移、旋转、缩放、光照、纹理、材质、象素、位图、文字处理等 基本库函数以gl开头,基本常量名以GL_开头 实用库:主要功能包括绘制二次曲面、NURBS曲线曲面、复杂多边形以及纹理、矩阵管理等 实用库函数以glu开头,实用常量库以GLU_开头,OpenGL库,OpenGL数据类型,2. OpenGL状态机制,OpenGL的工作方式是一种状态机制,它可以进行各种状态或模式设置,这些状态或模式在重新改

3、变它们之前一直有效。OpenGL中大量地使用了这种状态机制,许多状态变量可以通过glEnable()、glDisable()这两个函数来设置成有效或无效状态,如是否设置光照、是否进行深度检测等;,3. OpenGL程序基本结构,初始化部分 主要是设置一些OpenGL的状态开关,如颜色模式的选择,是否作光照处理,深度检验,裁剪等等。这些状态一般都用函数glEnable(?), glDisable(?)来设置,?表示特定的状态。,设置观察坐标系下的取景模式和取景框位置大小 void glViewport(left,top,right,bottom):设置在屏幕上的窗口大小,四个参数描述屏幕窗口四个

4、角上的坐标(以象素表示);void glOrtho(left,right,bottom,top,near,far):设置投影方式为正交投影(平行投影),其取景体积是一个各面均为矩形的六面体;void gluPerspective(fovy,aspect,zNear,zFar):设置投影方式为透视投影,其取景体积是一个截头锥体。,OpenGL的主要部分 使用OpenGL的库函数构造几何物体对象的数学描述,包括点线面的位置和拓扑关系、几何变换、光照处理等等。,4. OpenGL简单程序框架说明,OpenGL基本几何结构,1. 绘图准备,开始绘在制新图形前,计算机屏幕上可能已有一些图形,OpenGL

5、在显示缓冲区中存储了那些图形的绘图信息。绘制新的图形以前,应当清除当前的这些内容,以免影响绘图的效果。,可以清除的缓冲区:,清除颜色缓冲区:void glClearColor ( red , green , blue , alpha )void glClear (GL_COLOR_BUFFER_BIT ),2. 绘制OpenGL的基本几何元素(几何要素),OpenGL的几何要素有点、线、多边形。光滑的曲线、曲面都是由一系列线段或多边形近似得到的,OpenGL不直接提供绘制曲线、曲面的命令。,glBegin() void glVertex234sifdv(coords) glEnd(),例如,下

6、列程序定义如左图所示的图形。glBegin(GL_POLYGON); glVertex2f(0.0,0.0); glVertex2f(0.0,3.0); glVertex2f(3.0,3.0) glVertex2f(4.0,1.5); glVertex2f(3.0,0.0); glEnd();,3. 设置几何要素的属性,点属性 void glPointSize(Glfloat size);线属性 void glLineWidth(Glfloat width); void glLineStipple(Glint factor,Glushort pattern); glEnable(GL_LINE

7、_STIPPLE); glDisable(GL_LINE_STIPPLE),多边形属性 void glPolygonStipple(const Glubyte* mask); glEnable(GL_POLYGON_STIPPLE); glDisable(GL_POLYGON_STIPPLE);,4. 法向量,几何对象的法向量定义了它在空间中的方向。在进行光照处理时,法向量是一项重要的参数,因为法向量决定了该对象可以接收多少光照。指定法向量void glNormal3bsidf(TYPE nx,TYPE ny,TYPE nz);void glNormal3bsidfv(const TYPE*

8、v); nx,ny,nz 指定法向量的x,y和z坐标,法向量的缺省值为(0,0,1)。 v 指定当前法向量的x,y和z三元组(即矢量形式)的指针。,glBegin(GL_POLYGON); glNormal3fv(n0); glVertex3fv(v0); glNormal3fv(n1); glVertex3fv(v1); glNormal3fv(n2); glVertex3fv(v2); glNormal3fv(n3); glVertex3fv(v3);glEnd();,OpenGL坐标变换,1.常用的变换函数,void glMatrixMode(Glenum mode);该函数指定哪一种矩

9、阵为当前矩阵。mode指定当前矩阵的类型,可以有下面三种:GL_MODELVIEW 后继操作均在modelview变换范围内GL_PROJECTION 后继的操作均在投影变换范围内GL_TEXTURE 后继的操作在纹理映射范围内某一时刻只能处于其中的一种状态。缺省时,处于GL_MODELVIEW状态。,2.造型变换,造型变换有三个基本的OpenGL命令:glTranslate*(TYPE x,TYPE y,TYPE z ) 平移glRotate*(TYPE angle,TYPE x,TYPE y,TYPE z ) 旋转glScale*(TYPE x,TYPE y,TYPE z ) 缩放,3.视

10、图变换,Void gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,GLdouble centerx,GLdouble centery,GLdouble centerz, GLdouble upx,GLdouble upy,GLdouble upz);该函数定义一个视图矩阵,并与当前矩阵相乘。eyex, eyey,eyez 指定视点的位置upx,upy,upz 指定视点向上的方向centerx,centery,centerz 指定参考点的位置,4.投影变换,投影变换就是要确定一个取景体积,其作用有两个: 1). 确定物体投影到屏幕的方式,即

11、是透视投影还是正交投影。 2). 确定从图象上裁剪掉哪些物体或物体的某些部分。 投影变换包括透视投影和正交投影(平行投影)。,void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far);该函数以透视矩阵乘当前矩阵left, right 指定左右垂直裁剪面的坐标。bottom,top 指定底和顶水平裁剪面的坐标。near,far 指定近和远深度裁剪面的距离,两个距离一定是正的。,void glOrtho(Gldouble left,Gldouble rig

12、ht,Gldouble bottom,Gldouble top,Gldouble near,Gldouble far);该函数以正交投影矩阵乘当前矩阵。,5.视口变换,void glViewport(Glint x,Glint y,Glsize width,Glsize height);该函数设置视口的大小。x,y 指定视口矩形的左下角坐标(以象素为单位),缺省值为(0,0)。width,height 分别指定视口的宽和高。,OpenGL光照处理,1. OpenGL光照的定义,void glLightifv(Glenum light,Glenum pname,TYPE param); ligh

13、t 建立light指定的光源名称。用形式为GL_LIGHTi的符号常数表示 pname 设置光源特性,可定义的参数如下表。 param 设置pname特性的值,其各种缺省值和含义也在下表中列出。,下面语句是一个定义编号为GL_LIGHT0的光源的例子:Glfloat light_ambient = 0.0,0.0,0.0,1.0;Glfloat light_diffuse = 1.0,1.0,1.0,1.0;Glfloat light_specular = 1.0,1.0,1.0,1.0;Glfloat light_position = 1.0,1.0,1.0,1.0;glLightfv(GL

14、_LIGHT0,GL_AMBIENT,light_ambient);glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular);glLightfv(GL_LIGHT0,GL_POSITION,light_position);glEnable(GL_LIGHT0),2. 光照模式,Glfloat lmodel_ambient = 0.2,0.2,0.2,1.0;glLightModelv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient);,3. 材质属性,void glMaterialif(Glenum face ,Glenum pname ,TYPE param);Void glMaterialifv(Glenum face,Glenum pname,TYPE* param);,本 次 授 课 结 束 谢 谢 !,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1