OPENGL ES中几个重要函数详细说明

glVertexPointer

voidglVertexPointer(GLintsize,

GLenumtype,

GLsizeistride,

constGLvoid*pointer)

Parameters

sizeSpecifiesthenumberofcoordinatespervertex.Mustbe2,3,or4.The

initialvalueis4.

typeSpecifiesthedatatypeofeachvertexcoordinateinthearray.Symbolic

constantsGL_BYTE,GL_SHORT,andGL_FIXED,areaccepted.However,the

initialvalueisGLFLOAT.

ThecommonprofileacceptsthesymbolicconstantGLFLOATaswell.

strideSpecifiesthebyteoffsetbetweenconsecutivevertices.Ifstrideis0,the

verticesareunderstoodtobetightlypackedinthearray.Theinitialvalue

is0.

pointerSpecifiesapointertothefirstcoordinateofthefirstvertexinthearray.

Theinitialvalueis0.

参数:

size:指定了每个顶点对应的坐标个数,只能是2,3,4中的一个,默认值是4

type:指定了数组中每个顶点坐标的数据类型,可取常量:GL_BYTE,GL_SHORT,GL_FIXED,GL_FLOAT;

stride:指定了连续顶点间的字节排列方式,如果为0,数组中的顶点就会被认为是按照紧凑方式排列的,默认值为0

pointer:制订了数组中第一个顶点的首地址,默认值为0,对于我们的android,大家可以不用去管什么地址的,一般给一个IntBuffer就可以了。

Description

glVertexPointerspecifiesthelocationanddataofanarrayofvertexcoordinates

tousewhenrendering.sizespecifiesthenumberofcoordinatespervertexandtype

thedatatypeofthecoordinates.stridespecifiesthebytestridefromonevertexto

thenextallowingverticesandattributestobepackedintoasinglearrayorstored

inseparatearrays.(Single-arraystoragemaybemoreefficientonsomeimplementations.)

Whenavertexarrayisspecified,size,type,stride,andpointeraresavedas

client-sidestate.

Ifthevertexarrayisenabled,itisusedwhenglDrawArrays,orglDrawElements

iscalled.Toenableanddisablethevertexarray,callglEnableClientState

andglDisableClientStatewiththeargumentGLVERTEXARRAY.Thevertexarray

isinitiallydisabledandisn’taccessedwhenglDrawArraysorglDrawElementsis

called.

UseglDrawArraystoconstructasequenceofprimitives(allofthesametype)

fromprespecifiedvertexandvertexattributearrays.UseglDrawElementstoconstruct

asequenceofprimitivesbyindexingverticesandvertexattributes.

Ifthevertexarrayisenabled,itisusedwhenglDrawArrays,orglDrawElements

iscalled.Toenableanddisablethevertexarray,callglEnableClientState

andglDisableClientStatewiththeargumentGL_VERTEXARRAY.Thevertexarray

isinitiallydisabledandisn’taccessedwhenglDrawArraysorglDrawElementsis

called.

UseglDrawArraystoconstructasequenceofprimitives(allofthesametype)

fromprespecifiedvertexandvertexattributearrays.UseglDrawElementstoconstruct

asequenceofprimitivesbyindexingverticesandvertexattributes

描述:

当开始render的时候,glVertexPointer用一个数组指定了每个顶点的坐标,

size指定了每个顶点的坐标个数

type指定了每个坐标的数据类型,(和尚注:注意,这里不同的数据类型含义不同,如果选择GL_FIXED,那么0x10000表示单位长度,如果选择GL_FLOAT那么1.0f表示单位度。)

stride指定了一个顶点和下一个顶点间数据的排列方式,是"单一数组"还是"分散数组",单一数组的存储方式通常是更具效率的。当一个顶点数组被指定以后,size,type,stride,pointer被存储成client-side.

当glDrawArrays或者glDrawElements被调用的时候,如果顶点数组处于可用状态,就会被使用;可以使用glEnableClientState或者glDisableClientState来激活或者禁用一个顶点数组,顶点数组默认是不可用并且是不可被glDrawArrays、glDrawElements两个函数使用的。

使用glDrawArrays函数可以根据顶点数组构建一个原始构图序列

使用glDrawElements可以根据序列化的顶点集合来创建相同的序列

Notes

glVertexPointeristypicallyimplementedontheclientside

Errors

GL_INVALID_VALUEisgeneratedifsizeisnot2,3,or4.

GL_INVALID_ENUMisgeneratediftypeisisnotanacceptedvalue.

GL_INVALID_VALUEisgeneratedifstrideisnegative.

错误:

GL_INVALID_VALUEsize不是2,3,4中的一个的时候

GL_INVALID_ENUMtype不是一个允许的值.

GL_INVALID_VALUEstride是错误的

函数名:

glDrawArrays–从数组提供原始数据

voidglDrawArrays(GLenummode,GLintfirst,GLsizeicount)

Parameters

modeSpecifieswhatkindofprimitivestorender.SymbolicconstantsGL_POINTS,GL_LINE_STRIP,GL_LINE_LOOP,GL_LINES,GL_TRIANGLE_STRIP,GL_TRIANGLE_FAN,andGL_TRIANGLESareaccepted.

firstSpecifiesthestartingindexintheenabledarrays.

countSpecifiesthenumberofindicestoberendered.

参数:

mode指定要提供的原始图形的样式,比如:GL_POINTS,GL_LINE_STRIP,GL_LINE_LOOP,GL_LINES,GL_TRIANGLE_STRIP,GL_TRIANGLE_FAN,GL_TRIANGLES

first指定了被激活的数组的索引起始点,通常为0

count取几个数,和first配合使用

Description

glDrawArraysspecifiesmultiplegeometricprimitiveswithveryfewsubroutinecalls.

Youcanprespecifyseparatearraysofvertices,normals,colors,andtexturecoordinates

andusethemtoconstructasequenceofprimitiveswithasinglecalltoglDrawArrays.

WhenglDrawArraysiscalled,itusessequentialelementsfromeachenabled

arraytoconstructasequenceofgeometricprimitives,beginningwithelement

first.modespecifieswhatkindofprimitivesareconstructed,andhowthearrayelements

constructthoseprimitives.IfGL_VERTEX_ARRAYisnotenabled,nogeometric

primitivesaregenerated.

VertexattributesthataremodifiedbyglDrawArrayshaveanunspecifiedvalue

afterglDrawArraysreturns.Forexample,ifGL_COLOR_ARRAYisenabled,thevalueof

thecurrentcolorisundefinedafterglDrawArraysexecutes.Attributesthataren’t

modifiedremainwelldefined.

描述:

glDrawArrays提供了多种基本几何样式的绘制,你可以对各种数组,比如说顶点、颜色、材质的坐标进行分割(和尚注:通过first和count参数),并且使用这些分割出来的坐标来构造一个显示队列。

当glDrawArrays被调用的时候,它会从first参数开始,按照mode指定的样式,按照顺序使用被激活的数组中的每个元素去构造一个由基本几何单元构成的队列,如果GL_VERTEX_ARRAY没有处于激活状态,不会有任何几何单元被创建。

在glDrawArrays被返回后,被这个函数编辑的顶点的属性将成为一个不确定的值,例如:glDrawArrays函数被调用以后,当前颜色将会变成一个未定义的值。没有被函数引用的顶点属性会保留与原本的属性。(和尚注:很绕口,关于这一小段的翻译,我反复修改了很多遍,意思其实很简单,如果一个顶点数组被glDrawArrays使用,那么使用后这些顶点决定的那个几何图形的属性,比如颜色,就会丢失,不会影响到下一个glDrawArrays的绘制,因此当你要重新用glDrawArrays绘制一个顶点集合的话,就要重新用glColor4f来设定颜色)

Errors

GL_INVALID_ENUMisgeneratedifmodeisnotanacceptedvalue.

GL_INVALID_VALUEisgeneratedifcountisnegative.

错误:

GL_INVALID_ENUMmode不是一个被允许的值

GL_INVALID_VALUEcount不合法

Name

glTranslatef,glTranslatex–multiplythecurrentmatrixbyatranslationmatrix

CSpecification

voidglTranslatef(GLfloatx,GLfloaty,GLfloatz)

voidglTranslatex(GLfixedx,GLfixedy,GLfixedz)

名称:

glTranslatef,glTranslatex在一个副本(和尚:不知道翻译成副本合适不合适)模型上确定一个基于某个增量的新原点(和尚注:自己明白,要想写出合适的译文真的好难)

voidglTranslatef(GLfloatx,GLfloaty,GLfloatz)

voidglTranslatex(GLfixedx,GLfixedy,GLfixedz)

Parameters

x,y,zSpecifythex,y,andzcoordinatesofatranslationvector.

参数:

x,y,z指定了一个基于某个方向的x,y,z坐标

Description

glTranslateproducesatranslationby(x,y,z).Thecurrentmatrix(seeglMatrixMode)

ismultipliedbythistranslationmatrix,withtheproductreplacingthe

currentmatrix,asifglMultMatrixwerecalledwiththefollowingmatrixforits

argument:

100x

010y

001z

0001

IfthematrixmodeiseitherGL_MODELVIEWorGL_PROJECTION,allobjectsdrawnafter

acalltoglTranslatearetranslated.

UseglPushMatrixandglPopMatrixtosaveandrestoretheuntranslatedcoordinate

system.

描述:

glTranslate根据x,y,z生成了一个副本模型,当前模型是一个基于此模型的增量模型,glMultMatrix被调用的时候用以下模型来做参数:

100x

010y

001z

0001

如果模型模式是eitherGL_MODELVIEW或者GL_PROJECTION,所有的对象都会在glTranslate被调用以后绘制

使用glPushMatrix和glPopMatrix来保存和恢复未被副本化的坐标系统

(和尚注:每一个层都是基于自己的坐标系统的,关于x,y,z的含义,参看以下说明:

OpenGL屏幕中心的坐标值是X和Y轴上的0.0f点。

中心左面的坐标值是负值,右面是正值。

移向屏幕顶端是正值,移向屏幕底端是负值。

移入屏幕深处是负值,移出屏幕则是正值。

)。

Name

glClear–clearbufferstopresetvalues

CSpecification

voidglClear(GLbitfieldmask)

名称

glClear–为重设数据清空缓冲区

voidglClear(GLbitfieldmask)

Parameters

maskBitwiseORofmasksthatindicatethebufferstobecleared.

ValidmasksareGL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BIT,andGL_STENCIL_BUFFER_BIT.

参数:

掩码:用OR连接起来的掩码,这些掩码决定了哪些缓冲区将被清除,可用的掩码有:

GL_COLOR_BUFFER_BIT

GL_DEPTH_BUFFER_BIT

GL_STENCIL_BUFFER_BIT

Description

glClearsetsthebitplaneareaofthewindowtovaluespreviouslyselectedbygl-

ClearColor,glClearDepth,andglClearStencil.

Thepixelownershiptest,thescissortest,dithering,andthecolorbuffermasks

affecttheoperationofglClear.Thescissorboxboundstheclearedregion.Alpha

function,blendfunction,logicaloperation,stenciling,texturemapping,anddepthbuffering

areignoredbyglClear.

glCleartakesasingleargumentthatisthebitwiseORofseveralvaluesindicating

whichbufferistobecleared.

Thevaluesareasfollows:

GLCOLORBUFFERBIT

Indicatesthecolorbuffer.

GLDEPTHBUFFERBIT

Indicatesthedepthbuffer.

GLSTENCILBUFFERBIT

Indicatesthestencilbuffer.

Thevaluetowhicheachbufferiscleareddependsonthesettingoftheclearvalue

forthatbuffer.

描述:

glClear把窗口的bitplane区域的值设置成您设置的ClearColor,glClearDepth,glClearStencil

ownership测试、切图测试、抖动、颜色缓冲掩码受glClear的影响(空白区域的盒子跳动)Alpha通道函数,混合函数,逻辑操作,模板操作,纹理材质操作,深度缓冲区操作将被glClear忽略。

glClear的参数用几个OR连接3个可选项来制定要清楚哪些缓冲区

关于可选项的说明:

GLCOLORBUFFERBIT

颜色缓冲区

GLDEPTHBUFFERBIT

深度缓冲区

GLSTENCILBUFFERBIT

模板缓冲区

Name

glMatrixMode–specifywhichmatrixisthecurrentmatrix

CSpecification

voidglMatrixMode(GLenummode)

名称

glMatrixMode–选择当前模型

Parameters

modeSpecifieswhichmatrixstackisthetargetforsubsequentmatrixoperations.

Threevaluesareaccepted:GL_MODELVIEW,GL_PROJECTION,and

GL_TEXTURE.TheinitialvalueisGL_MODELVIEW.

参数:

mode指定随后的模型操作的目标是哪一个模型堆栈,可选以下三个值

GL_MODELVIEW

GL_PROJECTION

GL_TEXTURE

默认值是GL_MODELVIEW

Description

glMatrixModesetsthecurrentmatrixmode.modecanassumeoneoffourvalues:

GLMODELVIEW

Appliessubsequentmatrixoperationstothemodelviewmatrixstack.

GLPROJECTION

Appliessubsequentmatrixoperationstotheprojectionmatrixstack.

GLTEXTURE

Appliessubsequentmatrixoperationstothetexturematrixstack.

描述:

glMatrixMode函数设定当前的模型模式,mode可以选择三个中的一个:

GL_MODELVIEW

把随后的模型操作应用到modelview的模型堆栈上

GL_PROJECTION

把随后的模型操作应用到projection的模型堆栈上

GL_TEXTURE

把随后的模型操作应用到texture的模型堆栈上

Errors

GL_INVALID_ENUMisgeneratedifmodeisnotanacceptedvalue.

错误:

GL_INVALID_ENUMmode选择了一个错误的值

SeeAlso

glLoadMatrix,glPushMatrix

参看:

glLoadMatrix,glPushMatrix函数

相关推荐