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函数