OpenGL参考函数.docx
《OpenGL参考函数.docx》由会员分享,可在线阅读,更多相关《OpenGL参考函数.docx(61页珍藏版)》请在冰豆网上搜索。
OpenGL参考函数
1.1颜色使用
1.glShadeModel:
选择平面明暗模式或光滑明暗模式
C语言描述
voidglShadeModel(GLenummode)
参数
mode指定表示明暗模式的符号值,可以选择GL_FLAT(平面明暗模式)和
GL_SMOOTH(光滑明暗模式),缺省值为GL_SMOOTH。
说明
OpenGL图元需要进行明暗处理,处理得模式可以为平面明暗模式或光滑(Gouraud着
色)明暗模式。
光滑明暗模式时,多边形各个内部点的颜色是根据各顶点指定的颜色来插值
得到的,这意味着两个顶点之间的颜色是从一顶点的颜色渐变到另一顶点的颜色。
对于平面
明暗模式,整个图元区域的颜色就是最后一个顶点指定的颜色,唯一例外的是
GL_POLYGON,这是整个区域的颜色是第一个顶点所指定的颜色。
但要注意,如果激活了
光照,计算到的顶点颜色都是光照后的结果颜色,若光照关闭,计算到的颜色就是指定顶点
时的当前颜色。
2.glColor:
设置当前颜色
C语言描述
voidglcolor3b(GLbytered,GLbytegreen,GLbyteblue);
voidglcolor3d(GLdoublered,GLdoublegreen,GLdoubleblue);
voidglcolor3f(GLfloatred,GLfloatgreen,GLfloatblue);
voidglcolor3i(GLintred,GLintgreen,GLintblue);
voidglcolor3s(GLshortred,GLshortgreen,GLshortblue);
voidglcolor3ub(GLubytered,GLubytegreen,GLubyteblue);
voidglcolor3ui(GLuintred,GLuintgreen,GLuintblue);
voidglcolor3us(GLushortred,GLushortgreen,GLushortblue);
voidglcolor4b(GLbytered,GLbytegreen,GLbyteblue,GLbytealpha);
voidglcolor4d(GLdoublered,GLdoublegreen,GLdoubleblue,GLdoublealpha);
voidglcolor4f(GLfloatred,GLfloatgreen,GLfloatblue,GLfloatalpha);
voidglcolor4i(GLintred,GLintgreen,GLintblue,GLintalpha);
voidglcolor4s(GLshortred,GLshortgreen,GLshortblue,GLshortalpha);
voidglcolor4ub(GLubytered,GLubytegreen,GLubyteblue,GLubytealpha);
voidglcolor4ui(GLuintred,GLuintgreen,GLuintblue,GLuintalpha);
voidglcolor4us(GLushortred,GLushortgreen,GLushortblue,GLushortalpha);
voidglcolor3bv(constGLbyte*v);
voidglcolor3dv(constGLdouble*v);
voidglcolor3fv(constGLfloat*v);
voidglcolor3iv(constGLint*v);
voidglcolor3sv(constGLshort*v);
voidglcolor3ubv(constGLubyte*v);
voidglcolor3uiv(constGLuint*v);
59
voidglcolor3usv(constGLushort*v);
voidglcolor4bv(constGLbyte*v);
voidglcolor4dv(constGLdouble*v);
voidglcolor4fv(constGLfloat*v);
voidglcolor4iv(constGLint*v);
voidglcolor4sv(constGLshort*v);
voidglcolor4ubv(constGLubyte*v);
voidglcolor4uiv(constGLuint*v);
voidglcolor4usv(constGLushort*v);
参数
red,green,blue指定当前颜色中的红、绿和蓝色成分。
alpha指定颜色中的α成分。
只有在glColor4函数带4个变量时才指定此参数。
*v指定一个指向包含红、绿、蓝和alpha值的数组指针。
说明
本函数通过指定红、绿、蓝的颜色成分来设置当前的颜色,同时部分函数可以接受α
成分。
每个成分亮度的表示范围是从零(0.0)到全光强(1.0),当指定了非浮点类型时,该
类型从0到最大值的表示法与浮点类型范围的0.0到1.0相映射。
3.glColorMask:
激活或关闭帧缓存颜色分量的写操作
C语言描述
voidglColorMask(GLbooleanred,GLbooleangreen,GLbooleanblue,GLbooleanalpha)
参数
red,green,blue,alpha指定红、绿、蓝和α成分是否可以修改。
说明
本函数指定是否可以将单个的颜色分量写入帧缓存。
例如,若red为GL_FALSE,那么
不管执行什么样的绘制操作,任何颜色缓存中任何像素的红色分量均不被改变。
1.2绘制几何图元
1.glVertex:
指定顶点
C语言描述
glVertex2d(GLdoublex,GLdoubley);
glVertex2f(GLfloatx,GLfloaty);
glVertex2i(GLintx,GLinty);
glVertex2s(GLshortx,GLshorty);
glVertex3d(GLdoublex,GLdoubley,GLdoublez);
glVertex3f(GLfloatx,GLfloaty,GLfloatz);
glVertex3i(GLintx,GLinty,GLintz);
glVertex3s(GLshortx,GLshorty,GLshortz);
glVertex4d(GLdoublex,GLdoubley,GLdoublez,GLdoublew);
glVertex4f(GLfloatx,GLfloaty,GLfloatz,GLfloatw);
glVertex4i(GLintx,GLinty,GLintz,GLintw);
glVertex4s(GLshortx,GLshorty,GLshortz,GLshortw);
glVertex2dv(constGLdouble*v);
glVertex2fv(constGLfloat*v);
60
glVertex2iv(constGLint*v);
glVertex2sv(constGLshort*v);
glVertex3dv(constGLdouble*v);
glVertex3fv(constGLfloat*v);
glVertex3iv(constGLint*v);
glVertex3sv(constGLshort*v);
glVertex4dv(constGLdouble*v);
glVertex4fv(constGLfloat*v);
glVertex4iv(constGLint*v);
glVertex4sv(constGLshort*v);
参数
x,y,z顶点的x,y,z坐标,不指定z时,默认值为0.0。
w顶点的w坐标,该坐标用于缩放,默认情况下设置为1.0。
*v一个数值数组,它保存着2个,3个或4个用于指定顶点的值。
说明
glVertex函数使用在glBegin/glEnd语句之间,用来指定点、线和多边形的顶点。
当调用
glVertex函数指定顶点时,可以为该顶点指定相关的数据,即顶点的当前颜色、法向量和纹
理坐标。
2.glBegin,glEnd:
限定一个或多个图元顶点的绘制
C语言描述
voidglBegin(GLenummode);
voidglEnd(void);
参数
mode指定在glBegin和glEnd之间将要用顶点创建的一个或多个图元,可以有以下
10个供选择的常数:
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。
说明
glBegin和glEnd函数限定了一组或多组图元的顶点定义。
glBegin函数的变量mode指
定了顶点可以绘制的10种方式。
以n作为以1开始的整数,N作为指定的全部顶点数,则
各种绘制方式如下:
GL_POINTS:
把每一个顶点作为一个点进行处理,顶点n即定义了点n,共绘制N个
点。
GL_LINES:
把每一个顶点作为一个独立的线段,顶点2n-1和2n之间共定义了n个线
段,总共绘制N/2条线段。
,如果N为奇数,则忽略最后一个顶点。
GL_LINE_STRIP:
绘制从第一个顶点到最后一个顶点依次相连的一组线段,第n和n+1
个顶点定义了线段n,总共绘制N-1条线段。
GL_LINE_LOOP:
绘制从定义第一个顶点到最后一个顶点依次相连的一组线段,然后
最后一个顶点与第一个顶点相连。
第n和n+1个顶点定义了线段n,然后最后一个线段是由
顶点N和1之间定义,总共绘制N条线段。
GL_TRIANGLES:
把每三个顶点作为一个独立的三角形。
顶点3n-2,3n-1和3n定义
了第n个三角形,总共绘制N/3个三角形。
GL_TRIANGLE_STRIP:
绘制一组相连的三角形。
对于奇数点n,顶点n,n+1和n+2
61
定义了第n个三角形;对于偶数n,顶点n+1,n和n+2定义了第n个三角形,总共绘制N-2
个三角形。
GL_TRIANGLE_FAN:
绘制一组相连的三角形。
三角形是由第一个顶点及其后给定的
顶点所确定。
顶点1,n+1和n+2定义了第n个三角形,总共绘制N-2个三角形。
GL_QUADS:
绘制由4个顶点组成的一组单独的四边形。
顶点4n-3,4n-2,4n-1和4n
定义了第n个四边形,总共绘制N/4个四边形。
GL_QUAD_STRIP:
绘制一组相连的四边形。
每个四边形是由一对顶点及其后给定的一
对顶点共同确定的。
顶点2n-1,2n,2n+2和2n+1定义了第n个四边形,总共绘制N/2-1个
四边形。
GL_POLYGON:
绘制一个凸多边形,顶点1到N定义了这个多边形。
可以在glBegin和glEnd之间调用的OpenGL函数为:
glVertex,glColor,glIndex,
glNormal,glTexCoord,glEvalCoord,glEvalPoint,glMaterial和glEdgeFlag。
3.glEdgeFlag,glEdgeFlagv:
指定边界标记
C语言描述
voidglEdgeFlag(GLbooleanflag);
voidglEdgeFlagv(constGLboolean*flag);
参数
flag指定当前的边界标记值,为GL_TRUE或GL_FALSE。
*flag指向包含单个布尔元素的数组指针,该布尔元素表示当前的边界标记值。
说明
在glBegin/glEnd之间指定的多边形、单个的三角形或单个的四边形上每个顶点的边界
标志,该顶点或者是边界标志或者不是边界标志。
指定顶点时,如果当前边界标记为
GL_TRUE,那么该顶点标记为边界的起点,否则为非边界标记的起点。
注意只有在
GL_POLYGON_MODE设置为GL_POINT或GL_LINE时,边界标记和非边界标记才有意
义。
初始时,边界标记为GL_TREU。
4.glPointSize:
指定光栅化点的直径
C语言描述
voidglPointSize(GLfloatsize);
参数
size指定光栅化点的直径,缺省值为1.0。
说明
本函数指定走样和反走样的点的光栅化的直径。
如果size变量取非1.0的值,那么激活
和未激活反走样的情况下,点的大小在屏幕上显示不同的结果。
可以调用glEnable和
glDisable函数,变量为GL_POINT_SMOOTH控制点的反走样。
如果关闭反走样,点的实际大小是通过将指定的数值四舍五入为整数来决定。
如果激活
反走样,那么点光栅化为每个像素正方形产生一个片元,该正方形的直径等于当前点的大小,
中心位于点(xw,yw)(下标w表示窗口坐标)的圆形区域相交,对于每个片元,覆盖值
是圆形区域与对应的像素正方形相交的窗口坐标区域,这个覆盖值将被保存起来并使用在最
后的光栅化步骤中。
注意,当激活点反走样时,点的大小并不是任意的,它有一定的范围,可以用glGet函
数,变量为GL_POINT_SIZE_RANGE查询出,如果设定的值超出这个范围,那么将会使用
该范围内最接近设定值的值。
62
5.glLineWidth:
指定光栅化直线的宽度
C语言描述
voidglLineWidth(GLfloatwidth);
参数
width指定光栅化直线的宽度,缺省值为1.0。
说明
本函数指定被光栅化的走样和反走样直线的宽度。
在激活和未激活反走样的情况下,不
同的线宽具有不同的效果。
可以调用glEnable和glDisable函数,变量为GL_LINE_SMOOTH
控制直线的反走样。
如果关闭直线反走样,实际的线宽是通过将指定的数值四舍五入为整数来决定。
如果激
活反走样,直线光栅化操作为每个像素正方形产生一个片元,这个正方形与位于矩形内的区
域相互交叉,该矩形的宽度等于当前的线宽,长度等于线的实际长度,并且位于线段的中心。
对于每个片元,覆盖值是相邻像素正方形的矩形区域交叉的窗口坐标区域,这个覆盖值将被
保存起来并使用在最后的光栅化操作中。
注意,当激活直线反走样时,直线的宽度并不是任意的,它有一定的范围,可以用glGet
函数,变量为GL_LINE_WIDTH_RANGE查询出,如果设定的值超出这个范围,那么将会
使用该范围内最接近设定值的值。
6.glLineStipple:
指定点划线
C语言描述
voidglLineStipple(GLintfactor,GLushortpattern)
参数
factor指定线的点划图中每个位的倍数。
例如,如果factor为3,那么点划图中的每个
位是设置值的3倍。
factor的取值范围为[0,255],缺省值为0。
pattern指定一个16位整数,当线被光栅化时,这16位确定了线中的哪一段需要绘制,
缺省时点划图中的每个位均为1。
说明
本函数使用位模式来绘制点划线。
位模式从第0位(最右边的位)开始,所以实际的绘
图模式是指定模式的逆序。
factor参数用于展宽模式中每一位在点划线中指定要画或不要画
的像素数。
为了使用点划线,必须先启用点划线,调用glEnable(GL_LINE_STIPPLE)。
如
果正在绘制多条线段,每次画新线段时模式将被复位,这样在绘制一条线段在模式的中间终
止将不会影响下一条线段。
7.glPolygonMode:
选择多边形光栅化模式
C语言描述
voidglPolygonMode(GLenumface,GLenummode);
参数
face指定多边形的哪一个面受模式改变的影响——GL_FRONT,GL_BACK或
GL_FRONT_AND_BACK。
mode指定新的绘图模式。
GL_FILL为默认值,生成填充的多边形;GL_LINE生成多
边形的轮廓;GL_POINT只画出顶点。
GL_LINE和GL_POINT绘制的点和直线受glEdgeFlag
所设置的边缘标记的影响。
说明
63
本函数允许改变多边形的渲染方式。
默认情况下,用当前颜色或材质属性给多边形进行
填充或加上阴影。
8.glFrontFace:
定义正面多边形和反面多边形。
C语言描述
voidglFrontFace(GLenummode);
参数
mode指定正对多边形的方向——顺时针(GL_CW)或逆时针(GL_CCW)。
说明
本函数用于定义多边形的哪一面被视为正面。
如果从正面看时,多边形顶点的指定顺序
是按顺时针方向绕多边形一周,则说这个多边形具有顺时针绕法;反之,顶点是按逆时针方
向绕多边形一周,则说这个多边形具有逆时针绕法。
通过本函数可以把顺时针或逆时针绕法
的一面指定为多边形的正面。
9.glCullFace:
指定剔出操作的多边形面
C语言描述
voidglCullFace(GLenummode);
参数
mode指定应剔除多边形的哪一个面,不是GL_FRONT就是GL_BACK。
说明
本函数可以禁用多边形正面或背面上的光照、阴影和颜色计算及操作,消除不必要的渲
染计算是因为无论对象如何进行旋转或变换,都不会看到多边形的背面。
用GL_CULL_FACE
参数调用glEnable和glDisable可以启用或禁用剔除。
10.glRect:
绘制矩形
C语言描述
voidglRectd(GLdoublex1,GLdoubley1,GLdoublex2,GLdoubley2);
voidglRectf(GLfloatx1,GLfloaty1,GLfloatx2,GLfloaty2);
voidglRecti(GLintx1,GLinty1,GLintx2,GLinty2);
voidglRects(GLshortx1,GLshorty1,GLshortx2,GLshorty2);
voidglRectdv(constGLdouble*v1,constGLdouble*v2);
voidglRectfv(constGLfloat*v1,constGLfloat*v2);
voidglRectiv(constGLint*v1,constGLint*v2);
voidglRectsv(constGLshort*v1,constGLshort*v2);
参数
x1,y1指定矩形的左上角点。
x2,y2指定矩形的右下角点。
*v1两个值的数组,指定矩形的左上角点。
*v2两个值的数组,指定矩形的右下角点。
说明
本函数根据指定的两个顶点坐标绘制矩形。
矩形位于z=0的xy平面上。
1.3坐标转换
1.gltranslate:
用当前矩阵乘以平移矩阵
64
C语言描述
voidglTranslated(GLdoublex,GLdoubley,GLdoublez);
voidglTranslatef(GLfloatx,GLfloaty,GLfloatz);
参数
x,y,z指定平移矢量的x,y,z坐标。
说明
本函数用当前矩阵乘以由平移矢量指定的平移矩阵,并用结果矩阵替代当前矩阵。
如果
矩阵模式为GL_MODELVIEW或GL_PROJECTION,则在调用本函数之后绘制的所有物体
均被平移。
2.glRotate:
用当前矩阵乘以旋转矩阵
C语言描述
voidglRotated(GLdoubleangle,GLdoublex,GLdoubley,GLdoublez);
voidglRotatef(GLfloatangle,GLfloatx,GLfloaty,GLfloatz);
参数
angle指定旋转的角度,单位为度。
x,y,z指定一个自原点的方向矢量作为旋转轴。
说明
本函数用来计算旋转矩阵,该矩阵围绕原点到点(x,y,z)的向量逆时针旋转angle
角,然后用当前矩阵乘以旋转矩阵,并用结果矩阵替代当前矩阵。
如果矩阵模式为
GL_MODELVIEW或GL_PROJECTION,则在调用本函数之后绘制的所有物体均被旋转。
3.glScale:
用当前矩阵乘以缩放矩阵
C语言描述
voidglScaled(GLdoublex,GLdoubley,GLdoublez);
voidglScalef(GLfloatx,GLfloaty,GLfloatz);
参数
x,y,z指定沿着x,y,z轴三个方向的缩放因子。
说明
本函数用当前矩阵乘以由三个轴向缩放因子指定的缩放矩阵,并用结果矩阵替代当前矩
阵。
如果矩阵模式为GL_MODELVIEW或GL_PROJECTION,则在调用本函数之后绘制的
所有物体均被缩放。
4.glViewport:
设置视口
C语言描述
voidglViewport(GLintx,GLinty,GLsizeiwidth,GLsizeiheight);
参数
x,y指定视口矩形的左下角坐标,单位为像素。
缺省值为(0,0)。
width,height指定视口矩形的宽度和高度。
说明
本函数在窗口内设置一个区域,这个区域用于将修剪空间的坐标映射到物理窗口的坐
标。
5.glFrustum:
用当前矩阵乘以透视矩阵
65
C语言描述
voidglFrustum(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop,GLdouble
near,GLdoublefar);
参数
left,right左修剪平面和右修剪平面的坐标。
bottom,top下修剪平面和上修剪平面的坐标。
near,far近修剪平面和远修剪平面的坐标,这两个值必须都是正值。
说明
本函数创建一个透视矩阵,该矩阵生成透视投影。
假设视点位于(0,0,0),那么(left,
bottom,-near)和(right,top,-near)分别指定近修剪平面中映射到窗口左下角和右上角
的坐标,-far指定远修剪平面中映射到窗口左下角和右上角的坐标,near和far都必须为正
值,相应的矩阵如下:
本函数用当前矩阵乘以透视矩阵,并将结果矩阵替换当前矩阵。
6.glOrtho:
用当前矩阵乘以正视矩阵
C语言描述
voidglOrtho(GLdoubleleft,GLdouble