正在加载图片...
Windows应用程序 UNX应用程序 GLU lllilllr GLU GDUd WGL)(OpenGL Ⅺ[Lx(opmL (a) Win32 OpenGL API D)UNIX OpenGL API+ 图5-1-10 penGL API结构图 3. OpenGL的工作顺序 OpenGL的工作顺序就是一个从定义几何要素到把象素段写入帧缓冲区的过程。在屏幕上显示图象的主要步 骤是以下3步 1).构造几何要素(点,线,多边形,图象,位图),创建对象的数学描述。在三维空间上 放置对象,选择有利的场景观察点。 2).计算对象的颜色,这些颜色可能直接定义,或由光照条件及纹理间接给出 光栅化,把对象的数学描述和颜色信息转换到屏幕的象素 5.1.2 OpenGL程序结构 1.基本语法 常用的程序设计语言,如C、C++、 Pascal、 Fortran和Java等,都支持 OpenGL的开发。这里只讨论 C版本下 OpenGL的语法 OpenGL基本函数均使用g作为函数名的前缀,如 glClearColoro:实用函数则使用gu作为函数名的 前缀,如 gluSphere0。 OpenGL基本常量的名字以GL_开头,如GL_ LINE LOOP;实用常量的名字以 GLU开头,如 GLU FILL。一些函数如 glColor*0(定义颜色值),函数名后可以接不同的后缀以支持不同 的数据类型和格式。如 glColor3b(…)、 glColor3d(.)、 glColor3f(-)和 glColor3bv(…)等,这几个函数在功 能上是相似的,只是适用于不同的数据类型和格式,其中3表示该函数带有三个参数,b、d、f分别表示参 OpenGL还定义了一些特殊常量,如 GLfloat, GLvoid。它们其实就是C中的foat和void。在glh文件 中可以看到以下定义 typedef foat GLfloat typedef void GLvoid 一些基本的数据类型都有类似的定义项。 2.状态机制 OpenGL的工作方式是一种状态机,它可以进行各种状态或模式设置,这些状态或模式在重新改变它们 之前一直有效。例如,当前颜色就是一个状态变量,在这个状态改变之前,绘制的每个象素都将使用该颜色 直到当前颜色被设置为其它颜色为止。 OpenGL中大量地使用了这种状态机制,如颜色模式、投影模式、单 双显示缓存区的设置、背景色的设置、光源的位置和特性等等。许多状态变量可以通过 glEnable0, glDisable( 这两个函数来设置成有效或无效状态,如是否设置光照、是否进行深度检测等:在被设置成有效状态之后, 绝大部分状态变量都有一个缺省值。通常情况下,可以用下列四个函数来获取某个状态变量的值 glGetBooleanvo、 glGetDoubleo、 glGetFloatvo和 glGetIntegervo。究竟选择哪个函数应该根据所要获得 的返回值的数据类型来决定。还有些状态变量有特殊的查询函数,如 glGetLigh0、 glGetError(和 glPolygon Stipple0等。另外,使用 glPushAttrib和 glPopAttribo函数,可以存储和恢复最近的状态变量的 值。只要有可能,都应该使用这些函数,因为它们比其它查询函数的效率更高。 计算机图形学第五章第138页共36页计算机图形学 第五章 第 138 页 共 36 页 图 5-1-1 OpenGL API 结构图 3. OpenGL 的工作顺序 OpenGL 的工作顺序就是一个从定义几何要素到把象素段写入帧缓冲区的过程。在屏幕上显示图象的主要步 骤是以下 3 步: 1). 构造几何要素(点,线,多边形,图象,位图),创建对象的数学描述。在三维空间上 放置对象,选择有利的场景观察点。 2). 计算对象的颜色,这些颜色可能直接定义,或由光照条件及纹理间接给出。 3). 光栅化,把对象的数学描述和颜色信息转换到屏幕的象素。 5.1.2 OpenGL 程序结构 1. 基本语法 常用的程序设计语言,如 C、C++、Pascal、Fortran 和 Java 等,都支持 OpenGL 的开发。这里只讨论 C 版本下 OpenGL 的语法。 OpenGL 基本函数均使用 gl 作为函数名的前缀,如 glClearColor();实用函数则使用 glu 作为函数名的 前缀,如 gluSphere()。OpenGL 基本常量的名字以 GL_开头,如 GL_LINE_LOOP;实用常量的名字以 GLU_开头,如 GLU_FILL。一些函数如 glColor*()(定义颜色值),函数名后可以接不同的后缀以支持不同 的数据类型和格式。如 glColor3b(...)、glColor3d(...)、glColor3f(...)和 glColor3bv(...)等,这几个函数在功 能上是相似的,只是适用于不同的数据类型和格式,其中 3 表示该函数带有三个参数,b、d、f 分别表示参 数的类型是字节型、双精度浮点型和单精度浮点型,v 则表示这些参数是以向量形式出现的。 OpenGL 还定义了一些特殊常量,如 GLfloat,GLvoid。它们其实就是 C 中的 float 和 void。在 gl.h 文件 中可以看到以下定义: …… typedef float GLfloat; typedef void GLvoid; …… 一些基本的数据类型都有类似的定义项。 2. 状态机制 OpenGL 的工作方式是一种状态机,它可以进行各种状态或模式设置,这些状态或模式在重新改变它们 之前一直有效。例如,当前颜色就是一个状态变量,在这个状态改变之前,绘制的每个象素都将使用该颜色, 直到当前颜色被设置为其它颜色为止。OpenGL 中大量地使用了这种状态机制,如颜色模式、投影模式、单 双显示缓存区的设置、背景色的设置、光源的位置和特性等等。许多状态变量可以通过 glEnable(),glDisable() 这两个函数来设置成有效或无效状态,如是否设置光照、是否进行深度检测等;在被设置成有效状态之后, 绝大部分状态变量都有一个缺省值。通常情况下,可以用下列四个函数来获取某个状态变量的值: glGetBooleanv()、glGetDouble()、glGetFloatv()和 glGetIntegerv()。究竟选择哪个函数应该根据所要获得 的返回值的数据类型来决定。还有些状态变量有特殊的查询函数,如 glGetLight*()、glGetError()和 glPolygonStipple()等。另外,使用 glPushAttrib()和 glPopAttrib()函数,可以存储和恢复最近的状态变量的 值。只要有可能,都应该使用这些函数,因为它们比其它查询函数的效率更高
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有