当前位置:文档之家› OpenGL函数简介

OpenGL函数简介

OpenGL函数简介
OpenGL函数简介

附录A OpenGL函数简介

OpenGL是国际公认的在计算机中使用广泛、易学易用的三维图形标准,附录A给出了本教材所用OpenGL函数的简单说明(https://www.doczj.com/doc/7c7971155.html,/documentation/manual/),供读者查询使用。

1.glAccum

void glAccum ( GLenum op , GLfloat value );

参数说明:

op 取符号:GL_ACCUM,GL_LOAD,GL_ADD,GL_MULT,GL_RETURN。

value 取一个浮点数,op决定怎样使用value。

功能描述:

按参数op指定的方式,在累积缓冲区中进行如下操作

GL_ACCUM 从当前选定的缓冲区(缺省值为当前的颜色缓冲区)中逐点读取其R、G、

B、A值,该RGBA乘以value加上累积缓冲区中的当前值后,再存入累

积缓冲区中保存。

GL_LOAD 从当前选定的缓冲区中逐点读取其R、G、B、A值,该RGBA乘以value 后,再存入累积缓冲区中保存。

GL_ADD 将value直接加到累积缓冲区中每点的RGBA上。

GL_MULT 略。

GL_RETURN 将累积缓冲区中的RGBA乘以value后,送当前颜色缓冲区中显示。

2.glBegin, glEnd

void glBegin ( GLenum mode );

参数说明:

mode 取符号:GL_POINTS, GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP, GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_QUADS,

GL_QUAD_STRIP和 GL_POLYGON。

void glEnd (void );

功能描述:

函数glBegin, glEnd成对出现,用来界定一个或一组类似图形元素顶点数据的开始与结束,图形元素的类型由mode确定。

GL_POINTS 每个顶点函数glVertex()描述了一个个孤立的顶点数据。

GL_LINES 每对顶点函数glVertex()描述了一直线段的两个顶点数据。

GL_LINE_STRIP 把n个glVertex()描述的顶点连接成一条连续的多笔折线。

GL_LINE_LOOP 把n个glVertex()描述的顶点连接成一封闭的多笔折线。

GL_TRIANGLES 相邻的三个顶点构成一个三角形,多个三角形则两两独立。

GL_TRIANGLE_STRIP 多个顶点定义一三角形带,见图9-8。

GL_TRIANGLE_FAN 多个顶点定义一三角扇形,见图9-8。

GL_QUADS 相邻的四个顶点构成一个四边形,多个四边形则两两独立。

GL_QUAD_STRIP 一组顶点定义一个四边形网格,见图9-9。

GL_POLYGON 一组顶点定义一个凸多边形。

3.glBindTexture

void glBindTexture ( GLenum target , GLuint texture );

参数说明:

target 指定纹理绑定的目标,它只能是GL_TEXTURE_1D, GL_TEXTURE_2D 或GL_TEXTURE_3D。

texture 一个指定的纹理名称。

功能描述:

该函数把名为texture的新纹理绑定到纹理目标上,该目标以前绑定的纹理自动断开。

4.glBlendFunc

void glBlendFunc ( GLenum sfactor , GLenum dfactor );

参数说明:

sfactor 指定如何计算RGBA的源融合因子,它的9个可取符号为GL_ZERO, GL_ONE, GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR, GL_SRC_ALPHA,

GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA 和

GL_SRC_ALPHA_SATURATE,其缺省值为GL_ONE。其余略。

dfactor 指定如何计算RGBA的目标融合因子,它的8个可取符号为 GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_SRC_ALPHA,

GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA和 GL_ONE_MINUS_DST_ALPHA,

其缺省值为GL_ZERO。其余略。

功能描述:

在RGBA模式下,该函数把源RGBA(新输入的像素值)与目标RGBA(原已存在于颜色缓冲区中的像素值)融合在一起,并填充在颜色缓冲区中。初始条件下,该融合操作关闭,用glEnable(GL_BLEND) 和 glDisable(GL_BLEND)分别启动和关闭融合操作。

具体的融合方式约定如下

源颜色与目标颜色、最后的融合颜色分别用(R s,G s,B s,A s) 、(R d,G d,B d,A d) 、(R c,G c,B c,A c) 表示,这些数据都在0 与 (k R,k G,k B,k A) 之间。k R,k G,k B,k A的最大值是由显示卡存储器结构决定的一个数据。

此时的融合操作是源颜色与目标颜色都先进行一个指定的缩放运算(源缩放因子和目标缩放因子分别用(s R,s G,s B,s A) 和 (d R,d G,d B,d A)表示,但它们在表A-1中用(f R,f G,f B,f A)统一表示),具体的缩放操作见表A-1;之后两者按照(A-1)式进行融合。

表A-1 源颜色与目标颜色选定的缩放运算

Parameter (f R,f G,f B,f A)

GL_ZERO (0,0,0,0)

GL_ONE (1,1,1,1)

GL_SRC_COLOR (R s/k R,G s/k G,B s/k B,A s/k A)

GL_ONE_MINUS_SRC_COLOR (1,1,1,1) ?(R s/k R,G s/k G,B s/k B,A s/k A)

GL_DST_COLOR (R d/k R,G d/k G,B d/k B,A d/k A)

GL_ONE_MINUS_DST_COLOR (1,1,1,1) ?(R d/k R,G d/k G,B d/k B,A d/k A)

GL_SRC_ALPHA (A s/k A,A s/k A,A s/k A,A s/k A)

GL_ONE_MINUS_SRC_ALPHA (1,1,1,1) ?(A s/k A,A s/k A,A s/k A,A s/k A)

Parameter (f R,f G,f B,f A)

GL_DST_ALPHA (A d/k A,A d/k A,A d/k A,A d/k A)

GL_ONE_MINUS_DST_ALPHA (1,1,1,1) ?(A d/k A,A d/k A,A d/k A,A d/k A)

GL_SRC_ALPHA_SATURATE (i,i,i,1)

GL_CONSTANT_COLOR (R c,G c,B c,A c)

GL_ONE_MINUS_CONSTANT_COLOR (1,1,1,1) ?(R c,G c,B c,A c)

GL_CONSTANT_ALPHA (A c,A c,A c,A c)

GL_ONE_MINUS_CONSTANT_ALPHA (1,1,1,1) ?(A c,A c,A c,A c)

表A-1中的i为

i=min(A s,k A?A d) /k A

在RGBA模式下,系统通过表达式(A-1)来确定所要绘制像素的RGBA值

R d=min(k R,R s s R+R d d R)

G d=min(k G,G s s G+G d d G)

(A-1)

B d=min(k B,B s s B+B d d B)

A d=min(k A,A s s A+A d d A)

例如,透明度最好的表示是用融合函数glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA),其中要绘制的各图形从远到近排序并填充。请注意,此时透明度的计算没有用到存储于颜色缓冲区中的α值。

5.glCallList

void glCallList ( GLuint list );

参数说明:

list 指定的显示列表名称,其名称为整数。

功能描述:

该函数的作用是执行一个list指定的显示列表。

6.glClear

void glClear ( GLbitfield mask );

参数说明:

mask 设定为GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT,

GL_ACCUM_BUFFER_BIT 和 GL_STENCIL_BUFFER_BIT。

功能描述:

用预先设定的值(如glClearColor,glClearAccum等设置)清除mask选定的缓冲区。

7.glClearAccum

void glClearAccum ( GLfloat red , GLfloat green , GLfloat blue , GLfloat alpha );

参数说明:

功能说明:

为累积缓冲区指定清除值(初始值)RGBA。

8.glClearColor

void glClearColor ( GLclampf red , GLclampf green , GLclampf blue , GLclampf alpha );

参数说明:

RGBA的数值在0~1之间,其余略。

功能说明:

为颜色缓冲区指定清除值。

9.glClearDepth

void glClearDepth ( GLclampd depth );

参数说明:

depth 为清除深度缓冲区指定的深度值,初始值为1。

功能说明:

为深度缓冲区指定清除值。

10.glClearStencil

void glClearStencil ( GLint s );

参数说明:

s 为清除模板缓冲区指定的清除值,初始值为0。

功能说明:

为模板缓冲区指定清除值。

11.glColor

void glColor3b ( GLbyte red , GLbyte green , GLbyte blue );

void glColor3d ( GLdouble red , GLdouble green , GLdouble blue );

void glColor3f ( GLfloat red , GLfloat green , GLfloat blue );

void glColor3i ( GLint red , GLint green , GLint blue );

void glColor3s ( GLshort red , GLshort green , GLshort blue );

void glColor3ub ( GLubyte red , GLubyte green , GLubyte blue );

void glColor3ui ( GLuint red , GLuint green , GLuint blue );

void glColor3us ( GLushort red , GLushort green , GLushort blue );

void glColor4b ( GLbyte red , GLbyte green , GLbyte blue , GLbyte alpha );

void glColor4d ( GLdouble red , GLdouble green , GLdouble blue , GLdouble alpha );

void glColor4f ( GLfloat red , GLfloat green , GLfloat blue , GLfloat alpha );

void glColor4i ( GLint red , GLint green , GLint blue , GLint alpha );

void glColor4s ( GLshort red , GLshort green , GLshort blue , GLshort alpha );

void glColor4ub ( GLubyte red , GLubyte green , GLubyte blue , GLubyte alpha );

void glColor4ui ( GLuint red , GLuint green , GLuint blue , GLuint alpha );

void glColor4us ( GLushort red , GLushort green , GLushort blue , GLushort alpha );

参数说明:

略。

void glColor3bv ( const GLbyte *v );

void glColor3dv ( const GLdouble *v );

void glColor3fv ( const GLfloat *v );

void glColor3iv ( const GLint *v );

void glColor3sv ( const GLshort *v );

void glColor3ubv ( const GLubyte *v );

void glColor3uiv ( const GLuint *v );

void glColor3usv ( const GLushort *v );

void glColor4bv ( const GLbyte *v );

void glColor4dv ( const GLdouble *v );

void glColor4fv ( const GLfloat *v );

void glColor4iv ( const GLint *v );

void glColor4sv ( const GLshort *v );

void glColor4ubv ( const GLubyte *v );

void glColor4uiv ( const GLuint *v );

void glColor4usv ( const GLushort *v );

参数说明:

v 一个指向包含R、B、G、A(有时有)数组的指针。

功能说明:

该函数设置一组新的RGB或RGBA为OpenGL的当前颜色值,供绘图使用。

12.glColorMask

void glColorMask ( GLboolean red , GLboolean green , GLboolean blue , GLboolean alpha );

参数说明:

red , green , blue , alpha

它们的值分别为GL_TRUE,GL_FALSE,表示该颜色组分是否能被写入颜色缓

冲区。

功能说明:

开启或关闭对颜色缓冲区中颜色组分的写操作。

13.glColorMaterial

void glColorMaterial ( GLenum face , GLenum mode );

参数说明:

face 它分别取GL_FRONT, GL_BACK, GL_FRONT_AND_BACK,表示物体表面的外表面、内表面或双面的材质参数将跟踪当前的颜色,初始值为GL_FRONT_AND_BACK。

mode 它分别取GL_EMISSION, GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_AMBIENT_AND_DIFFUSE,即指定跟踪当前颜色的材质参数,初始值为

GL_AMBIENT_AND_DIFFUSE。

功能说明:

该函数用于指定表面的哪个材质参数将跟踪当前的颜色。

14.glCullFace

void glCullFace ( GLenum mode );

参数说明:

mode 它分别取符号:GL_FRONT, GL_BACK, GL_FRONT_AND_BACK,缺省值为GL_BACK。

功能说明:

指定正面或反面将被剔除显示。

15.glDepthFunc

void glDepthFunc ( GLenum func );

参数说明:

func 指定深度比较函数,它分别取GL_NEVER, GL_LESS, GL_EQUAL, GL_LEQUAL, GL_GREATER, GL_NOTEQUAL, GL_GEQUAL, GL_ALWAYS,初始值为GL_LESS。

功能说明:

该函数指定一个比较函数,比较将要写入颜色缓冲区像素的深度,当该像素的深度与深度缓冲区中存储的深度比较并通过之后,该像素的像素值才能写入颜色缓冲区中并显示。func指定的比较函数分别为

GL_NEVER 不通过。

GL_LESS 如果输入的深度小于已存储的深度,则通过。

GL_EQUAL 如果输入的深度等于已存储的深度,则通过。

GL_LEQUAL 如果输入的深度小于或等于已存储的深度,则通过。

GL_GREATER 如果输入的深度大于已存储的深度,则通过。

GL_NOTEQUAL 如果输入的深度不等于已存储的深度,则通过。

GL_GEQUAL 如果输入的深度大于或等于已存储的深度,则通过。

GL_ALWAYS 总是通过。

16.glDepthMask

void glDepthMask ( GLboolean flag );

参数说明:

flag 当它取GL_FALSE,关闭对深度缓冲区的写操作;当它取GL_TRUE,启动对深度缓冲区的写操作。

功能说明:

启动和关闭对深度缓冲区的写操作。

17.glDrawPixels

void glDrawPixels ( GLsizei width , GLsizei height , GLenum format , GLenum type , const GLvoid *pixels );

参数说明:

width , height 指定写入颜色缓冲区像素矩形块的大小。

format 指定写入像素数据的格式,它能取符号GL_COLOR_INDEX,

GL_STENCIL_INDEX, GL_DEPTH_COMPONENT, GL_RGB, GL_BGR,

GL_RGBA, GL_BGRA, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA,

GL_LUMINANCE, GL_LUMINANCE_ALPHA。

type 为pixels指定数据类型,它能取符号之一:GL_UNSIGNED_BYTE,

GL_BYTE, GL_BITMAP, GL_UNSIGNED_SHORT, GL_SHORT,

GL_UNSIGNED_INT, GL_INT, GL_FLOAT, GL_UNSIGNED_BYTE_3_3_2,

GL_UNSIGNED_BYTE_2_3_3_REV, GL_UNSIGNED_SHORT_5_6_5,

GL_UNSIGNED_SHORT_5_6_5_REV, GL_UNSIGNED_SHORT_4_4_4_4,

GL_UNSIGNED_SHORT_4_4_4_4_REV, GL_UNSIGNED_SHORT_5_5_5_1,

GL_UNSIGNED_SHORT_1_5_5_5_REV, GL_UNSIGNED_INT_8_8_8_8,

GL_UNSIGNED_INT_8_8_8_8_REV, GL_UNSIGNED_INT_10_10_10_2,

GL_UNSIGNED_INT_2_10_10_10_REV。

pixels 一个指向像素数组的指针。

功能说明:

向颜色缓冲区写入一个像素矩形块,其余略。

18.glEnable,glDisable

void glEnable ( GLenum cap );

void glDisable ( GLenum cap );

参数说明:

cap 该枚举变量的取值非常多,举几个常用的例子,如GL_BLEND,

GL_COLOR_MATERIAL,GL_DEPTH_TEST,GL_LIGHT i,GL_LIGHTING,

其余略。

功能说明:

这两个函数分别启动或关闭cap指定的服务器端的GL功能。

19.glEvalCoord

void glEvalCoord1d ( GLdouble u );

void glEvalCoord1f ( GLfloat u );

void glEvalCoord2d ( GLdouble u , GLdouble v );

void glEvalCoord2f ( GLfloat u , GLfloat v );

参数说明:

u 指定一个由glMap1 或 glMap2定义基函数所确定的域坐标u值。

v指定一个由glMap1 或 glMap2定义基函数所确定的域坐标v值。

void glEvalCoord1dv ( const GLdouble *u );

void glEvalCoord1fv ( const GLfloat *u );

void glEvalCoord2dv ( const GLdouble *u );

void glEvalCoord2fv ( const GLfloat *u );

参数说明:

u 一个包含一维或二维域坐标的数组指针。

功能说明:

函数glEvalCoord1用自变量u求取一维映射值,函数glEvalCoord2用两个域值u和v 求取有效的二维映射值,供绘图使用。

20.glEvalMesh

void glEvalMesh1 ( GLenum mode , GLint i1 , GLint i2 );

参数说明:

mode 它取符号GL_POINT 和 GL_LINE,表示是计算点或线的一维网格。

i1,i2 指定网格区域变量i的开始值与结束值。

void glEvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 )

参数说明:

mode 它的取值符号GL_POINT, GL_LINE, GL_FILL,表示是计算点、线、多边形的二维网格。

i1,i2 指定网格区域变量i的开始值与结束值。

j1,j2 指定网格区域变量j的开始值与结束值。

功能说明:

计算点、线或多边形的一维或二维网格。

21.glFlush

void glFlush ( void);

功能说明:

在有限时间内强制执行GL命令。

22.glGenLists

GLuint glGenLists ( GLsizei range );

参数说明:

range 指定要连续产生的空显示列表的个数。

功能说明:

创建一组空显示列表,显示列表的个数由range指定。

23.glGenTextures

void glGenTextures ( GLsizei n , Gluint *textures );

参数说明:

n 指定产生纹理名称的个数。

textures 指定存储产生纹理名称的数组指针。

功能说明:

该函数将n个纹理名称存放到textures指示的数组中。

24.glGet

void glGetBooleanv ( GLenum pname , GLboolean *params );

void glGetDoublev ( GLenum pname , GLdouble *params );

void glGetFloatv ( GLenum pname , GLfloat *params );

void glGetIntegerv ( GLenum pname , GLint *params );

参数说明:

pname 指定要查询的参数类型,它的取值非常多,举几个常用的例子,如GL_BLEND,GL_COLOR_MATERIAL,GL_CULL_FACE,GL_CURRENT_NORMAL,

GL_LIGHT i ,GL_LIGHTING,GL_LINE_WIDTH,GL_POINT_SIZE,其余略。params 是一个指针,指向一个给定类型的数组,用来存放返回的数据。

功能说明:

这4个函数返回GL的简单状态变量——即OpenGL的状态查询。

25.glHint

void glHint ( GLenum target , GLenum mode );

参数说明:

target 它取符号GL_FOG_HINT, GL_LINE_SMOOTH_HINT,

GL_PERSPECTIVE_CORRECTION_HINT, GL_POINT_SMOOTH_HINT,

GL_POLYGON_SMOOTH_HINT,表明这些行为将受到控制。

mode 它取符号GL_FASTEST(最快), GL_NICEST(最好), GL_DONT_CARE(不理),说明要采取的控制方式。

功能说明:

如果有空间,GL的某些操作(由target指定),将受mode方式控制,它让OpenGL实现绘图或图像的质量达到保真的效果。

26.glInitNames

void glInitNames (void );

功能说明:

该函数初始化名称堆栈,即为空堆栈。

27.glLight

void glLightf ( GLenum light , GLenum pname , GLfloat param );

void glLighti ( GLenum light , GLenum pname , GLint param );

参数说明:

light 指定一个光源,OpenGL至少支持8个光源,用符号GL_LIGHT i区别,i 为0~7。

pname 为光源light指定一个具体的光源参数类型,它取符号GL_SPOT_EXPONENT, GL_SPOT_CUTOFF, GL_CONSTANT_ATTENUATION, GL_LINEAR_ATTENUATION,

GL_QUADRATIC_ATTENUATION。

param 光源light的具体光源参数。

void glLightfv ( GLenum light , GLenum pname , const GLfloat *params );

void glLightiv ( GLenum light , GLenum pname , const GLint *params );

参数说明:

light 与上相同,略。

pname 为光源light指定一个具体的光源参数类型,它取符号GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_POSITION, GL_SPOT_CUTOFF,

GL_SPOT_DIRECTION, GL_SPOT_EXPONENT, GL_CONSTANT_ATTENUATION,

GL_LINEAR_ATTENUATION, GL_QUADRATIC_ATTENUATION。

params 一个指向light参数数组的指针。

功能说明:

该函数设置一个光源的参数值。

28.glLightModel

void glLightModelf ( GLenum pname , GLfloat param );

void glLightModeli ( GLenum pname , GLint param );

参数说明:

pname 指定一个单值光照模式参数,它取符号 GL_LIGHT_MODEL_LOCAL_VIEWER, GL_LIGHT_MODEL_COLOR_CONTROL, GL_LIGHT_MODEL_TWO_SIDE。

param 指定pname的具体设定值。

void glLightModelfv ( GLenum pname , const GLfloat *params );

void glLightModeliv ( GLenum pname , const GLint *params );

参数说明:

pname 指定一个单值光照模式参数,它取符号GL_LIGHT_MODEL_AMBIENT, GL_LIGHT_MODEL_COLOR_CONTROL, GL_LIGHT_MODEL_LOCAL_VIEWER,

GL_LIGHT_MODEL_TWO_SIDE。

param 一个指针,指向pname的具体设定值。

功能说明:

该函数设定光照模式参数。

29.glLineWidth

void glLineWidth ( GLfloat width );

参数说明:

width 画线的宽度。

功能说明:

指定画直线的宽度,缺省值为1。

30.glLoadIdentity

void glLoadIdentity (void );

功能说明:

用单位矩阵替代当前的矩阵。

31.glLoadName

void glLoadName ( GLuint name );

参数说明:

name 指定的名称。

功能说明:

把name中的名称置入名称堆栈的栈顶。

32.glMap1

void glMap1d ( GLenum target , GLdouble u1 , GLdouble u2 , GLint stride , GLint order , const GLdouble *points );

void glMap1f ( GLenum target , GLfloat u1 , GLfloat u2 , GLint stride , GLint order , const GLfloat *points );

参数说明:

target 指定求值器生成数据的类型,它取符号GL_MAP1_VERTEX_3,

GL_MAP1_VERTEX_4, GL_MAP1_INDEX, GL_MAP1_COLOR_4,

GL_MAP1_NORMAL, GL_MAP1_TEXTURE_COORD_1,

GL_MAP1_TEXTURE_COORD_2, GL_MAP1_TEXTURE_COORD_3,

GL_MAP1_TEXTURE_COORD_4 。

u1,u2 指定参数u的取值范围,把u的取值传递给glEvalCoord1函数。

stride 指定在由points提供的数据结构中,从一个控制点的开始位置到

下一个控制点的开始位置之间跨越的浮点或双精度值的存储单元数

目,这里允许将控制点插入任意的数据结构中。它唯一的约束条件

是一个特定的控制点必须占据连续的内存存储单元。

order 控制点的个数。

points 控制点数组的指针。

功能说明:

给OpenGL的1D求值器赋值。

33.glMap2

void glMap2d ( GLenum target , GLdouble u1 , GLdouble u2 , GLint ustride , GLint uorder , GLdouble v1 , GLdouble v2 , GLint vstride , GLint vorder , const GLdouble *points );

void glMap2f ( GLenum target , GLfloat u1 , GLfloat u2 , GLint ustride , GLint uorder , GLfloat v1 , GLfloat v2 , GLint vstride , GLint vorder , const GLfloat *points );

参数说明:

target 指定求值器生成数据的类型,它取符号GL_MAP2_VERTEX_3, GL_MAP2_VERTEX_4, GL_MAP2_INDEX, GL_MAP2_COLOR_4,

GL_MAP2_NORMAL, GL_MAP2_TEXTURE_COORD_1,

GL_MAP2_TEXTURE_COORD_2, GL_MAP2_TEXTURE_COORD_3,

GL_MAP2_TEXTURE_COORD_4。

u1, u2 指定参数u的取值范围,把u的取值传递给glEvalCoord2函数。

ustride 指定控制点R ij 开始位置和控制点 R(i+1)j,开始位置之间跨越的浮点或双精度值的存储单元数目。这里i和j分别是u和v的控制点的索引。这

里允许将控制点插入任意的数据结构中。它唯一的约束条件是一个特定

的控制点必须占据连续的内存存储单元。它的初始值为0。

uorder 指定u轴方向控制点数组的维数,其初始值维1。

v1, v2 指定参数v的取值范围,把v的取值传递给glEvalCoord2函数。

vstride 其参数的含义与ustride相同。

vorder 指定v轴方向控制点数组的维数,其初始值维1。

points 一个指向控制点数组的指针。

功能说明:

给OpenGL的2D求值器赋值。

34.glMapGrid

void glMapGrid1d ( GLint un , GLdouble u1 , GLdouble u2 );

void glMapGrid1f ( GLint un , GLfloat u1 , GLfloat u2 );

void glMapGrid2d ( GLint un , GLdouble u1 , GLdouble u2 , GLint vn , GLdouble v1 , GLdouble v2 );

void glMapGrid2f ( GLint un , GLfloat u1 , GLfloat u2 , GLint vn , GLfloat v1 , GLfloat v2 );

参数说明:

un 指定网格范围[u1,u2]之间的等分数。

u1, u2 指定整型网格域值i=0和i=un的映射值。

vn 指定网格范围[v1,v2]之间的等分数。

v1,v2 指定整型网格域值j=0和j=vn的映射值。

功能说明:

定义一个一维或二维的网格。

35.glMaterial

void glMaterialf ( GLenum face , GLenum pname , GLfloat param );

void glMateriali ( GLenum face , GLenum pname , GLint param );

参数说明:

face 指定哪个面或哪些面的材质将被更新,它只能是GL_FRONT, GL_BACK, GL_FRONT_AND_BACK之一。

pname 为将要被更新的面指定一个材质参数,它必须为GL_SHININESS。

param 指定参数GL_SHININESS的具体设定值。

void glMaterialfv ( GLenum face , GLenum pname , const GLfloat *params );

void glMaterialiv ( GLenum face , GLenum pname , const GLint *params );

参数说明:

face 与上相同,略。

pname 为将要更新的表面指定材质参数,它必须是GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_EMISSION, GL_SHININESS, GL_AMBIENT_AND_DIFFUSE,

GL_COLOR_INDEXES之一。

param 一个pname参数要求的数组指针。

功能说明:

为光照模型指定表面的材质参数。

36.glMatrixMode

void glMatrixMode ( GLenum mode );

参数说明:

mode 指定后续矩阵操作是哪个矩阵类型,一般它取GL_MODELVIEW, GL_PROJECTION, GL_TEXTURE之一。

功能说明:

指定当前的运算矩阵类型。

GL_MODELVIEW 表示图形在右手坐标系中进行几何变换的矩阵与运算。

GL_PROJECTION 表示照相机在左手坐标系中进行几何变换的矩阵与运算。

其余略。

37.glNewList,glEndList

void glNewList ( GLuint list , GLenum mode );

参数说明:

list 显示列表的名称。

mode 指定显示列表编译的模式,它取符号GL_COMPILE , GL_COMPILE_AND_EXECUTE。

void glEndList (void );

功能说明:

建立或替换一个显示列表;glNewList表示显示列表定义开始,glEndList表示该显示列表定义结束。

38.glNormal

void glNormal3b ( GLbyte nx , GLbyte ny , GLbyte nz );

void glNormal3d ( GLdouble nx , GLdouble ny , GLdouble nz );

void glNormal3f ( GLfloat nx , GLfloat ny , GLfloat nz );

void glNormal3i ( GLint nx , GLint ny , GLint nz );

void glNormal3s ( GLshort nx , GLshort ny , GLshort nz );

参数说明:

nx,ny,nz 定义当前法向量的x,y,z坐标分量。

void glNormal3bv ( const GLbyte *v );

void glNormal3dv ( const GLdouble *v );

void glNormal3fv ( const GLfloat *v );

void glNormal3iv ( const GLint *v );

void glNormal3sv ( const GLshort *v );

参数说明:

v 用指针方式表示法向量的数组,该数组只有x,y,z三个分量。

功能说明:

设置当前顶点的法向量。

39.glOrtho

void glOrtho ( GLdouble left , GLdouble right , GLdouble bottom , GLdouble top , GLdouble zNear , GLdouble zFar );

参数说明:

left,right 指定左、右裁剪平面的坐标值。

bottom,top 指定下、上裁剪平面的坐标值。

zNear,zFar 指定最近、最远裁剪平面的距离值。

功能说明:

该函数用一个正交矩阵乘以当前矩阵,它提供了一种产生平行投影的方法,只有位于它规定范围内的图形才能在屏幕视区中显示。

40.glPixelStore

void glPixelStoref ( GLenum pname , GLfloat param );

void glPixelStorei ( GLenum pname , GLint param );

参数说明:

pname 设定存储、读取数据的类型,当它取符号GL_PACK_SWAP_BYTES, GL_PACK_LSB_FIRST, GL_PACK_ROW_LENGTH, GL_PACK_IMAGE_HEIGHT,

GL_PACK_SKIP_PIXELS, GL_PACK_SKIP_ROWS, GL_PACK_SKIP_IMAGES,

GL_PACK_ALIGNMENT,则影响存储的数据类型;当它取符号

GL_UNPACK_SWAP_BYTES, GL_UNPACK_LSB_FIRST, GL_UNPACK_ROW_LENGTH,

GL_UNPACK_IMAGE_HEIGHT, GL_UNPACK_SKIP_PIXELS, GL_UNPACK_SKIP_ROWS,

GL_UNPACK_SKIP_IMAGES, GL_UNPACK_ALIGNMENT,则影响读取的数据类型。

param 指定参数pname的具体设定值。

功能说明:

该函数设置像素的格式,它影响glDrawPixels与 glReadPixels对显示器屏幕像素的读取、写入操作的数据格式,其余略。

41.glPointSize

void glPointSize ( GLfloat size );

参数说明:

size 指定画点的直径,缺省值为1。

功能说明:

指定画点的直径。

42.glPushMatrix, glPopMatrix

void glPushMatrix ( void);

void glPopMatrix (void );

功能说明:

压入或弹出当前矩阵堆栈。

43.glPushName,glPopName

void glPushName ( GLuint name );

void glPopName (void );

参数说明:

name 指定一个将被压入名称堆栈顶部的名称。

功能说明:

一个指定的名称压入或弹出名称堆栈。

44.glRasterPos

void glRasterPos2i ( GLint x , GLint y );

void glRasterPos3f ( GLfloat x , GLfloat y , GLfloat z );

void glRasterPos3i ( GLint x , GLint y , GLint z );

void glRasterPos4f ( GLfloat x , GLfloat y , GLfloat z , GLfloat w );

void glRasterPos4i ( GLint x , GLint y , GLint z , GLint w );

void glRasterPos4s ( GLshort x , GLshort y , GLshort z , GLshort w );

其余略。

参数说明:

x,y,z,w 表示一个点的齐次坐标。

void glRasterPos4fv ( const GLfloat *v );

其余略。

参数说明:

v 指定一个指向一元、二元、三元或四元数组的指针,分别指定相应的x、y、z、w的坐标。

功能说明:

指定像素操作的光栅单位,即在右手坐标系中确定绘点的位置。

45.glReadPixels

void glReadPixels ( GLint x , GLint y , GLsizei width , GLsizei height , GLenum format , GLenum type , GLvoid *pixels );

参数说明:

x,y 像素矩形块的左下角。

width,height 像素矩形块的大小。

format 指定像素数据的格式,它取符号GL_COLOR_INDEX, GL_STENCIL_INDEX, GL_DEPTH_COMPONENT, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA,

GL_RGB, GL_BGR, GL_RGBA, GL_BGRA, GL_LUMINANCE,

GL_LUMINANCE_ALPHA。

type 指定像素数据的类型,它取符号GL_UNSIGNED_BYTE, GL_BYTE, GL_BITMAP, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT,

GL_INT, GL_FLOAT, GL_UNSIGNED_BYTE_3_3_2,

GL_UNSIGNED_BYTE_2_3_3_REV, GL_UNSIGNED_SHORT_5_6_5,

GL_UNSIGNED_SHORT_5_6_5_REV, GL_UNSIGNED_SHORT_4_4_4_4,

GL_UNSIGNED_SHORT_4_4_4_4_REV, GL_UNSIGNED_SHORT_5_5_5_1,

GL_UNSIGNED_SHORT_1_5_5_5_REV, GL_UNSIGNED_INT_8_8_8_8,

GL_UNSIGNED_INT_8_8_8_8_REV, GL_UNSIGNED_INT_10_10_10_2 或

GL_UNSIGNED_INT_2_10_10_10_REV之一。

pixels 返回的像素数据数组指针。

功能说明:

从颜色缓冲区中读取一个像素矩形块对应的数据,结果保存在pixels指示的数组中。

46.glRect

void glRectf ( GLfloat x1 , GLfloat y1 , GLfloat x2 , GLfloat y2 );

其余略。

功能说明:

绘制一个矩形图形。

47.glRenderMode

GLint glRenderMode ( GLenum mode );

参数说明:

mode 指定光栅化模式,它可取符号GL_RENDER, GL_SELECT, GL_FEEDBACK,缺省值为GL_RENDER。

功能说明:

它设置光栅化模式,当mode取不同值时,光栅化的结果不一样。

GL_RENDER 即绘图模式。在这种模式下,图元光栅化后产生像素片断;然后这些片

断被写入颜色缓冲区中,这是OpenGL的缺省设置。

GL_SELECT 即选择模式。在这种模式中,不产生像素片断,也不改变颜色缓冲区中的内容;但可以对名称堆栈进行操作,可定义选择区域等。如果绘图模

式是GL_RENDER,要绘制的一个图元的名称等将记录到一个选择缓冲区

中,等待用户的处理。

GL_FEEDBACK 即反馈模式,在这种模式中,不产生像素片断,也不改变颜色缓冲区中的内容。如果绘图模式是GL_RENDER,要绘制的顶点坐标和属性等将被

记录到一个反馈缓冲区中,等待用户处理。

函数glRenderMode()的返回值是由调用该函数的绘图模式而不是由参数mode决定的,三种绘图模式的返回值如下:

GL_RENDER 0。

GL_SELECT 传递到选择缓冲区的命中记录个数。

GL_FEEDBACK 传递到反馈缓冲区的值的个数。

48.glRotate

void glRotated ( GLdouble angle , GLdouble x , GLdouble y , GLdouble z );

void glRotatef ( GLfloat angle , GLfloat x , GLfloat y , GLfloat z );

参数说明:

angle 指定的旋转角,旋转单位是度。

x,y,z 旋转轴在坐标轴上的投影分量。

功能说明:

该函数的作用是绕向量(x,y,z)产生一个旋转角angle,该旋转变换的矩阵乘以当前矩阵,表示对后续的图形进行旋转变换。

49.glScale

void glScaled ( GLdouble x , GLdouble y , GLdouble z );

void glScalef ( GLfloat x , GLfloat y , GLfloat z );

参数说明:

x,y,z 分别表示沿x,y,z方向的缩小、放大系数。

功能说明:

该函数产生一个沿x,y,z方向的缩小、放大系数,该缩放矩阵乘以当前矩阵,表示对后续的图形进行缩放比例变换。

50.glSelectBuffer

void glSelectBuffer ( GLsizei size , GLuint *buffer );

参数说明:

size 指定buffer的大小。

buffer 记录返回选择数据的指针。

功能说明:

为选择模式产生的返回值建立一个缓冲区。

51.glShadeModel

void glShadeModel ( GLenum mode );

参数说明:

mode 它取符号GL_FLAT 或 GL_SMOOTH。

功能说明:

表示多边形的填充是用平面方式着色填充或用GOURAUD方式着色填充。

52.glStencilFunc

void glStencilFunc ( GLenum func , GLint ref , GLuint mask );

参数说明:

func 指定一个测试函数,它可取符号GL_NEVER, GL_LESS, GL_LEQUAL, GL_GREATER, GL_GEQUAL, GL_EQUAL, GL_NOTEQUAL, GL_ALWAYS. 初始值

是 GL_ALWAYS.

ref 为模板测试设定参考值,初始值为0。

mask 指定一个屏蔽值,当执行测试时,参考值和屏蔽值的逻辑“与”与模板值和屏蔽值的逻辑“与”进行比较操作。

功能说明:

为模板测试设置函数和参考值。模板测试用于控制每一像素的绘制动作,模板中的值stencil与参考值ref进行比较(下述),通过测试则绘制该像素。

GL_NEVER 总是失败

GL_LESS 如果( ref & mask ) < ( stencil & mask ),则通过。

GL_LEQUAL 如果( ref & mask ) ≤ ( stencil & mask ),则通过。

GL_GREATER 如果( ref & mask ) > ( stencil & mask ),则通过。

GL_GEQUAL 如果( ref & mask ) ≥ ( stencil & mask ),则通过。

GL_EQUAL 如果( ref & mask ) = ( stencil & mask ),则通过。

GL_NOTEQUAL 如果( ref & mask ) ≠ ( stencil & mask ),则通过。

GL_ALWAYS 总是通过。

53.glStencilOp

void glStencilOp ( GLenum fail , GLenum zfail , GLenum zpass );

参数说明:

fail 指定模板测试失败时将采取的操作,它可符号GL_KEEP, GL_ZERO, GL_REPLACE, GL_INCR, GL_DECR, GL_INVERT,初始值为GL_KEEP。

zfail 指定模板测试通过但深度测试失败时将采取的操作,它可取符号与fail 相同。

zpass 指定模板测试与深度测试都通过,或当模板测试通过但无深度测试或深度测试无效时将采取的操作,它可取符号与fail相同。

功能说明:

设置模板测试操作,模板测试用于控制每个像素点的绘制,它的测试条件、操作含义如下

GL_KEEP 保持当前值。

GL_ZERO 模板缓冲区中的值置0。

GL_REPLACE 用函数glStencilFunc中指定的参考值ref代替模板缓冲区中的值。

GL_INCR 将模板缓冲区中的当前值加1,直至指定的最大无符号值为此。

GL_DECR 将模板缓冲区中的当前值减1,直至0。

GL_INVERT 将模板缓冲区中的二进制数求反。

54.glTexCoord

void glTexCoord1f ( GLfloat s );

void glTexCoord1i ( GLint s );

void glTexCoord2f ( GLfloat s , GLfloat t );

void glTexCoord2i ( GLint s , GLint t );

void glTexCoord3f ( GLfloat s , GLfloat t , GLfloat r );

void glTexCoord3i ( GLint s , GLint t , GLint r );

void glTexCoord4f ( GLfloat s , GLfloat t , GLfloat r , GLfloat q );

void glTexCoord4i ( GLint s , GLint t , GLint r , GLint q );

其余略

参数说明:

s,t,r,q 指定纹理坐标s,t,r,q,但不是所有命令都需要提供全部4个参数。

功能说明:

设置当前的纹理坐标,它们可以是一维、二维、三维、四维(齐次坐标形式)的参数。

55.glTexEnv

void glTexEnvf ( GLenum target , GLenum pname , GLfloat param );

void glTexEnvi ( GLenum target , GLenum pname , GLint param );

其余略。

参数说明:

target 指定一个纹理环境,它必须是GL_TEXTURE_ENV。

pname 指定一个纹理环境的符号名,它必须是GL_TEXTURE_ENV_MODE。

param 指定一个符号常量,它可取GL_MODULATE, GL_DECAL, GL_BLEND, GL_REPLACE。

功能说明:

设置纹理环境,各参数的具体含义略。

56.glTexImage2D

void glTexImage2D ( GLenum target , GLint level , GLint internalformat , GLsizei width , GLsizei height , GLint border , GLenum format , GLenum type , const GLvoid *pixels );

参数说明:

target 指定目标纹理,必须是GL_TEXTURE_2D 或 GL_PROXY_TEXTURE_2D。

level 指定多重纹理的级别号。0级是图像的基本级,n级是指第n个mipmap 的简化图像。

internalformat 指定纹理中的颜色组分数,它必须是1、2、3、4或下列符号之一: GL_ALPHA, GL_ALPHA4, GL_ALPHA8, GL_ALPHA12, GL_ALPHA16,

GL_LUMINANCE, GL_LUMINANCE4, GL_LUMINANCE8, GL_LUMINANCE12,

GL_LUMINANCE16, GL_LUMINANCE_ALPHA, GL_LUMINANCE4_ALPHA4,

GL_LUMINANCE6_ALPHA2, GL_LUMINANCE8_ALPHA8,

GL_LUMINANCE12_ALPHA4, GL_LUMINANCE12_ALPHA12,

GL_LUMINANCE16_ALPHA16, GL_INTENSITY, GL_INTENSITY4,

GL_INTENSITY8, GL_INTENSITY12, GL_INTENSITY16, GL_R3_G3_B2,

GL_RGB, GL_RGB4, GL_RGB5, GL_RGB8, GL_RGB10, GL_RGB12, GL_RGB16,

GL_RGBA, GL_RGBA2, GL_RGBA4, GL_RGB5_A1, GL_RGBA8, GL_RGB10_A2,

GL_RGBA12, GL_RGBA16。

width 指定纹理图像的宽度,它必须是2n+2(有边界时)。

height 指定纹理图像的高度,它必须是2m+2(有边界时)。

border 指定边界的宽度,它必须是0或1。

format 指定像素数据的格式,它可取: GL_COLOR_INDEX, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_BGR GL_RGBA, GL_BGRA, GL_LUMINANCE,

GL_LUMINANCE_ALPHA.。

type 指定像素数据的类型,它可取: GL_UNSIGNED_BYTE, GL_BYTE, GL_BITMAP, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, GL_INT, GL_FLOAT,

GL_UNSIGNED_BYTE_3_3_2, GL_UNSIGNED_BYTE_2_3_3_REV,

GL_UNSIGNED_SHORT_5_6_5, GL_UNSIGNED_SHORT_5_6_5_REV,

GL_UNSIGNED_SHORT_4_4_4_4, GL_UNSIGNED_SHORT_4_4_4_4_REV,

GL_UNSIGNED_SHORT_5_5_5_1, GL_UNSIGNED_SHORT_1_5_5_5_REV,

GL_UNSIGNED_INT_8_8_8_8, GL_UNSIGNED_INT_8_8_8_8_REV,

GL_UNSIGNED_INT_10_10_10_2, GL_UNSIGNED_INT_2_10_10_10_REV。

pixels 一个指向图像数据的指针。

功能说明:

指定一个二维纹理图像,把一个指定的纹理图像的一部分映射到每个允许该操作的图元上。

57.glTexParameter

void glTexParameterf ( GLenum target , GLenum pname , GLfloat param );

void glTexParameteri ( GLenum target , GLenum pname , GLint param );

其余略。

参数说明:

target 指定目标纹理,它必须是GL_TEXTURE_1D, GL_TEXTURE_2D或 GL_TEXTURE_3D。

pname 指定一个单值纹理参数的符号名称,它可取GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_LOD, GL_TEXTURE_MAX_LOD,

GL_TEXTURE_BASE_LEVEL, GL_TEXTURE_MAX_LEVEL, GL_TEXTURE_WRAP_S,

GL_TEXTURE_WRAP_T, GL_TEXTURE_WRAP_R, 或 GL_TEXTURE_PRIORITY。

param 指定参数pname的具体数据,它可取GL_NEAREST ,GL_LINEAR ,GL_NEAREST_MIPMAP_NEAREST ,GL_LINEAR_MIPMAP_NEAREST ,

GL_NEAREST_MIPMAP_LINEAR ,GL_LINEAR_MIPMAP_LINEAR ,

GL_TEXTURE_MAG_FILTER ,GL_NEAREST ,GL_LINEAR ,

GL_TEXTURE_MIN_LOD ,GL_TEXTURE_MAX_LOD ,

GL_TEXTURE_BASE_LEVEL ,GL_TEXTURE_MAX_LEVEL ,

GL_TEXTURE_WRAP_S,GL_TEXTURE_WRAP_T,GL_TEXTURE_WRAP_R,

GL_TEXTURE_BORDER_COLOR,GL_TEXTURE_PRIORITY。

功能说明:

该函数设置纹理参数,不同的参数会获得哪些显示效果需要经过试验确定。

58.glTranslate

void glTranslated ( GLdouble x , GLdouble y , GLdouble z );

void glTranslatef ( GLfloat x , GLfloat y , GLfloat z );

参数说明:

x,y,z 分别指定沿x,y,z轴方向的平移分量。

功能说明:

定义一个平移矩阵,该矩阵与当前矩阵相乘,使后续的图形进行平移变换。

59.glVertex

void glVertex2d ( GLdouble x , GLdouble y );

void glVertex2f ( GLfloat x , GLfloat y );

void glVertex2i ( GLint x , GLint y );

void glVertex2s ( GLshort x , GLshort y );

void glVertex3d ( GLdouble x , GLdouble y , GLdouble z );

void glVertex3f ( GLfloat x , GLfloat y , GLfloat z );

void glVertex3i ( GLint x , GLint y , GLint z );

void glVertex3s ( GLshort x , GLshort y , GLshort z );

void glVertex4d ( GLdouble x , GLdouble y , GLdouble z , GLdouble w );

void glVertex4f ( GLfloat x , GLfloat y , GLfloat z , GLfloat w );

void glVertex4i ( GLint x , GLint y , GLint z , GLint w );

void glVertex4s ( GLshort x , GLshort y , GLshort z , GLshort w );

参数说明:

x,y,z,w 定义一个点的齐次坐标,但不是所有命令都需要全部的参数。

void glVertex2dv ( const GLdouble *v );

void glVertex2fv ( const GLfloat *v );

void glVertex2iv ( const GLint *v );

void glVertex2sv ( const GLshort *v );

void glVertex3dv ( const GLdouble *v );

void glVertex3fv ( const GLfloat *v );

void glVertex3iv ( const GLint *v );

void glVertex3sv ( const GLshort *v );

void glVertex4dv ( const GLdouble *v );

void glVertex4fv ( const GLfloat *v );

void glVertex4iv ( const GLint *v );

void glVertex4sv ( const GLshort *v );

参数说明:

v 一个指向二元、三元、四元数组的指针。

功能说明:

该函数定义一个顶点的坐标数据,它应该在glBegin与glEnd之间使用。当调用该函数时,当前的颜色、法向量、纹理坐标将与该顶点相关联。

60.glViewport

void glViewport ( GLint x , GLint y , GLsizei width , GLsizei height );

参数说明

x,y 视区的左下角坐标。

width,height 视区的宽与高。

功能说明:

设置显示器屏幕的视区(视口)的位置与大小。

61.gluBeginSurface,gluEndSurface

void gluBeginSurface ( GLUnurbs* nurb );

void gluEndSurface ( GLUnurbs* nurb );

参数说明:

nurb 指定NURBS物体(由gluNewNurbsRenderer创建)。

功能说明:

限定一个NURBS曲面的定义。

62.gluCylinder

void gluCylinder ( GLUquadric* quad , GLdouble base , GLdouble top , GLdouble height ,

OPenGL的基本程序结构

O p enGL的基本程序结构 常用的程序设计语言,如C、C++、Pascal、Fortran和Java等,都支持OpenGL的开发。这里只讨论C版本下OpenGL的语法。 程序的基本结构 OpenGL程序的基本结构可分为三个部分: 第一部分是初始化部分。主要是设置一些OpenGL的状态开关,如颜色模式(RGBA或ALPHA)的选择,是否作光照处理(若有的话,还需设置光源的特性),深度检验,裁剪等等。这些状态一般都用函数glEnable(???), glDisable(???)来设置,???表示特定的状态。 第二部分设置观察坐标系下的取景模式和取景框位置大小。主要利用了三个函数: 函数void glViewport(left,top,right,bottom):设置在屏幕上的窗口大小,四个参数描述屏幕窗口四个角上的坐标(以象素表示); 函数void glOrtho(left,right,bottom,top,near,far):设置投影方式为正交投影(平行投影),其取景体积是一个各面均为矩形的六面体; 函数void gluPerspective(fovy,aspect,zNear,zFar):设置投影方式为透视投影,其取景体积是一个截头锥体。

第三部分是OpenGL的主要部分,使用OpenGL的库函数构造几何物体对象的数学描述,包括点线面的位置和拓扑关系、几何变换、光照处理等等。 以上三个部分是OpenGL程序的基本框架,即使移植到使用MFC的Windows程序中,也是如此。只是由于Windows自身有一套显示方式,需要进行一些必要的改动以协调这两种不同显示方式。 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; ……

OpenGL的库函数介绍

OpenGL的库函数介绍 开发基于OpenGL的应用程序,必须先了解OpenGL的库函数。 OpenGL库函数的命名方式非常有规律。所有OpenGL函数采用了以下格式: <库前缀><根命令><可选的参数个数><可选的参数类型> 库前缀有gl、glu、aux、glut、wgl、glx、agl等等,分别表示该函数属于OpenGL那个开发库。从函数名后面中还可以看出需要多少个参数以及参数的类型。I代表int型,f代表float型,d代表double型,u代表无符号整型。例如:glVertex3fv()表示了该函数属于gl库,参数是三个float型参数指针。我们用glVertex*() 来表示这一类函数。 OpenGL函数库相关的API有核心库(gl)、实用库(glu)、辅助库(aux)、实用工具库(glut)、窗口库(glx、agl、wgl)和扩展函数库等。从下图可以看出,核心库(gl)是核心,实用库(glu)是对gl的部分封装。窗口库(glx、agl、wgl)是针对不同窗口系统的函数。实用工具库(glut)是跨平台的OpenGL程序的工具包,比aux功能强大。扩展函数库是硬件厂商为实现硬件更新利用OpenGL的扩展机制开发的函数。下面逐一对这些库进行详细介绍。 1.OpenGL核心库(GL) 核心库包含有115个函数,函数名的前缀为gl。这部分函数用于常规的、核心的图形处理。由于许多函数可以接收不同数据类型的参数,因此派生出来的函数原形多达300多个。核心库在Windows平台上的头文件为“GL.H”,库文件为“OPENGL32.LIB”,动态链接库为“OPENGL32.DLL”。核心库可以在所有的OpenGL平台上运行。 核心库中的函数主要分为以下几类: ●基本几何图元的绘制函数:glBegain()、glEnd()、glNormal*()、glVertex*(); ●矩阵操作、几何变换和投影变换的函数:如矩阵入栈函数glPushMatrix(),矩阵出 栈函数glPopMatrix(),装载矩阵函数glLoadMatrix(),矩阵相乘函数glMultMatrix(), 当前矩阵函数glMatrixMode()和矩阵标准化函数glLoadIdentity(),几何变换函数 glTranslate*()、glRotate*()和glScale*(),投影变换函数glOrtho()、glFrustum()和视 口变换函数glViewport(); ●颜色、光照和材质的函数:如设置颜色模式函数glColor*()、glIndex*(),设置光照 效果的函数glLight*() 、glLightModel*()和设置材质效果函数glMaterial(); ●显示列表函数:主要有创建、结束、生成、删除和调用显示列表的函数glNewList()、 glEndList()、glGenLists()、glCallList()和glDeleteLists(); ●纹理映射函数:主要有一维纹理函数glTexImage1D()、二维纹理函数 glTexImage2D()、设置纹理参数、纹理环境和纹理坐标的函数glTexParameter*()、 glTexEnv*()和glTetCoord*();

OpenGL 函数 gluLookAt

OpenGL 函数gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的使用 1.gluLookAt()——视图变换函数 把自己的眼睛当成是照相机,前三个参数表示眼睛的坐标,中间三个参数表示要拍照的物体的中心位置,可以理解成焦点吧, 后三个参数表示头顶的朝向,比如说头可以歪着(哈哈)。但是我测试过,如果歪的不对,原来的正前方现在已经不是正前方 了,那么就看不见物体了。举个例子: gluLookAt (0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);//这个就表示头顶是朝着y方向 gluLookAt (0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0);//这个表示头歪了45度,头顶朝着(1.0,1.0,0.0)这个方向 2.glScalef() ——模型变换函数缩放 void glScalef(GLfloat x, GLfloat y, GLfloat z); 模型变换的目的是设置模型的位置和方向,例如可以对模型进行旋转、移动和缩放,或者联合这几种操作。 这个函数表示模型在各轴上是如果进行缩放的。举个例子: glScalef (1.0, 2.0, 1.0);//表示y坐标值扩大两倍,这样原本方的物体就变成长的了。 3.glTranslatef() ——模型变换函数移动 void glTranslatef(GLfloat x, GLfloat y, GLfloat z); 这个函数表示模型是怎样移动的。举个例子: glTranslatef(-1.0,0.0,-2.0);//表示物体沿x负方向移动1.0,沿z轴负方向移动2.0。所以就好像能看见侧面一样

OpenGL使用手册.

OpenGL函数使用手册 (一)OpenGL函数库 格式: <库前缀><根命令><可选的参数个数><可选的参数类型> 库前缀有 gl、glu、aux、glut、wgl、glx、agl 等等, 1,核心函数库主要可以分为以下几类函数: (1) 绘制基本的几何图元函数。如:glBegain(). (2) 矩阵操作、几何变换和投影变换的函数。如:矩阵入栈 glPushMatrix(),还有矩阵的出栈、转载、相乘,此外还有 几何变换函数glTranslate*(),投影变换函数glOrtho()和 视口变换函数glViewport()等等。 (3) 颜色、光照和材质函数。 (4) 显示列表函数,主要有创建、结束、生成、删除和调用 显示列表的函数glNewList()、glEndList()、 glGenLists()、glDeleteLists()和glCallList()。(5) 纹理映射函数,主要有一维和二维纹理函数,设置纹理 参数、纹理环境和纹理坐标的函数glTexParameter*()、 glTexEnv*()和glTetCoord*()等。 (6) 特殊效果函数。 (7) 选着和反馈函数。 (8) 曲线与曲面的绘制函数。 (9) 状态设置与查询函数。 (10) 光栅化、像素函数。 2,OpenGL实用库(The OpenGL Utility Library)(GLU) 包含有43个函数,函数名的前缀名为glu. (1) 辅助纹理贴图函数。 (2) 坐标转换和投影变换函数。 (3) 多边形镶嵌工具。 (4) 二次曲面绘制工具。

(5) 非均匀有理B样条绘制工具。 (6) 错误反馈工具,获取出错信息的字符串gluErrorString() 3,OpenGL辅助库 包含有31个函数,函数名前缀名为aux 这部分函数提供窗口管理、输入输出处理以及绘制一些简单的三维物体。 4,OpenGL工具库(OpenGL Utility Toolkit) 包含大约30多个函数,函数前缀名为glut,此函数由glut.dll来负责解释执行。 (1) 窗口操作函数。窗口初始化、窗口大小、窗口位置等函 数glutInit() glutInitDisplayMode()、glutInitWindowSize() glutInitWindowPosition()等。 (2) 回调函数。响应刷新消息、键盘消息、鼠标消息、定时 器函数等,GlutDisplayFunc()、glutPostRedisplay()、 glutReshapeFunc()、glutTimerFunc()、 glutKeyboardFunc()、 glutMouseFunc()。 (3) 创建复杂的三维物体。这些和aux库函数功能相同。如创 建球体glutWireSphere(). (4) 函数菜单 (5) 程序运行函数 glutAttachMenu() 5,16个WGL函数,专门用于OpenGL和Windows窗口系统的联接,其前缀名为wgl。 (1) 绘制上下文函数。 wglCreateContext()、 wglDeleteContext()、wglGetCurrentContent()、 wglGetCurrentDC() wglDeleteContent()等。 (2) 文字和文本处理函数。wglUseFontBitmaps()、 wglUseFontOutlines()。 (3) 覆盖层、地层和主平面处理函数。wglCopyContext()、 wglCreateLayerPlane()、wglDescribeLayerPlane()、wglReakizeLayerPlatte()等。 (4) 其他函数。wglShareLists()、wglGetProcAddress()等。

OpenGL库函数一览表

OpenGL库函数列表 OpenGl核心函数库 glAccum 操作累加缓冲区 glAddSwapHintRectWIN 定义一组被SwapBuffers拷贝的三角形glAlphaFunc允许设置alpha检测功能 glAreTexturesResident 决定特定的纹理对象是否常驻在纹理内存中glArrayElement 定义一个被用于顶点渲染的数组成分 glBegin,glEnd 定义一个或一组原始的顶点 glBindTexture 允许建立一个绑定到目标纹理的有名称的纹理glBitmap 绘制一个位图 glBlendFunc 特殊的像素算法 glCallList 执行一个显示列表 glCallLists 执行一列显示列表 glClear 用当前值清除缓冲区 GlClearAccum 为累加缓冲区指定用于清除的值 glClearColor 为色彩缓冲区指定用于清除的值 glClearDepth 为深度缓冲区指定用于清除的值 glClearStencil 为模板缓冲区指定用于清除的值 glClipPlane 定义被裁剪的一个平面几何体 glColor 设置当前色彩 glColorMask 允许或不允许写色彩组件帧缓冲区 glColorMaterial 使一个材质色彩指向当前的色彩 glColorPointer 定义一列色彩 glColorTableEXT 定义目的一个调色板纹理的调色板的格式和尺寸glColorSubTableEXT 定义目的纹理的调色板的一部分被替换glCopyPixels 拷贝帧缓冲区里的像素 glCopyTexImage1D 将像素从帧缓冲区拷贝到一个单空间纹理图象中glCopyTexImage2D 将像素从帧缓冲区拷贝到一个双空间纹理图象中glCopyTexSubImage1D 从帧缓冲区拷贝一个单空间纹理的子图象glCopyTexSubImage2D 从帧缓冲区拷贝一个双空间纹理的子图象glCullFace 定义前面或后面是否能被精选 glDeleteLists 删除相邻一组显示列表 glDeleteTextures 删除命名的纹理 glDepthFunc 定义用于深度缓冲区对照的数据 glDepthMask 允许或不允许写入深度缓冲区 glDepthRange 定义z值从标准的设备坐标映射到窗口坐标glDrawArrays 定义渲染多个图元 glDrawBuffer 定义选择哪个色彩缓冲区被绘制 glDrawElements 渲染数组数据中的图元 glDrawPixels 将一组像素写入帧缓冲区 glEdgeFlag 定义一个边缘标志数组 glEdgeFlagPointer 定义一个边缘标志数组 glEnable, glDisable 打开或关闭OpenGL的特殊功能

OpenGL函数原型

OpenGL函数原型 glAccum 操作累加缓冲区glAddSwapHintRectWIN 定义一组被SwapBuffers拷贝的三角形 glAlphaFunc允许设置alpha检测功能glAreTexturesResident 决定特定的纹理对象是否常驻在纹理内存中 glArrayElement 定义一个被用于顶点渲染的数组成分 glBegin,glEnd 定义一个或一组原始的顶点glBindTexture 允许建立一个绑定到目标纹理的有名称的纹理 glBitmap 绘制一个位图 glBlendFunc 特殊的像素算法 glCallList 执行一个显示列表 glCallLists 执行一列显示列表 glClear 用当前值清除缓冲区GlClearAccum 为累加缓冲区指定用于清除的值 glClearColor 为色彩缓冲区指定用于清除的值

glClearDepth 为深度缓冲区指定用于清除的值 glClearStencil 为模板缓冲区指定用于清除的值 glClipPlane 定义被裁剪的一个平面几何体glColor 设置当前色彩 glColorMask 允许或不允许写色彩组件帧缓冲区 glColorMaterial 使一个材质色彩指向当前的色彩 glColorPointer 定义一列色彩glColorTableEXT 定义目的一个调色板纹理的调色板的格式和尺寸glColorSubTableEXT 定义目的纹理的调色板的一部分被替换 glCopyPixels 拷贝帧缓冲区里的像素glCopyTexImage1D 将像素从帧缓冲区拷贝到一个单空间纹理图象中glCopyTexImage2D 将像素从帧缓冲区拷贝到一个双空间纹理图象中glCopyTexSubImage1D 从帧缓冲区拷贝一个单空间纹理的子图象

OpenGL GLUT库函数汇总

OpenGL 库函数汇总-3.GLUT 库函数3.GLUT 库函数 初始化和启动事件处理 ------------------------- glutInit glutInitWindowPosition glutInitWindowSize glutInitDisplayMode glutMainLoop 窗口管理 ------------------------- glutCreateWindow glutCreateSubWindow glutHideWindow glutShowWindow glutSetWindowTitle glutPostRedisplay glutSwapBuffers glutFullScreen glutPositionWindow glutReshapeWindow glutSetWindow glutGetWindow glutPopWindow glutPushWindow glutDestroyWindow glutIconifyWindow

glutSetCursor 重叠层管理 ------------------------- glutEstablishOverlay glutUseLayer glutRemoveOverlay glutPostOverlayRedisplay glutShowOverlay glutHideOverlay 菜单管理 ------------------------- glutCreateMenu glutAddMenuEntry glutAddSubMenu glutAttachMenu glutGetMenu glutSetMenu glutDestroyMenu glutChangeToMenuEntry glutChangeToSubMenu glutRemoveMenuItem glutDetachMenu 注册回调函数 -------------------------------

OPENGL中文教程 OPENGL-3-视口和绘制函数

OPENGL中文教程 OPENGL-3-视口和绘制函数

2、设置视口和重载你的绘制函数 NeHe SDK是把Nehe的教程中所介绍的所有功能,以面向对象的形式,提供给编程人员快速开发的一套编程接口。在下面的教程中,我将按NeHe SDK源码的功能分类,一步一步把这套api介绍给大家。如果你觉得有更好的学习方法,或者有其他有益的建议,请联系我。zhouwei02@https://www.doczj.com/doc/7c7971155.html,,zhouwei506@https://www.doczj.com/doc/7c7971155.html, 程序结构: 我们在第一课程序的基础上添加一下功能: 1.创建一个全局的视口类,控制场景中可见的范围

2.创建初始化函数,用来完成绘制的初始化工作 3.创建一个绘制三棱锥的函数 4.设置默认的视口棱台体 5.重栽我们的绘制函数,这里将绘制一个简单的三棱锥 为了使用视口类,我们需要包含下面的头文件(view.h),并声明一个全 局的视口变量view。 /*************************************新增的代码:包含视口类的声明********************/ #include "view.h" // 包含视口类的声明 /**********************************新增的代码:包含视口类的声明:结束******************/ /*************************************新增的代码:创建View类 ****************************/ View view; // 创建视口类/**********************************新增的代码:创建View类:结束 **************************/ 接着创建一个新的cpp文件,用来重栽我们的绘制函数。这里我把它命 名为Draw.cpp 为了使用OpenGL类和View类,我们需要包含头文件opengl.h和 view.h。 为了方便起见,我们启用NeHe名字空间。 接着我们使用extern关键字来使用全局变量view,最后我们创建一个 变量initialize来记录是否需要初始化。 整个代码如下: #include "opengl.h" // 包含创建OpenGL程序的框架类 #include "view.h" // 包含视口类的声明 #pragma comment( lib, "NeheSDK.lib" ) // 包含NeheSDK.lib库 using namespace NeHe; // 使用NeHe名字空间

glut常用函数介绍

GLUT常用函数介绍 stephenxjc_千年一笑 2010-7-29 对象:GLUT的入门级(初学者) 关键字:GLUT、函数 核心内容:主要是通过在一个具体的程序中函数的作用 平台:visual studio2008,需要配置好OpenGL32.lib、GLu32.lib、GlAux.Lib、glut32.lib和相应的dll文件。 正文 1示例 简单的一个主函数:

glutInitWindowSize() ,glutCreateWindow()等函数比较简单,程序中的介绍已经足够。下面重点介绍其它函数。 2glutInitDisplayMode() 初始化显示模式。这里主要采用RGB模式显示,并采用双缓存模式。双缓存模式相对的是单缓存,双缓存是现在后台缓存绘制,在绘制完成后,将后台与前台缓存交换,后台变前台,前台变后台,达到快速输出的效果。而单缓存,在绘制时就在唯一缓存中绘制,当绘制时间比较长时,会使屏幕比较卡。 3glutKeyBoardFunc(pressKeyboard) 设定键盘响应函数为pressKeyboard,函数的结构为:

其中,key为返回的按键的ASCII编码,x和y为鼠标的当前的位置。 4glutSpecialFunc(specialKey) 实际也是针对按键响应,但与glutKeyBoardFunc相比,前者针对的是一些特殊的按键。包括:GLUT_KEY_F1,GLUT_KEY_F2,GLUT_KEY_F3,GLUT_KEY_F4,GLUT_KEY_F5,GLUT_KEY_F6,GLUT_KEY _F7,GLUT_KEY_F8,GLUT_KEY_F9,GLUT_KEY_F10,GLUT_KEY_F11,GLUT_KEY_F12,GLUT_KEY_LEFT, GLUT_KEY_UP,GLUT_KEY_RIGHT,GLUT_KEY_DOWN,GLUT_KEY_PAGE_UP,GLUT_KEY_PAGE_DOW N,GLUT_KEY_HOME,GLUT_KEY_END,GLUT_KEY_INSERT。函数结构与glutKeyBoardFunc相同。 5glutMouseFunc(pickTarget) 鼠标点击响应。pickTarget函数结构如下:

OpenGL坐标系介绍

OpenGL的坐标系、投影和几何变换 按:我也是在迷茫中走过来的,初学OpenGL时,略微了解了一些有关变换的基本知识,但是却不知道具体的使用方法,因此经常需要在布置场景时反复调整各种参数。当我终于有一天明白了它们的用法时,就觉得应该把这些心得体会写下来,让那些和我一样曾经迷茫过的人能够迅速地找到出路。本文的读者对象为那些初学OpenGL,了解了一些坐标系、几何变换等基本知识,但是又不知道具体应该如何运用这些操作的人。如果你对OpenGL一无所知,建议你先去学学OpenGL的基本知识。 1 坐标系 OpenGL中使用的坐标系有两种,分别为世界坐标系和屏幕坐标系。世界坐标系即OpenGL内部处理时使用的三维坐标系,而屏幕坐标系即为在计算机屏幕上绘图时使用的坐标系。 通常,OpenGL所使用的世界坐标系为右手型,如下图所示。 从计算机屏幕的角度来看,x轴正方向为屏幕从左向右,y轴正方向为屏幕从下向上,z轴正方向为屏幕从里向外。而进行旋转操作时需要指定的角度θ的方向则由右手法则来决定,即右手握拳,大拇指直向某个坐标轴的正方向,那么其余四指指向的方向即为该坐标轴上的θ角的正方向(即θ角增加的方向),在上图中用圆弧形箭头标出。 2 投影 将世界坐标系中的物体映射到屏幕坐标系上的方法称为投影。投影的方式包括平行投影和透视投影两种。 平行投影的投影线相互平行,投影的结果与原物体的大小相等,因此广泛地应用于工程制图等方面。 透视投影的投影线相交于一点,因此投影的结果与原物体的实际大小并不一致,而是会近大远小。因此透视投影更接近于真实世界的投影方式。 B 平行投影 B 透视投影 x z y 0

OpenGL常用API

glAccum 操作累加缓冲区 glAddSwapHintRectWIN 定义一组被SwapBuffers拷贝的三角形glAlphaFunc允许设置alpha检测功能 glAreTexturesResident 决定特定的纹理对象是否常驻在纹理内存中glArrayElement 定义一个被用于顶点渲染的数组成分 glBegin,glEnd 定义一个或一组原始的顶点 glBindTexture 允许建立一个绑定到目标纹理的有名称的纹理glBitmap 绘制一个位图 glBlendFunc 特殊的像素算法 glCallList 执行一个显示列表 glCallLists 执行一列显示列表 glClear 用当前值清除缓冲区 GlClearAccum 为累加缓冲区指定用于清除的值 glClearColor 为色彩缓冲区指定用于清除的值 glClearDepth 为深度缓冲区指定用于清除的值 glClearStencil 为模板缓冲区指定用于清除的值 glClipPlane 定义被裁剪的一个平面几何体 glColor 设置当前色彩 glColorMask 允许或不允许写色彩组件帧缓冲区 glColorMaterial 使一个材质色彩指向当前的色彩 glColorPointer 定义一列色彩 glColorTableEXT 定义目的一个调色板纹理的调色板的格式和尺寸glColorSubTableEXT 定义目的纹理的调色板的一部分被替换glCopyPixels 拷贝帧缓冲区里的像素 glCopyTexImage1D 将像素从帧缓冲区拷贝到一个单空间纹理图象中glCopyTexImage2D 将像素从帧缓冲区拷贝到一个双空间纹理图象中glCopyTexSubImage1D 从帧缓冲区拷贝一个单空间纹理的子图象glCopyTexSubImage2D 从帧缓冲区拷贝一个双空间纹理的子图象glCullFace 定义前面或后面是否能被精选 glDeleteLists 删除相邻一组显示列表 glDeleteTextures 删除命名的纹理 glDepthFunc 定义用于深度缓冲区对照的数据 glDepthMask 允许或不允许写入深度缓冲区 glDepthRange 定义z值从标准的设备坐标映射到窗口坐标glDrawArrays 定义渲染多个图元 glDrawBuffer 定义选择哪个色彩缓冲区被绘制 glDrawElements 渲染数组数据中的图元 glDrawPixels 将一组像素写入帧缓冲区 glEdgeFlag 定义一个边缘标志数组 glEdgeFlagPointer 定义一个边缘标志数组 glEnable, glDisable 打开或关闭OpenGL的特殊功能glEnableClientState,glDisableClientState 分别打开或关闭数组glEvalCoord 求解一维和二维贴图 glEvalMesh1,glEvalMesh2 求解一维和二维点或线的网格

OpenGL函数库相关的API

? OpenGL函数库相关的API | 确保中国在台海稳操胜券的终极军事战略(文摘)? OpenGL编程之坐标变换 基于VC++的OpenGL编程之坐标变换 OpenGL中的几种变换 OpenGL中的各种转换是通过矩阵运算实现的,具体的说,就是当发出一个转换命令时,该命令会生成一个4X4阶的转换矩阵(OpenGL中的物体坐标一律采用齐次坐标,即(x, y, z, w),故所有变换矩阵都采用4X4矩阵),当前矩阵与这个转换矩阵相乘,从而生成新的当前矩阵。例如,对于顶点坐标v ,转换命令通常在顶点坐标命令之前发出,若当前矩阵为C,转换命令构成的矩阵为M,则发出转换命令后,生成的新的当前矩阵为CM,这个矩阵再乘以顶点坐标v,从而构成新的顶点坐标CMv。上述过程说明,程序中绘制顶点前的最后一个变换命令最先作用于顶点之上。这同时也说明,OpenGL编程中,实际的变换顺序与指定的顺序是相反的。 (一)视点变换 视点变换确定了场景中物体的视点位置和方向,就向上边提到的,它象是在场景中放置了一架照相机,让相机对准要拍摄的物体。确省时,相机(即视点)定位在坐标系的原点(相机初始方向都指向Z负轴),它同物体模型的缺省位置是一致的,显然,如果不进行视点变换,相机和物体是重叠在一起的。 执行视点变换的命令和执行模型转换的命令是相同的,想一想,在用相机拍摄物体时,我们可以保持物体的位置不动,而将相机移离物体,这就相当于视点变换;另外,我们也可以保持相机的固定位置,将物体移离相机,这就相当于模型转换。这样,在OpenGL中,以逆时针旋转物体就相当于以顺时针旋转相机。因此,我们必须把视点转换和模型转换结合在一起考虑,而对这两种转换单独进行考虑是毫无意义的。 除了用模型转换命令执行视点转换之外,OpenGL实用库还提供了gluLookAt()函数,该函数有三个变量,分别定义了视点的位置、相机瞄准方向的参考点以及相机的向上方向。该函数的原型为: 该函数定义了视点矩阵,并用该矩阵乘以当前矩阵。eyex,eyey,eyez定义了视点的位置;centerx、centery和centerz变量指定了参考点的位置,该点通常为相机所瞄准的场景中心轴线上的点;upx、upy、upz变量指定了向上向量的方向。

OpenGL库函数大全

1.OpenGL核心库 核心库包含有115个函数,函数名的前缀为gl。 这部分函数用于常规的、核心的图形处理。此函数由gl.dll来负责解释执行。由于许多函数可以接收不同数以下几类。据类型的参数,因此派生出来的函数原形多达300多个。 核心库中的函数主要可以分为以下几类函数: (1)绘制基本几何图元的函数。如绘制图元的函数glBegain()、glEnd()、glNormal*()、glV ertex*()。 (2)矩阵操作、几何变换和投影变换的函数。如矩阵入栈函数glPushMatrix()、矩阵出栈函数glPopMatrix()、装载矩阵函数glLoadMatrix()、矩阵相乘函数glMultMatrix(),当前矩阵函数glMatrixMode()和矩阵标准化函数glLoadIdentity(),几何变换函数glTranslate*()、glRotate*()和glScale*(),投影变换函数glOrtho()、glFrustum()和视口变换函数glViewport()等等。 (3)颜色、光照和材质的函数。如设置颜色模式函数glColor*()、glIndex*(),设置光照效果的函数glLight*() 、glLightModel*()和设置材质效果函数glMaterial()等等。 (4)显示列表函数、主要有创建、结束、生成、删除和调用显示列表的函数glNewList()、glEndList()、glGenLists()、glCallList()和glDeleteLists()。 (5)纹理映射函数,主要有一维纹理函数glTexImage1D()、二维纹理函数glTexImage2D()、设置纹理参数、纹理环境和纹理坐标的函数glTexParameter*()、glTexEnv*()和glTetCoord*()等。 (6)特殊效果函数。融合函数glBlendFunc()、反走样函数glHint()和雾化效果glFog*()。 (7)光栅化、象素操作函数。如象素位置glRasterPos*()、线型宽度glLineWidth()、多边形绘制模式glPolygonMode(),读取象素glReadPixel()、复制象素glCopyPixel()等。 (8)选择与反馈函数。主要有渲染模式glRenderMode()、选择缓冲区glSelectBuffer()和反馈缓冲区glFeedbackBuffer()等。 (9)曲线与曲面的绘制函数。生成曲线或曲面的函数glMap*()、glMapGrid*(),求值器的函数glEvalCoord*() glEvalMesh*()。 (10)状态设置与查询函数。主要有glGet*()、glEnable()、glGetError()等。2.OpenGL实用库The OpenGL Utility Library (GLU) 包含有43个函数,函数名的前缀为glu。 OpenGL提供了强大的但是为数不多的绘图命令,所有较复杂的绘图都必须从点。线、面开始。Glu 为了减轻繁重的编程工作,封装了OpenGL函数,Glu函数通过调用核心库的函数,为开发者提供相对简单的用法,实现一些较为复杂的操作。此函数由glu.dll来负责解释执行。OpenGL中的核心库和实用库可以在所有的OpenGL平台上运行。 主要包括了以下几种: (1)辅助纹理贴图函数,有gluScaleImage() 、gluBuild1Dmipmaps()、gluBuild2Dmipmaps()。

opengl 核心库glut常用函数

opengl 核心库glut常用函数 2010-10-12 12:01:27| 分类:opengl|举报|字号订阅 glut库下的主要函数 一、初始化 1、void glutInit(int* argc,char** argv) 这个函数用来初始化GLUT库。对应main函数的形式应是: int main(int argc,char* argv[]); 这个函数从main函数获取其两个参数。 2、void glutInitWindowSize(int width,int height); void glutInitWindowPosition(int x,int y); 这两个函数很好理解是设置glut程序要产生的窗口的大小和位置(左上角)。以像素为单位。 3、void glutInitDisplayMode(unsigned int mode); 设置图形显示模式。参数mode的可选值为: GLUT_RGBA:当未指明GLUT—RGBA或GLUT—INDEX时,是默认使用的模式。 表明欲建立RGBA模式的窗口。 GLUT_RGB:与GLUT—RGBA作用相同。 GLUT_INDEX:指明为颜色索引模式。 GLUT_SINGLE:只使用单缓存 GLUT_DOUBLE:使用双缓存。以避免把计算机作图的过程都表现出来,或者为了平滑地实现动画。 GLUT_ACCUM:让窗口使用累加的缓存。 GLUT_ALPHA:让颜色缓冲区使用alpha组件。 GLUT_DEPTH:使用深度缓存。 GLUT_STENCIL:使用模板缓存。 GLUT_MULTISAMPLE:让窗口支持多例程。 GLUT_STEREO:使窗口支持立体。 GLUT_LUMINACE:luminance是亮度的意思。但是很遗憾,在多数OpenGL 平台上,不被支持。

OpenGL中常用的GLUT函数库讲解

OpenGL 中常用的GLUT 函数库 GLUT函数说明 一、初始化 void glutInit(int* argc,char** argv) 这个函数用来初始化GLUT库。对应main 函数的形式应是:int main(int argc,char* argv[]); 这个函数从main 函数获取其两个参数。 1void glutInitWindowSize(int width,int height);2void glutInitWindowPosition(int x,int y); 设置glut程序要产生的窗口的大小和位置(左上角)。以像素为单位。 void glutInitDisplayMode(unsigned int mode); 设置图形显示模式。参数mode的可选值为: ?GLUT_RGBA:当未指明GLUT-RGBA或GLUT-INDEX时,是默认使用的模式。表明欲建立RGBA模式的窗口。 ?GLUT_RGB:与GLUT-RGBA作用相同。 ?GLUT_INDEX:指明为颜色索引模式。 ?GLUT_SINGLE:只使用单缓存 ?GLUT_DOUBLE:使用双缓存。以避免把计算机作图的过程都表现出来,或者为了平滑地实现动画。 ?GLUT_ACCUM:让窗口使用累加的缓存。 ?GLUT_ALPHA:让颜色缓冲区使用alpha组件。 ?GLUT_DEPTH:使用深度缓存。 ?GLUT_STENCIL:使用模板缓存。 ?GLUT_MULTISAMPLE:让窗口支持多例程。 ?GLUT_STEREO:使窗口支持立体。

GLUT_LUMINACE: luminance是亮度的意思。但是很遗憾,在多数Ope nGL平台上,不被支持。 二、事件处理(Event Processing) void glutMainLoop(void) 让glut 程序进入事件循环。在一个glut程序中最多只能调用一次。一旦调用,会直到程序结束才返回。 三、窗口管理(Window Management) int glutCreateWindow(char* name); 产生一个顶层的窗口。name 作为窗口的名字,也就是窗口标题栏显示的内容。 返回值是生成窗口的标记符,可用函数glutGetWindow()加以引用。 int glutCreateSubWindow(int win,int x,int y,int width,int height); 创建一个子窗口。win是其父窗口的标记符。x,y是相对父窗口的位移,以像素表示。width,height是子窗口的宽和高。 void glutSetWindow(int win);int glutGetWindow(void); 功能分别是:设置标记符为win的窗口为当前窗口;返回当前窗口的标记符。 void glutDestroyWindow(int win); 销毁以win 标记的窗口。 void glutPostRedisplay(void); 将当前窗口打上标记,标记其需要再次显示。 void glutSwapBuffers(void); 当窗口模式为双缓存时,此函数的功能就是把后台缓存的内容交换到前台显示。当然,只有单缓存时,使用它的功能跟用glFlush()一样。 而使用双缓存是为了把完整图画一次性显示在窗口上,或者是为了实现动画。 void glutPositionWindow(int x,int y);

OpenGL常用函数列表

OpenGL常用函数列表 glAccum 操作累加缓冲区 glAddSwapHintRectWIN 定义一组被SwapBuffers拷贝的三角形glAlphaFunc允许设置alpha检测功能 glAreTexturesResident 决定特定的纹理对象是否常驻在纹理内存中glArrayElement 定义一个被用于顶点渲染的数组成分 glBegin,glEnd 定义一个或一组原始的顶点 glBindTexture 允许建立一个绑定到目标纹理的有名称的纹理glBitmap 绘制一个位图 glBlendFunc 特殊的像素算法 glCallList 执行一个显示列表 glCallLists 执行一列显示列表 glClear 用当前值清除缓冲区 GlClearAccum 为累加缓冲区指定用于清除的值 glClearColor 为色彩缓冲区指定用于清除的值 glClearDepth 为深度缓冲区指定用于清除的值 glClearStencil 为模板缓冲区指定用于清除的值 glClipPlane 定义被裁剪的一个平面几何体 glColor 设置当前色彩 glColorMask 允许或不允许写色彩组件帧缓冲区 glColorMaterial 使一个材质色彩指向当前的色彩 glColorPointer 定义一列色彩 glColorTableEXT 定义目的一个调色板纹理的调色板的格式和尺寸glColorSubTableEXT 定义目的纹理的调色板的一部分被替换glCopyPixels 拷贝帧缓冲区里的像素 glCopyTexImage1D 将像素从帧缓冲区拷贝到一个单空间纹理图象中glCopyTexImage2D 将像素从帧缓冲区拷贝到一个双空间纹理图象中glCopyTexSubImage1D 从帧缓冲区拷贝一个单空间纹理的子图象glCopyTexSubImage2D 从帧缓冲区拷贝一个双空间纹理的子图象glCullFace 定义前面或后面是否能被精选 glDeleteLists 删除相邻一组显示列表 glDeleteTextures 删除命名的纹理 glDepthFunc 定义用于深度缓冲区对照的数据 glDepthMask 允许或不允许写入深度缓冲区 glDepthRange 定义z值从标准的设备坐标映射到窗口坐标glDrawArrays 定义渲染多个图元 glDrawBuffer 定义选择哪个色彩缓冲区被绘制 glDrawElements 渲染数组数据中的图元 glDrawPixels 将一组像素写入帧缓冲区 glEdgeFlag 定义一个边缘标志数组

OpenGL之基本图元

任何复杂的三维模型都是由基本的几何图元:点、线段和多边形组成的,有了这些图元,就可以建立比较复杂的模型。因此这部分内容是学习OpenGL编程的基础。 一、基本图元的描述及定义 OpenGL图元是抽象的几何概念,不是真实世界中的物体,因此须用相关的数学模型来描述。所有的图元都是由一系列有顺序的顶点集合来描述的。OpenGL中绘制几何图元,必须使用glBegain()和glEnd()这一对函数,传递给glBegain()函数的参数唯一确定了要绘制何种几何图元,同时,在该函数对中给出了几何图元的定义,函数glEnd()标志顶点列表的结束。例如,下面的代码绘制了一个多边形:

图一、部分几何图元示意图 在glBegin()和glEnd()之间最重要的信息就是由函数glVertex*()定义的顶点,必要时也可为每个顶点指定颜色(只对当前点或后续点有效)、法向、纹理坐标或其他,即调用相关的函数:

用浮点值表示的点称为顶点(Vertex)。所有顶点在OpenGL内部计算时都使用三维坐标(x,y,z)来处理,用二维坐标(x,y)定义的点在OpenGL中默认z值为0。顶点坐标也可以用齐次坐标(x,y,z,w)来表示,如果w不为0.0,这些齐次坐标表示的顶点即为三维空间点(x/w,y/w,z/w),一般来说,w缺省为1.0。 可以用glVertex{234}{sifd}[V](TYPE cords)函数来定义一个顶点。例如: 图二、线段的三种连结方式 OpenGL能指定线的宽度并绘制不同的虚点线,如点线、虚线等。相应的函数形式如下: 1、void glLineWidth(GLfloat width); 设置线宽(以象素为单位)。参数width必须大于0.0,缺省时为1.0。

相关主题
文本预览
相关文档 最新文档