现在的位置: 首页 > 综合 > 正文

OpenGL函数详解

2014年09月05日 ⁄ 综合 ⁄ 共 32056字 ⁄ 字号 评论关闭



一.OPENGL函数详解

glActiveTexture

publicvoid glActiveTexture(int texture)

功能

选择服务端活动的纹理单元

详细glActiveTexture选择哪一个纹理在后面的纹理状态改变时有效,纹理单元的数量是依据该纹理单元所被支持的具体实现。在OpenGL ES 1.0中至少一个,在OpenGL ES 1.1中至少两个。

注意

常常会这样GL_TEXTUREi = GL_TEXTURE0+ i

一个纹理单元由纹理可用状态、纹理矩阵堆、纹理环境以及当前渲染纹理组成。修改其中任一成分均会改变当前活动纹理单元。

点阵是客户端GL资源,它通过glClientActiveTexture程序获取。

错误

0 <= i <GL_MAX_TEXTURE_UNITS 时,如果纹理不是一个GL_TEXTUREi ,GL_INVALID_ENUM(错误枚举)会产生。

相关获取

利用glGetIntegerv处理GL_MAX_TEXTURE_UNITS

参数

texture——指定哪一个纹理单元为活动。必须是一个GL_TEXTUREi,其中0 <= i < GL_MAX_TEXTURE_UNITS,初始值为GL_TEXTURE0

glAlphaFunc

publicvoid glAlphaFunc(int func,float ref)

功能

指定Alpha测试功能。

详细

Alpha测试依据结果舍弃片段,该结果由引入片段的alpha值与参照值常量进行比较得到。glAlphaFunc指定参照值与比较方法。只有当alpha测试有效时,比较才有用。使alpha测试有效或无效可以利用glEnableglDisable方法,它们都是以GL_ALPHA_TEST为参数的,alpha测试初始为无效。

funcref指明像素被绘出的条件。引入的alpha值通过func指明的方法与ref指明的参照值进行比较。如果该值通过比较并且通过随后的模型测试与深度缓冲区测试,则将引入的片段绘出。如果该值未通过比较,则该像素区的帧缓冲区不会发生任何变化。比较方法如下:

GL_NEVER:不会通过。

GL_LESS:如果引入的alpha值比参照值小则通过。

GL_EQUAL:如果引入的alpha值与参照值相等则通过。

GL_LEQUAL:如果引入的alpha值小于或等于参照值则通过。

GL_GREATER:如果引入的alpha值比参照值大则通过。

GL_NOTEQUAL:如果引入的alpha值与参照值不相等则通过。

GL_GEQUAL:如果引入的alpha值大于或等于参照值则通过。

GL_ALWAYS:总是通过。(初始设定)

对所有的像素写入操作进行glAlphaFunc操作,包括那些从点、线、多边形的扫描转换得到的结果。glAlphaFuncglClear无影响。

错误

func不是被允许的值会产生GL_INVALID_ENUM(错误枚举)。

参数

func——指明alpha比较方法,被允许的符合常量有GL_NEVER, GL_LESS,GL_EQUAL, GL_LEQUAL, GL_GREATER, GL_NOTEQUAL, GL_GEQUAL, 和 GL_ALWAYS。初始值为GL_ALWAYS

ref——指明与引入的alpha值比较的参照值,这个值的属于区间[0, 1],初始值为0

glAlphaFuncx

publicvoid glAlphaFuncx(int func,int ref)

功能:glAlphaFunc的修正版本,仅仅参数类型由float ref变为int ref

glBindTexture

publicvoid glBindTexture(int target,int texture)

功能

将一个已命名的纹理与一个纹理目标绑定。

详细glBindTexture可以让你创建或使用一个已命名的纹理,调用glBindTexture方法并将target设置为GL_TEXTURE_2D,将texture设置为你想要绑定的新纹理的名称。当一个纹理与目标绑定时,该目标之前的绑定关系将自动被释放。

纹理的名称是一个无符号的整数。在每个纹理目标中,0被保留用以代表默认纹理。纹理名称与相应的纹理内容被保留在当前GL rendering上下文的共享的纹理对象空间中(参照eglCreateContext

你可以使用glGenTextures来设置一个新的纹理名称。

当一个纹理被绑定时,对于其目标的GL操作将作用于该绑定的纹理之上。如果被绑定的纹理的目标的维度的纹理映射是活动的,则绑定的纹理被使用。实际上,纹理目标成为当前被绑定纹理的别名,并且纹理名称0指的是在初始化时被绑定的默认纹理。

通过glBindTexture绑定的纹理仍旧是活动的直到同一个目标被其他纹理绑定或者该绑定纹理通过glDeleteTextures删除为止。

一旦创建,一个已命名的纹理可能经常需要与维度匹配的目标多次绑定。这样利用glBindTexture来将一个已命名的纹理与一个纹理目标绑定,比利用glTexImage2D进行纹理图像的重载要快的多。

错误

当目标不是一个被允许的值时,会产生GL_INVALID_ENUM(错误枚举)。

参数

target——指明纹理要绑定的目标,必须是GL_TEXTURE_2D

texture——指明纹理的名称。

glBlendFunc

publicvoid glBlendFunc(int sfactor,int dfactor)

功能

指明像素算法

详细

像素可以通过函数操作后被绘出,该函数的功能是将引入的值与颜色缓冲中已有的值混合。使用glEnable方法与glDisable方法以GL_BLEND为参数,决定是否开启混合功能,该功能初始为关闭的。

当混合功能开启时glBlendFunc定义混合功能的操作。sfactor指明十一中方法中的哪一种用来衡量源颜色要素,dfactor指明十种方法中的哪一种用来衡量目的颜色要素。十一种可能的方法将在下面进行介绍。每一种方法定义了四个衡量元素,分别是红、绿、蓝和alpha

在后面的内容中,源与目的颜色要素被指为(Rs, Gs, Bs, As)(Rd, Gd, Bd, Ad),它们的值为0(kR, kG, kB, kA)之间的整数,其中kc = 2mc – 1,并且(mR, mG, mB, mA)是红、绿、蓝和alpha位平面的数量。

源和目标比例系数由(sR, sG, sB, sA)(dR, dG, dB, dA)指定。比例系数用(fR, fG, fB, fA)表示,代表既不是源也不是目标因素,所有比例系数属于区间[0,1]

参数                    (fR,fG, fB, fA)

 

GL_ZERO                 (0, 0, 0, 0)

GL_ONE                  (1, 1, 1, 1)

GL_SRC_COLOR            (Rs/kR, Gs/kG, Bs/kB, As/kA )

GL_ONE_MINUS_SRC_COLOR  (1, 1, 1, 1) - (Rs/kR, Gs/kG, Bs/kB, As/kA)

GL_DST_COLOR            (Rd/kR, Gd/kG, Bd/kB, Ad/kA )

GL_ONE_MINUS_DST_COLOR  (1, 1, 1, 1) - (Rd/kR, Gd/kG, Bd/kB, Ad/kA)GL_SRC_ALPHA            (As/kA, As/kA,As/kA, As/kA ) GL_ONE_MINUS_SRC_ALPHA (1, 1, 1, 1) - (As/kA, As/kA, As/kA, As/kA) GL_DST_ALPHA            (Ad/kA, Ad/kA, Ad/kA, Ad/kA )GL_ONE_MINUS_DST_ALPHA  (1, 1, 1, 1) -(Ad/kA, Ad/kA, Ad/kA, Ad/kA) GL_SRC_ALPHA_SATURATE   (i, i, i, 1)

i= min(As, kA - Ad) / kA

为了确定像素的混合值,系统利用下列等式。

Rd= min( kR, Rs sR + Rd dR )

Gd= min( kG, Gs sG + Gd dG )

Bd= min( kB, Bs sB + Bd dB )

Ad= min( kA, As sA + Ad dA )

尽管从表面上看混合算法并没有指明上述等式的精度,因为混合操作是采用不精确的整型颜色值。然而应当等于1的混合因素要被确保没有修改它的被乘数,并且一个等于0的混合因素要降低它的被乘数至0。举一个例子,当sfactorGL_SRC_ALPHAdfactor GL_ONE_MINUS_SRC_ALPHA并且As等于kA时,等式进行简单替换。

Rd= Rs

Gd= Gs

Bd= Bs

Ad= As

对于所有像素元素的写入操作进行glBlendFunc操作时,包括对于点、线、多边形的扫描转换,都不影响glClear方法。

举例

为了渲染物体从远到近排列的效果,最好应用glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)处理透明度。请注意这个透明度计算不要求存在颜色缓冲区中的alpha位面数。

glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)对于渲染抗锯齿的点和线也很有效。

注意

引入的(源)alpha被认为是不透明的,范围是1.0 (kA),表明完全不透明,而0表明完全透明。

错误

sfactordfactor为不允许的值时,产生GL_INVALID_ENUM(错误枚举)。

参数

sfactor——指明源图元的红、绿、蓝、alpha的混合比例是怎样计算的。允许的符号符号常量有:GL_ZERO, GL_ONE,GL_SRC_COLOR (1.1), GL_ONE_MINUS_SRC_COLOR (1.1), 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——指明目图元的红、绿、蓝、alpha的混合比例是怎样计算的。允许的符号符号常量有:GL_ZERO, GL_ONE,GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_DST_COLOR (1.1),GL_ONE_MINUS_DST_COLOR (1.1), GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, 和 GL_ONE_MINUS_DST_ALPHA,初始值为GL_ZERO

网络解释

第一个参数指出源图元的alpha的取值计算方法,第二个参数指出目标处的alpha的计算方法。

两个参数的取值都可以是如下常量之一:

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, and GL_SRC_ALPHA_SATURATE

比如GL_ZERO表示alpha取值为0,GL_ONE表示1,GL_DST_COLOR表示取目标区域的颜色值,GL_SRC_ALPHA表示取源区域的alpha值等等。例如:

glBlendFunc(GL_SRC_ALPHA, GL_ONE);

表示把渲染的图像叠加到目标区域,也就是说源的每一个像素的alpha都等于自己的alpha,目标的每一个像素的alpha等于1。这样叠加次数越多,叠加的图元的alpha越高,得到的结果就越亮。因此这种融合用于表达光亮效果。

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

表示把渲染的图像融合到目标区域。也就是说源的每一个像素的alpha都等于自己的alpha,目标的每一个像素的alpha等于1减去该位置源像素的alpha。 因此不论叠加多少次,亮度是不变的。

glBindTexture

void glBindTexture(GLenum target, GLuint texture );

函数参数的含义:

target —— 纹理被绑定的目标,它只能取值GL_TEXTURE_1DGL_TEXTURE_2DGL_TEXTURE_3D或者GL_TEXTURE_CUBE_MAP

texture —— 纹理的名称,并且,该纹理的名称在当前的应用中不能被再次使用。

glBindTexture可以让你创建或使用一个已命名的纹理,调用glBindTexture方法,将target设置为GL_TEXTURE_1DGL_TEXTURE_2DGL_TEXTURE_3D或者GL_TEXTURE_CUBE_MAP,并将texture设置为你想要绑定的新纹理的名称,即可将纹理名绑定至当前活动纹理单元目标。当一个纹理与目标绑定时,该目标之前的绑定关系将自动被打破。纹理的名称是一个无符号的整数。在每个纹理目标中,0被保留用以代表默认纹理。纹理名称与相应的纹理内容位于当前GL rendering上下文的共享对象空间中。

 

glClear

publicvoid glClear(int mask)

功能

清理缓冲区,并设置为预设值。

详细

glClear设置窗口位面区的值,该值由glClearColor, glClearDepth 和 glClearStencil等方法选择出。

像素所有权测试、裁剪测试、抖动、颜色缓冲区掩饰将影响glClear操作,裁剪盒绑定清理区域。Alpha功能、混合功能、逻辑操作、建模、纹理映射以及深度缓冲区会被glClear操作忽略。

glClear可以使参数为多个值按位与后的结果,以表明那个缓冲区需要清理。

有如下值:

GL_COLOR_BUFFER_BIT:表明颜色缓冲区。

GL_DEPTH_BUFFER_BIT:表明深度缓冲区。

GL_STENCIL_BUFFER_BIT:表明模型缓冲区。

注意

如果缓冲区并没有呈现出来,则glClear对指向的缓冲区无效果。

错误

如果使用任一非已定义的值将产生GL_INVALID_VALUE(错误枚举)。

参数

mask——允许的值有GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT, and GL_STENCIL_BUFFER_BIT

网络解释

glClear()语句的作用是用当前缓冲区清除值,也就是glClearColor或者glClearDepth等函数所指定的值来清除指定的缓冲区。比如:

glClearColor0.00.00.00.0;

glClearGL_COLOR_BUFFER_BIT;

第一条语句表示清除颜色设为黑色,第二条语句表示把整个窗口清除为当 前的清除颜色,glClear()的唯一参数表示需要被清除的缓冲区。

glClearColor

publicvoid glClearColor(float red,float green,float blue,float alpha)

功能:指定颜色缓冲区的清理值

详细glClearColor指明红、绿、蓝、alpha的值并通过glClear来清理颜色缓冲区,被glClearColor指明的值属于区间[0, 1]

参数

red——指明颜色缓冲区被清理时红色的值,初始值为0

green——指明颜色缓冲区被清理时绿色的值,初始值为0

blue——指明颜色缓冲区被清理时蓝色的值,初始值为0

alpha——指明颜色缓冲区被清理时alpha的值,初始值为0

glClearColorx

publicvoid glClearColorx(int red,int green,int blue,int alpha)

功能glClearColor的修正方法。

glClearDepthf

publicvoid glClearDepthf(float depth)

功能:指明深度缓冲区的清理值。

详细glClearDepth方法指明深度值,并通过glClear来清理深度缓冲区。glClearDepth指明的值属于区间[0, 1]

参数

depth——指明深度缓冲区被清理时的深度值,初始值为1

glClearDepthx

publicvoid glClearDepthx(int depth)

功能glClearDepth的修正方法。

glClearStencil

publicvoid glClearStencil(int s)

功能:指明模板缓冲区的清理值。

详细glClearStencil指明glClear清理模板缓冲区时的索引,s2m-1,其中m是模板缓冲区中的bit数。

相关获取

glGetIntegerv方法,并以GL_STENCIL_BITS为参数。

参数

s——指明glClear清理模板缓冲区时的索引,初始值为0

glClientActiveTexture

publicvoid glClientActiveTexture(int texture)

功能:选择客户端活动纹理单元。

glClientActiveTexture选择顶点矩阵,客户状态参数由glTexCoordPointer方法修改。可用性由glEnableClientStateglDisableClientState决定,参数为GL_TEXTURE_COORD_ARRAY

注意

总有GL_TEXTUREi = GL_TEXTURE0 + i

错误

如果texture不是一个GL_TEXTUREi这里0 <= i< GL_MAX_TEXTURE_UNITS,则产生一个GL_INVALID_ENUM(错误矩阵)。

相关获取

glGetIntegerv方法,并以GL_MAX_TEXTURE_UNITS为参数。

参数

texture——指定哪一个纹理单元为活动。纹理个数至少一个(对于1.0)或两个(对于1.1)纹理必须是一个GL_TEXTUREi,其中0 <= i < GL_MAX_TEXTURE_UNITS,初始值为GL_TEXTURE0

glColor4f

publicvoid glColor4f(float red,float green,float blue,float alpha)

功能:设置当前颜色。

详细GL储存当前四值的RGBA颜色,glColor可以设置新的四值的RGBA颜色。

当前颜色值被储存为整型或浮点型,如果值被储存为浮点型,尾数和指数的大小未指明。

在当前颜色更新之前整型与浮点型都不属于区间[0, 1],然而颜色元素在修改或写入颜色缓冲区前会属于该区间。

参数

red——为当前颜色指明一个新的红色值,初始值为1

green——为当前颜色指明一个新的绿色值,初始值为1

blue——为当前颜色指明一个新的蓝色值,初始值为1

alpha——为当前颜色指明一个新的alpha值,初始值为1

glColor4x

publicvoid glColor4x(int red,int green,int blue,int alpha)

功能glColor4f的修正方法。

glColorMask

publicvoid glColorMask(boolean red,boolean green,boolean blue,boolean alpha)

功能:开启与禁止颜色元素的写入操作。

详细glColorMask指明单独的颜色元素是否可以被写入。举一个例子,如果redfalse,则颜色缓冲区中的任何像素的颜色的红色元素将不会发生变化,忽略企图的绘画操作,包括glClear

不可以控制元素单个位的改变,只能控制整个元素是否可以改变。

参数

red——指明红色元素是否可以写入颜色缓冲区,初始值为ture,表明可以写入。

green——指明绿色元素是否可以写入颜色缓冲区,初始值为ture,表明可以写入。

blue——指明蓝色元素是否可以写入颜色缓冲区,初始值为ture,表明可以写入。

alpha——指明alpha元素是否可以写入颜色缓冲区,初始值为ture,表明可以写入。

glColorPointer

publicvoid glColorPointer(int size,int type,int stride,Buffer pointer)

功能

定义一个颜色矩阵。

详细

glColorPointer指明渲染时使用的颜色矩阵。size指明每个颜色的元素数量,必须为4type指明每个颜色元素的数据类型,stride指明从一个颜色到下一个允许的顶点的字节增幅,并且属性值被挤入简单矩阵或存储在单独的矩阵中(简单矩阵存储可能在一些版本中更有效率)。

当一个颜色矩阵被指定,size, type, stridepointer将被保存在客户端状态。

如果颜色矩阵被启用,当使用glDrawArrays方法或glDrawElements方法时被调用。利用glEnableClientState方法与glDisableClientState方法以GL_COLOR_ARRAY为参数来启用和禁止颜色矩阵,颜色矩阵初始值为禁用,不允许glDrawArrays方法和glDrawElements方法调用。

使用glDrawArrays方法依据事先指明的顶点和顶点矩阵构建一系列图元(都是同种类型的),使用glDrawElements方法依据顶点索引和顶点属性构建一系列图元。

注意

glColorPointer在客户端应用。

错误

size不是4时将产生GL_INVALID_VALUE

type不是一个允许的值时将产生GL_INVALID_ENUM

stride为负数时将产生GL_INVALID_VALUE

pointer参数必须是直接缓存并且类型与type指定的类型相同。

参数

size——指明每个颜色的元素数量,必须为4

type——指明每个矩阵中颜色元素的数据类型,允许的符号常量有GL_UNSIGNED_BYTE, GL_FIXEDGL_FLOAT,初始值为GL_FLOAT

stride——指明连续的点之间的位偏移,如果stride0时,颜色被紧密挤入矩阵,初始值为0

pointer——指明包含颜色的缓冲区,如果pointernull,则为设置缓冲区。

抛出

java.lang.IllegalStateException——如果是OpenGL ES 1.1并且VBOsVertexBuffer Object即顶点缓冲对象)启用。

java.lang.IllegalArgumentException——如果pointer不是直接缓存。

网络解释

顶点数组的概念如此的简单,如其名,就是将原来由一系列的glVertex*指定的顶点放在一个数组中,(其意思就是顶点数据组成的数组)由顶点数组处理函数一次性指定。事实上,不仅如此,其一次性指定的不仅仅是数组,还可以是其他系列的东西,比如表面发现,RGBA颜色,辅助颜色等。

glCompressedTexImage2D

publicvoid glCompressedTexImage2D(int target,

                                  int level,

                                  int internalformat,

                                  int width,

                                  int height,

                                  int border,

                                   int imageSize,

                                  Buffer data)

功能

指明一个二维的压缩的纹理图像。

详细

glCompressedTexImage2D定义一个压缩格式的二维纹理图像。

调色板纹理是被支持的压缩格式,一个压缩图像的布局是一个调色板,调色板由用以查找调色板的多层级数的纹理引用决定。调色板的格式可以为R5_G6_B5, RGBA4, RGB5_A1, RGB8, 或者RGBA8,纹理引用的分辨率可以为4位或8位。结果,调色板条目不是16就是256。如果level0,数据中仅有一个纹理引用的层级数会被描述。否则,level为负值指明描述纹理直到哪一个层级数。可能会有剩余为最低分辨率填补的半个字节会被忽略。

注意

glPixelStore对于压缩纹理图像无影响。

glCompressedTexImage2D指明当前绑定纹理的二维纹理以及当前纹理单元,分别通过glBindTexture方法和glActiveTexture方法。

错误

如果target不是GL_TEXTURE_2D,将会产生GL_INVALID_ENUM(错误枚举)。

如果level大于0或者绝对值大于log_2(max),这里的maxGL_MAX_TEXTURE_SIZE的返回值。则产生GL_INVALID_VALUE

(1.0) internalformat不是允许的符号常量,将产生GL_INVALID_VALUE(错误值)。

(1.1) internalformat不是允许的符号常量,将产生GL_INVALID_ENUM(错误枚举)。

如果width或者height小于0或大于2 + GL_MAX_TEXTURE_SIZE,或者其中一个不能表示为2^k + 2*borderk为整数,将产生GL_INVALID_VALUE(错误值)。

如果border不是0则产生GL_INVALID_VALUE(错误值)。

如果图像不符合格式、尺寸及压缩图像的内容,则产生GL_INVALID_VALUE(错误值)。

参数

target——指明目标纹理,必须为GL_TEXTURE_2D

level——指明具体数值的等级数,必须小于等于00表明只有一种层级数,负数表明有多少被数据描述的层级数。

internalformat——指明纹理中的颜色元素,被允许的符号常量有:GL_PALETTE4_RGB8_OES, GL_PALETTE4_RGBA8_OES, GL_PALETTE4_R5_G6_B5_OES,GL_PALETTE4_RGBA4_OES, GL_PALETTE4_RGB5_A1_OES, GL_PALETTE8_RGB8_OES,GL_PALETTE8_RGBA8_OES, GL_PALETTE8_R5_G6_B5_OES, GL_PALETTE8_RGBA4_OES, andGL_PALETTE8_RGB5_A1_OES.

width——指明纹理图像的宽度,必须是2^k + 2*borderk为整数,所有版本支持的纹理图像至少时64像素宽。

height——指明纹理图像的高度,必须是2^k + 2*borderk为整数,所有版本支持的纹理图像至少时64像素高。

border——指明边界宽度,必须为0

imageSize——指明压缩纹理图像的大小,单位为byte

data——指明一个包含压缩纹理图像数据的缓冲区。

抛出

java.lang.IllegalArgumentException——如果data为空。

java.lang.IllegalArgumentException——如果data.remaining()小于imageSize

网络解释

功能使用压缩过的纹理图像定义一个二维纹理.
level: 提供多种分辨率的纹理如纹理只有一种分辨率,level则设置为0.
internalformat: 纹理图像的压缩格式必须是当前OpenGL实现支持的压缩格式否则导致GL_INVALID_ENUM错误.
width, height, depth: 指定二维纹理图像的大小参数值的必须为 2m次方 + 2b.
border: b的值必须是0

mipmap: 多个明细等级(即上面的层级数)

mipmap: 一系列预先通过滤波生成的分辨率递减的纹理图.
功能使用mipmap技术时, OpenGL根据物体的大小(以像素为单位)自动确定应使用哪个纹理图像.
方法必须提供从最大尺寸到1 x 1大小为2的幂的各种纹理图.例如最大分辨率为64 X 16, 就必须提供32X8, 16X4, 8X2, 4X1, 2X1, 1X1的纹理
原理小的纹理图通常是通过对最大的纹理图进行滤波处理得到的,每个纹素的值是前一个纹理图中4个相应纹素的平均值.
使用用函数glTexImage2D()指定使用哪些纹理将参数level, width, heightimage设置成不同的值.
level的示例例如最大分辨率为64 X 16,level0表示64X16,level1表示32X8, 以此类推(有些问题)

glCompressedTexSubImage2D

publicvoid glCompressedTexSubImage2D(int target,

                                     int level,

                                     int xoffset,

                                     int yoffset,

                                     int width,

                                     int height,

                                     int format,

                                     int imageSize,

                                     Buffer data)

功能

指明二维压缩纹理子图。

详细

glCompressedTexSubImage2D在已存在的二维压缩图像的子区域重新定义纹理子图。子图将替换已存在纹理图像的子区域。范围是x方向从xoffsetxoffset+ width – 1y方向从yoffsetyoffset + height – 1。宽、高都为0不是错误,但没有意义。

现在没有支持该方法的压缩格式。

注意

glPixelStore对于压缩纹理图像无效果。

glCompressedTexImage2D指明当前绑定纹理的二维纹理以及当前纹理单元,分别通过glBindTexture方法和glActiveTexture方法。

错误

如果target不是GL_TEXTURE_2D,将会产生GL_INVALID_ENUM(错误枚举)。

如果纹理矩阵没有被之前的glCompressedTexImage2D操作定义则产生GL_INVALID_OPERATION

如果level小于0或者绝对值大于log_2(max),这里的maxGL_MAX_TEXTURE_SIZE的返回值。则产生GL_INVALID_VALUE

如果xoffset < -b, xoffset +width > (w - b), yoffset < -b, or yoffset + height > (hb),这里w纹理的宽度,h是纹理的高度,b是被修改的纹理图像的边界,则产生GL_INVALID_VALUE。注意h包含2倍的边界宽。

如果宽、高小于0则产生GL_INVALID_VALUE

如果type不是类型常量则产生GL_INVALID_ENUM

如果typeGL_UNSIGNED_SHORT_5_6_5并且format不是GL_RGB则产生GL_INVALID_OPERATION

如果typeGL_UNSIGNED_SHORT_4_4_4_4GL_UNSIGNED_SHORT_5_5_5_1并且format不是GL_RGB则产生GL_INVALID_OPERATION

如果不是上述的情形则产生GL_INVALID_OPERATION

相关获取:

利用glGetIntegerv方法,参数为GL_MAX_TEXTURE_SIZE

参数

target——指明目标纹理,必须是GL_TEXTURE_2D

level——指明层级数。

xoffset——指明在纹理矩阵中在X方向上的偏移量。

yoffset——指明在纹理矩阵中在Y方向上的偏移量。

width——指明纹理子图的宽。

height——指明纹理子图的高。

format——指明像素数据的格式,现在没有支持的格式。

imageSize——指明压缩图像的大小,以byte为单位。

data——指明包含压缩纹理图像的缓冲区。

抛出

java.lang.IllegalArgumentException——如果data为空。

java.lang.IllegalArgumentException——如果data.remaining()小于imageSize

网络解释

功能用一个二维纹理图像替换当前二维纹理图像中的一个(矩形)区域.
target:取值与函数glCopyTexImage2D()中相同.
level, format, type: levelmipmap明细等级. formattype描述了纹理图像数据的格式和数据类型.
子图像受函数glPixelStore*()glPixelTransfer*()设置的模式以及其他像素转移操作的影响.
xoffset, yoffset: 要替换的子区域左下角相对于当前纹理左下角的位置.
width, height: 要替换的子区域的宽度和高度.
texels: 子图像的纹理数据.

glCopyTexImage2D

publicvoid glCopyTexImage2D(int target,

                             int level,

                            int internalformat,

                             int x,

                             int y,

                             int width,

                             int height,

                             int border)

功能

指明一个像素从颜色缓冲区获得的二维纹理图像。

详细

glCopyTexImage2D定义一个像素从颜色缓冲区获得的二维纹理图像。

获取纹理数据的矩形,xy代表矩形的左下角,宽为width + 2*border,高为height of height +2*border,分辨率为level指明的分辨率,internalformat指明纹理的颜色元素。

每一个被读取的像素的红、绿、蓝、alpha元素被转换为未指明精度的内部整型或浮点型格式。转换机构将元素最大值映射为1.0,元素值为0时映射为0.0。然后值再被转换为纹理内部格式并储存在像素矩阵中。

必须事先确定内部格式以使颜色缓冲区元素在转换时进行处理。但新的颜色元素不能添加。举一个例子,一个RGB颜色缓冲区可以被用来创建一个LUMINANCERGB纹理,不能是ALPHALUMINANCE_ALPHA或者RGBA纹理。

像素排列时,下面的xy坐标与纹理的下面的st坐标相对应。

如果指明的颜色缓冲区矩形位于当前渲染的窗口的外面,则那些获取的值是未定义的。

注意

一个宽、高均为0的图像表示无纹理。

错误

如果target不是GL_TEXTURE_2D,将会产生GL_INVALID_ENUM(错误枚举)。

如果internalformat不与颜色缓冲区格式相匹配,将会产生GL_INVALID_OPERATION

如果level小于0或者绝对值大于log_2(max),这里的maxGL_MAX_TEXTURE_SIZE的返回值。则产生GL_INVALID_VALUE

如果宽、高小于0或大于GL_MAX_TEXTURE_SIZE或不满足2^k + 2*borderk为整数,将产生GL_INVALID_VALUE

如果border不是0,将产生GL_INVALID_VALUE

(1.0) internalformat不是允许的符号常量,将产生GL_INVALID_VALUE(错误值)。

(1.1) internalformat不是允许的符号常量,将产生GL_INVALID_ENUM(错误枚举)。

相关获取

glGetIntegerv方法,参数为GL_MAX_TEXTURE_SIZE

参数

target——指明目标纹理,必须为GL_TEXTURE_2D

level——指明详细层数,level 0是基本图像levellevel n是第n层级数压缩图像。

internalformat——指明图像的颜色元素,允许的符号常量有GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RGB以及GL_RGBA

x——复制矩形的左下角x坐标。

y——复制矩形的左下角y坐标。

width——指明纹理图像宽度,必须是或者 2^n + 2*bordern为整数。

height——指明纹理图像高度,必须是或者 2^n + 2*bordern为整数。

border——指明边界宽度。必须为0

网络解释

功能:复制帧缓存为纹理数据
target: 必须为常量GL_TEXTURE_2D
level, internalFormat, border: 同函数glTexImage2D()
x,y: 屏幕坐标的左下点
width, height: 矩形的宽和高.

glCopyTexSubImage2D

publicvoid glCopyTexSubImage2D(int target,

                                int level,

                                int xoffset,

                               int yoffset,

                                int x,

                                int y,

                                int width,

                               int height)

功能:指明一个像素从颜色缓冲区获得的二维纹理图像子图。

详细:glCopyTexSubImage2D

glCullFace

public void glCullFace(int mode)

功能

剔除指定面mode不被绘制出来,mode = GL_FRONT则有glFrontFace()指定的正面不会被绘制出来,mode = GL_BACK,则glFrontFace指定的背面不被绘制出来

:glFrontFace(GL10.GL_CCW)选定逆时针(默认)绘制为正面,则glCullFace(GL10.GL_FRONT)会使得正面图形不被绘制出来,只可以绘制出背面。

详细

glCullFace指明多边形的正面或反面是否被绘制(当mode被指明时)。开启或禁止拣选功能,调用glEnable方法和glDisable方法并以GL_CULL_FACE为参数。背面裁剪功能初始值为禁止。

glFrontFace指明表示正面的绘制方向,默认逆时针

注意

如果modeGL_FRONT_AND_BACK,多边形不会被绘出,但是其他图元像点、线会被绘出。

错误

如果mode不是被允许的值,将会产生GL_INVALID_ENUM

参数

mode——指明多边形的正面或反面是否被选取。允许的符号常量有:GL_FRONT,GL_BACKGL_FRONT_AND_BACK。初始值为GL_BACK

glDrawElements

publicvoid glDrawElements(int mode,int count,int type,Buffer indices)

功能

由矩阵数据渲染图元。

详细

glDrawElements用少量调用指明多重几何图元,你可以事先指明独立的顶点、法线、颜色和纹理坐标矩阵并且可以通过调用glDrawElements方法来使用它们创建序列图元。

glDrawElements被调用,它会使用有序索引来查询可用矩阵中的元素,并以此创建序列几何图元,如果GL_VERTEX_ARRAY被禁用,则不会创建。

顶点属性由glDrawElements修改,glDrawElements在返回后会有一个未指明的值。举一个例子,如果GL_COLOR_ARRAY启用,当执行glDrawElements方法后,当前颜色的值是未定义的,属性不会维持它之前的值。

错误

如果mode的值不被允许,将产生GL_INVALID_ENUM

如果type的值不被允许,将产生GL_INVALID_ENUM

如果count是负数,将产生GL_INVALID_VALUE

参数

mode——指明被渲染的是哪种图元,被允许的符号常量有GL_POINTS,GL_LINE_STRIP,GL_LINE_LOOP,GL_LINES,GL_TRIANGLE_STRIP, GL_TRIANGLE_FANGL_TRIANGLES

count——指明被渲染的元素个数。

type——指明索引指的类型,不是GL_UNSIGNED_BYTE就是GL_UNSIGNED_SHORT

indices——指明存储索引的位置指针。

抛出

java.lang.IllegalStateException——如果最近一次调用glBindBuffer方法以GL_ELEMENT_ARRAY_BUFFER为目标时,有一个非0缓冲区参数。

java.lang.IllegalArgumentException——如果索引为空。

java.lang.ArrayIndexOutOfBoundsException——如果索引序列中从0count-1中任意索引超出现有索引或数据矩阵范围。

glEnable

public void glEnable(int cap)

功能

启用服务器端GL功能。

详细

glEnable方法和glDisable方法可以启用和禁止各种功能,各种功能(除了GL_DITHERGL_MULTISAMPLE)的初始值为GL_FALSE

参数:

GL_ALPHA_TEST——如果启用,将进行alpha测试,详见glAlphaFunc

GL_BLEND——如果启用,将引入的值与颜色缓冲区中的值混合,详见glBlendFunc

GL_COLOR_LOGIC_OP——如果启用,允许(apply)引入的颜色与颜色缓冲区中的值进行逻辑运算。详见glLogicOp

GL_COLOR_MATERIAL——如果启用,得到当前颜色的周围散开的痕迹。

GL_CULL_FACE——开启背面裁剪,即允许正反面的选取

GL_DEPTH_TEST——开启深度测试,做深度比较和更新深度缓存。值得注意的是即使深度缓冲区存在并且深度mask不是0,如果深度测试禁用的话,深度缓冲区也无法更新。详见glDepthFunc, glDepthMaskglDepthRange

GL_DITHER——去抖动,颜色元素或索引将在被写入颜色缓冲区之前进行dither

GL_FOG——如果启用,将雾的颜色效果与显示纹理颜色混合。详见glFog

GL_LIGHTi——如果启用,包含光线i在光线方程的评价中,详见glLightModelglLight

GL_LIGHTING——开灯,用当前光线参数计算顶点颜色。否则仅仅简单将当前颜色与每个顶点关联。详见glMaterial, glLightModelglLight

GL_LINE_SMOOTH——如果启用,画线时使用调整过滤。否则,画aliased线,详见glLineWidth

GL_MULTISAMPLE——如果启用,为单程反锯齿和其他效果显示多样本片段,详见glSampleCoverage

GL_NORMALIZE——如果启用,法向量被计算为单位向量,详见glNormalglNormalPointer

GL_POINT_SMOOTH——如果启用,使用调整过滤器描绘点,否则,画aliased点,详见glPointSize

GL_POLYGON_OFFSET_FILL——如果启用,在深度比较进行前多边形片段的深度值会进行移位。

GL_RESCALE_NORMAL——如果启用,法向量的刻度由视图模型矩阵中的元素确定,详见glNormalglNormalPointer

GL_SAMPLE_ALPHA_TO_MASK(仅1.0)——如果启用,将alpha值转变为多样本范围修正码。详见glSampleCoverage

GL_SAMPLE_ALPHA_TO_COVERAGE(仅1.1)——如果启用,将会产生一个范围值,它的每个bit都是由相应的样本位置的alpha值决定的。

GL_SAMPLE_ALPHA_TO_ONE——如果启用,在计算完多样本范围修正码后将片段alpha值设为被允许的最大值。详见glSampleCoverage

GL_SAMPLE_MASK(仅1.0)——如果启用,在进行多样本时,申请一个码来修改片段范围。

GL_SAMPLE_COVERAGE(仅1.1)——如果启用,片段范围会与另一个临时的范围值进行与运算。这个临时的范围值与上文中GL_SAMPLE_ALPHA_TO_COVERAGE描述的范围值的确定方式相同。但是作为GL_SAMPLE_COVERAGE_VALUE的值的功能,如果GL_SAMPLE_COVERAGE_VALUEGL_TRUE,在它与片段范围值进行与运算前,这个临时的范围值是倒置的(所以bit的值都是倒置的),详见glSampleCoverage

GL_SCISSOR_TEST——如果启用,丢弃裁剪矩形外的片段。详见glScissor

GL_STENCIL_TEST——如果启用,做模板测试并更新模板缓冲区,详见glStencilFuncglStencilMaskglStencilOp

GL_TEXTURE_2D——如果启用,当前活动纹理单元为二维纹理。详见glActiveTexture,glTexImage2D,glCompressedTexImage2DglCopyTexImage2D

GL_CLIP_PLANEi——如果启用,裁剪面i可用。详见glClipPlane

GL_POINT_SPRITE_OES1.1+ OES_point_sprite 扩展)——如果启用,点块纹理可用,详见glPointSizeglTexEnv

错误:

如果参数不是前面列表中的值,将会产生一个GL_INVALID_ENUM

参数

cap——指定一个在GL空间中声明的符号常量。

glEnableClientState

publicvoid glEnableClientState(int array)

功能

启用客户端的某项功能。

详细

glEnableClientStateglDisableClientState启用或禁用客户端的单个功能。默认的,所有客户端功能禁用。

array可以是下列符号常量:

GL_COLOR_ARRAY——允许数组进行颜色渲染。如果启用,颜色矩阵可以用来写入以及调用glDrawArrays方法或者glDrawElements方法时进行渲染。详见glColorPointer

GL_NORMAL_ARRAY——如果启用,法线矩阵可以用来写入以及调用glDrawArrays方法或者glDrawElements方法时进行渲染。详见glNormalPointer

GL_TEXTURE_COORD_ARRAY——如果启用,纹理坐标矩阵可以用来写入以及调用glDrawArrays方法或者glDrawElements方法时进行渲染。详见glTexCoordPointer

GL_VERTEX_ARRAY——如果启用,顶点矩阵可以用来写入以及调用glDrawArrays方法或者glDrawElements方法时进行渲染。详见glVertexPointer

GL_POINT_SIZE_ARRAY_OES(OES_point_size_arrayextension)——如果启用,点大小矩阵控制大小以渲染点和点sprites。这时由glPointSize定义的点大小将被忽略,由点大小矩阵提供的大小将被用来渲染点和点sprites。详见glPointSize

注意

启用和禁用GL_TEXTURE_COORD_ARRAY将会影响活动的客户纹理单元,活动的客户纹理单元由glClientActiveTexture控制。

错误

如果array不是被允许的值,将产生GL_INVALID_ENUM

参数

array——指明启用的功能,允许的符号常量有GL_COLOR_ARRAY,GL_NORMAL_ARRAY,GL_TEXTURE_COORD_ARRAY,GL_VERTEX_ARRAY,和GL_POINT_SIZE_ARRAY_OES (OES_point_size_array extension)

glFrontFace

public void glFrontFace(int mode)

功能:

定义多边形的正面和背面。

详细:

在一个完全由不透明的密闭surface组成的场景中,多边形的背面永远不会被看到。剔除这些不能显示出来的面可以加速渲染器渲染图像的时间。开启和禁用剔除功能,调用glEnableglDisable方法并以GL_CULL_FACE为参数。剔除功能初始值为禁止。

如果一个虚拟的对象从第一个顶点,到第二个顶点,等等,直到最后一个顶点,这个多边形顶点移动的方向是按顺时针移动的,则这个多边形窗口坐标上的投影被认为是按顺时针绘出的。如果一个虚拟的对象从第一个顶点,到第二个顶点,等等,直到最后一个顶点,这个多边形顶点移动的方向是按逆时针移动的,则这个多边形窗口坐标上的投影被认为是按逆时针绘出的。glFrontFace指明多边形在窗口坐标中是顺时的还是逆时针被作为正面。传递GL_CCWmode则选择逆时针多边形为正面,GL_CW则选择顺时针多边形为正面。默认逆时针多边形为正面。

错误:

如果mode不是被允许的值,将产生GL_INVALID_ENUM

参数:

mode——多边形正面的方向。GL_CWGL_CCW被允许,初始值为GL_CCW

glFrustumf

Public void glFrustumf(float left, float right, float bottom, float top, float zNear, float zFar)

功能:

透视投影的设置,可视区域为[near,far],投影中心为z轴上的点(00R

参数:

Left:视口左侧对应的x坐标

Rigth:视口右侧对应的x坐标

Top:视口上侧对应的y坐标

Bottom:视口下侧对应的y坐标

Near:最近端的z坐标

Far:最远端的z坐标

相关计算:

水平方向的视角

a = 2arctg(left,near);//left/near的反切

垂直方向的视角

b = 2arctg(top,near)//

一般-left=right = ScreenWidth/ScreenHeight; -top = bottom = 1

注:

原理:视角变大,视野变大。系统应该调整视口中的图像,即缩放。

如果水平即x轴的视角变大,则说明视野更加开阔,可见的东西应该要更多,所以视图会进行调整,即当前视口中图像按比例缩小,这样就可以表现出视野开阔了的效果。a增大x轴上会进行缩放,b增大会在y轴上进行缩放,nearfar会在z轴上缩放。

如下的效果

       

  正常比例的三角形   水平视角增大则x轴上图像缩小   垂直视角增大y轴图像缩小

 

水平和垂直视角都增大

 

glGenTextures

public abstract void glGenTextures (int n, IntBuffer textures)

Parameters

n

指定要生成的纹理名数

textures

指定存储生成纹理名的数组

Description

返回n个纹理名存于textures中。不保证这些纹理名是连续的整数,保证它是未被使用过的。生成的纹理是无维度的;他们假定第一次绑定至的纹理目标的维度为自己的维度(先前调用glGenTextures产生的纹理索引集不会由后面调用的glGenTextures得到,除非他们首先被glDeleteTextures删除。

Errors

GL_INVALID_VALUE :n为负数

 

glHint

public void glHint(int target,int mode)

功能

控制GL某些行为。可以去图像走样,即去锯齿,或台阶

详细

当拥有解释的空间时,GL某些方面的行为可以由hints控制。一个hints由两个参数指明。target是一个由常量符号描述的用以被控制的行为。mode是另一个由符号常量描述的想要执行的行为target初始值GL_DONT_CARE

mode

GL_FASTEST——选择最有效率的选项。

GL_NICEST——选择最正确或质量最好的选项。

GL_DONT_CARE——无任何倾向。

target

GL_FOG_HINT——表明雾效果计算的精确度,如果每个像素的雾效果计算不能被GL效率支持的话,那么GL_DONT_CAREGL_FASTEST可以用于每个每个顶点的雾效果计算。

GL_LINE_SMOOTH_HINT——表明直线抗锯齿的效果。如果应用一个大的过滤函数,GL_NICEST可以应用于更多的在光栅化时产生的像素上

GL_PERSPECTIVE_CORRECTION_HINT——表明颜色和纹理坐标插值的效果。如果远点修正插入不能被GL有效支持的话,那么GL_DONT_CARE或者GL_FASTEST可以应用于颜色的线性插值或是纹理坐标。

GL_POINT_SMOOTH_HINT——表明反走样点的效果。如果应用一个大的过滤函数,GL_NICEST可以应用于更多的在光栅化时产生的像素上。

GL_GENERATE_MIPMAP_HINT(仅1.1)——表明自动生成的mipmap的质量和性能。

注意

hints的解释基于具体的实现。一些实现会忽略glHint设置。

错误

target——指明一个符号常量来表明被控制的行为。有GL_FOG_HINT ,GL_LINE_SMOOTH_HINT,GL_PERSPECTIVE_CORRECTION_HINT,GL_POINT_SMOOTH_HINT,在1.1还有GL_GENERATE_MIPMAP_HINT

mode——指明一个符号常量来表明想要执行的行为。有GL_FASTEST,GL_NICESTGL_DONT_CARE

网络解释

void glHint(GLenum target,GLenum mode);    // 控制OpenGL的某些行为
参数target是要控制的行为
参数mode可以是GL_FASTEST, GL_NICEST,GL_DONT_CARE.(效率最高质量最好没有选择)
参数target的取值及其含义:
GL_POINT_SMOOTH_HINT, GL_LINE_SMOOTH_HINT, GL_POLYGON_SMOOTH_HINT----反走样操作中直线,点或多边形的采样质量.
GL_FOG_HINT----对每个像素(GL_NICEST)还是每个顶点(GL_FASTEST)执行雾效计算.
GL_PERSPECTIV_CORRECTION_HINT----颜色和纹理坐标插值的质量
GL_GENERATE_MIPMAP_HINT----自动生成的mipmap的质量和性能
GL_TEXTURE_COMPRESSION_HINT----纹理图案的压缩质量和性能.

glLineWidth

public void glLineWidth(float width)

功能

指明光栅化线段的宽度。

详细

glLineWidth指明可走样或反走样线的宽度。使用不是1的线宽会不会有不同的效果,取决与是否开启反走样功能。开启和关闭反走样功能需调用glEnable和 glDisable并以GL_LINE_SMOOTH为参数。反走样功能初始值为关闭。

如果线的反走样功能被关闭,实际的宽度由设定宽度的最近整数值决定。(如果这个整数是0,则按照1来处理)如果|deltax| >= |delta y|,每个被光栅化的列的i个像素会被填充,i是指宽度的整数话的值。否则,没行的的i个像素点会被填充。

如果反走样功能启用的话,线光栅化时会为每个像素区产生一个片段,这些像素区以矩形形式贯穿这个区域,矩形的宽度等于当前的线宽,长度等于线的真实长度,并以该线段为中心。每个片段的覆盖值是矩形区域相应的像素区域的坐标区域。这个值被保存起来,在光栅化时使用。

当反走样功能开启时,不是所有的宽度都被支持。如果设置了一个不不被支持的值,将会使用离这个值最近的被支持的值。只有1可以保证是被支持的值,其他值要依据相应的应用平台来确定。同样的,对于走样的线宽度也有一个范围。想询问被支持的线宽范围以及这个范围内被支持线宽的大小不同处,需要调用glGetIntegerv方法并以GL_ALIASED_LINE_WIDTH_RANGE,GL_SMOOTH_LINE_WIDTH_RANGE,GL_SMOOTH_LINE_WIDTH_GRANULARITY为参数。

注意

没有反走样的线线宽可能会在由应用平台决定的最大值以内,可以使用glGetIntegerv方法并以GL_ALIASED_LINE_WIDTH_RANGE为参数来这个最大线宽。

错误

如果线宽小于等于0,将会产生GL_INVALID_VALUE

参数

width——指定光栅化时的线宽度,初始值为1

glLightf

Public void glLightf(int light,int pname,float []params,int offset)

参数light 表示要设置哪个灯光,有效值为常量 GL10.GL_LIGHTn 。

参数pname 表示要设置的属性,包括

 GL_POSITION:灯光的位置,值为四元组 (x,y,z,w),光w为0时表示平行光,xyz即变成了光源方向;光 w 不为0时,表示(定位光-光源固定点光源或聚光灯的位置一般此时 w取值为1.0f。

 GL_AMBIENT,GL_DIFFUSE,GL_SPECULAR:灯光的颜色,分别代表环境光、漫射光、反射光。

 GL_CONSTANT_ATTENUATION,GL_LINEAR_ATTENUATION,GL_QUADRATIC_ATTENUATION:衰减,后两个使灯光的强度随距离变化,三者共同作用的最终衰减系数为:1 / (kconstant + klinear * d + kquadratic * d2),其中d表示到光源的距离。

 GL_SPOT_EXPONENT:设置聚光灯光圈中心到边缘的衰减程度。

 GL_SPOT_CUTOFF:设置聚光灯光锥的扩散角度。

 GL_SPOT_DIRECTION:设置聚光灯的照射方向。

参数param表示要设置的属性的整数值或浮点值。

参数params表示要设置的属性的序列值。

参数offset限定数组类型的params参数中要使用的部分的起始位置。

 

glLoadIdentity

public void glLoadIdentity()

功能:

将当前矩阵设置为单位矩阵,用特征举证代替当前矩阵

详细:

glLoadIdentity使特征矩阵代替当前矩阵。语义上等价于调用glLoadMatrix方法并以特征矩阵为参数。

( 1       0      0       0 )

( 0       1      0       0 )

( 0       0      1       0 )

( 0       0      0       1 )

但在一些情况下它更高效。

glMatrixMode

public void glMatrixMode(int mode)

功能

指定哪一个矩阵是当前矩阵。共有模型视图矩阵,投影矩阵,纹理矩阵,调色板矩阵,通俗来讲就是该方法就是切换矩阵,之后就可以进行对应矩阵的操作了,即我要是可以投影设置就要转换到投影模式,我要显示设置就要进入模型视图矩阵才可以;对应的操作只能在对应的矩阵上才可以操作。

详细

glMatrixMode设置当前矩阵模式,mode允许的值有:

GL_MODELVIEW——模型视图矩阵用于显示图像;应用视图矩阵堆的后续矩阵操作。

GL_PROJECTION——映射模式用于映射图像。应用投射矩阵堆的后续矩阵操作。

GL_TEXTURE——应用纹理矩阵堆的后续矩阵操作。

GL_MATRIX_PALETTE_OESOES_matrix_palette扩展)——启用矩阵调色板堆栈扩展,并应用矩阵调色板堆栈后续矩阵操作。

错误

如果mode不是一个允许的值,将产生一个GL_INVALID_ENUM

参数

mode——指明哪一个堆允许后续的矩阵操作。允许的值有L_MODELVIEW,GL_PROJECTIONGL_TEXTURE,在有OES_matrix_palette扩展时,GL_MATRIX_PALETTE_OES也被允许,初始值是GL_MODELVIEW

glOthof

Public void glOthof(float left, float right, float bottom, float top, float zNear, float zFar)

功能:

设置正交投影,即实物多大投影多大,不会有远小近大的效果。

参数:

Left:视口左侧对应的x坐标

Rigth:视口右侧对应的x坐标

Top:视口上侧对应的y坐标

Bottom:视口下侧对应的y坐标

Near:最近端的z坐标

Far:最远端的z坐标

相关计算:

水平方向的视角

a = 2arctg(left,near);//left/near的反切

垂直方向的视角

a = 2arctg(top,near)//

 

 

参数

glRotatef

publicvoid glRotatef(float angle,float x,float y,float z)

功能

用旋转矩阵乘以当前矩阵。

详细

glRotate将围绕向量(x, y, z)产生一定角度的旋转。由旋转矩阵乘以当前矩阵(详见glMatrixMode),并由其乘积代替当前矩阵。好像调用glMultMatrix方法,并以下列矩阵为参数:

(x^2(1 - c) + c        xy (1 - c) -zs       xz (1 - c) + ys       0 )

(xy (1 - c) + zs       y^2(1 - c) + c        yz (1 - c) - xs       0 )

(xz (1 - c) - ys       yz (1 - c) +xs       z^2(1 - c) + c        0 )

(       0                    0                     0              1 )

这里c = cos (angle), s = sin (angle),and ||(x, y, z)|| = 1, (如果不是, GL 将格式化该向量)

如果矩阵模式是GL_MODELVIEW或者GL_PROJECTION,调用glRotate方法后所有被绘对象将旋转一个角度。使用glPushMatrix方法和glPopMatrix方法储存未旋转坐标系统。

注意

旋转方式服从右手原则,所以如果一个向量(x, y, z)指向用户方向,将按逆时针方向旋转。

参数

angle——指明旋转的角度,单位为度。

x——指明旋转向量的x坐标。

y——指明旋转向量的y坐标。

z——指明旋转向量的z坐标。

glRotatex

publicvoid glRotatex(int angle,int x,int y,int z)

功能

glRotatef的修正方法。

glScalef

publicvoid glScalef(float x,float y,float z)

功能

用缩放矩阵乘以当前矩阵。

详细

glScale沿着xyz坐标轴产生并不统一的缩放。三个参数表明沿着每个坐标轴想要的缩放因子。

用缩放矩阵乘以当前矩阵(详见glMatrixMode),其乘积将代替当前矩阵,就好像调用glMatrixMode方法,并以下列矩阵为参数:

(x       0       0      0 )

(0       y       0      0 )

(0       0       z      0 )

(0       0       0      1 )

如果矩阵模式不是GL_MODELVIEW就是GL_PROJECTION的话,则调用glScale方法后所以被绘的对象将产生一个缩放。

使用glPushMatrix方法和glPopMatrix方法储存未缩放坐标系统。

注意

如果不仅仅一个缩放矩阵应用于模式视图矩阵,并且启用光线效果,光线常常出现错误。这种情况下,调用glEnable方法并以GL_NORMALIZE为参数,启用法线自动格式化功能。

参数

x——指明x坐标轴上的缩放因子。

y——指明y坐标轴上的缩放因子。

z——指明z坐标轴上的缩放因子。

glScalex

publicvoid glScalex(int x,int y,int z)

功能

glScalef方法的修正方法。

glShadeModel

public void glShadeModel(int mode)

功能

选择恒定或光滑着色模式。

详细

GL图元可以采用恒定或者光滑着色模式,默认值为光滑着色模式。当图元进行光栅化的时候,将引起插入顶点颜色计算,不同颜色将被均匀分布到各个像素片段。恒定着色模式则选择计算一个顶点的颜色并在光栅化一个图元时分布到所有产生的像素片段。不管任何情况下,如果光照功能开启的话顶点颜色计算时会有光照效果或者当光照效果关闭的话被指定的顶点计算颜色为那时的当前颜色。恒定和光滑着色模式不能区分点。在顶点矩阵开始时开始,并开始顶点计数,而图元是从1开始的。GL使恒定着色模式的线段i计算第i+1顶点的颜色,即它的第二个顶点。计算同样从1开始,GL使恒定着色模式的多边形计算第i+2顶点的颜色,即指明多边形的最后一个顶点。

恒定和光滑着色模式由glShadeModel使用GL_FLATGL_SMOOTH参数来设定。

错误

如果参数是GL_FLATGL_SMOOTH以外的值,将产生GL_INVALID_ENUM

参数

mode——指明一个符号常量来代表要使用的着色技术。允许的值有GL_FLAT GL_SMOOTH,初始值为GL_SMOOTH

glTexCoordPointer

public abstract void glTexCoordPointer (int size, int type, int stride, Buffer pointer)

Parameters

size

指定每一个纹理坐标的坐标维数,必须是2,3,4,初始值是4.

type

指定每个纹理坐标的数据类型。符号常量可以是 GL_BYTE, GL_SHORT, and GL_FIXED are accepted. 初始值是 GL_FLOAT.

一般是 GL_FLOAT 比较好

stride

位图的宽度,可以理解为相邻的两个纹理之间跨多少个字节,一般为0,因为一般不会在纹理中再添加其他的信息。The initial value is 0.

pointer

存放纹理坐标的数组,初始值为0.指明将绘制的第i个点(i<count)分别对应着贴图的哪一个角,四个角分别用(0,1)(左上角)、(1,1)(右上角)(1,0)(右下角)、(00(左下角)表示

Description

当渲染的时候,纹理数组指定位置和数据 size指定坐标维数,为2,3,4.type指定数据类型,stride指定数组元素间的偏移量。Pointer指定纹理数组。当纹理数组指定后,size,type,stride,pointer被保存为客户端状态。如果纹理坐标数组使能,它就可以用glDrawArrays或glDrawElements调用绘制。通过glEnableClientState使能纹理数组,参数是GL_TEXTURE_COORD_ARRAY.纹理坐标数组默认不是使能的,调用glDrawArray或glDrawElements不管用。 

Notes

glTexCoordPointer 通常在客户端实现.

glTexCoordPointer 更新客户端激活纹理单元的纹理坐标数组状态,通过glClientActiveTexture 。

Errors

GL_INVALID_VALUE is generated if size is not 2, 3, or 4.

GL_INVALID_ENUM is generated if type is not an accepted value.

GL_INVALID_VALUE is generated if stride is negative.

 

glTexParameterf

glTexParameterf(int target, int pname, float param)函数参数的含义:
target —— 目标纹理,必须为GL_TEXTURE_1D或GL_TEXTURE_2D;
pname —— 用来设置纹理映射过程中像素映射的问题等,取值可以为:GL_TEXTURE_MIN_FILTER、GL_TEXTURE_MAG_FILTER、GL_TEXTURE_WRAP_S、GL_TEXTURE_WRAP_T,详细含义可以查看MSDN;
param —— 实际上就是pname的值,可以参考MSDN

glTexParameterf 是设置纹理贴图的参数属性
比如target,表示你使用的1d纹理还是2d纹理,就是一维的,还是二维的,在pc上,还有3d纹理,立方体贴图和球面贴图等,手机上估计只有1d和2d;
pname设置环绕方式;
param纹理过滤方式,如线性过滤和双线性插值等

pname:
GL_TEXTURE_MIN_FILTER 设置最小过滤,
GL_TEXTURE_MAG_FILTER设置最大过滤,

GL_TEXTURE_WRAP_S;纹理坐标一般用str表示,分别对应xyz,2d纹理用st表示,基本是GL_REPEAT的值
GL_TEXTURE_WRAP_T   接上面,纹理和你画的几何体可能不是完全一样大的,在边界的时候如何处理呢?就是这两个参数决定的,wrap表示环绕,可以理解成让纹理重复使用,直到全部填充完成;基本是GL_REPEAT
param;与第二个参数配合使用,一般取GL_LINEAR和GL_NEAREST,过滤形式

GL_LINEAR:像素中心最近4个纹理坐标元素的加权平均值

GL_NEAREST:返回举例纹理像素中心最近的纹理元素

 

glTranslatef

publicvoid glTranslatef(float x,float y,float z)

功能

用平移矩阵乘以当前矩阵。

详细

glTranslate通过向量(x, y, z) 产生平移,以平移矩阵乘以当前矩阵(见glMatrixMode),用乘积代替当前矩阵,就好像调用glMultMatrix方法并以下列矩阵为参数:

(1       0       0      x )

(0       1      0       y )

(0       0       1      z )

(0       0       0      1 )

如果矩阵模式是GL_MODELVIEWGL_PROJECTION,则调用glTranslate方法后所绘的对象都将发生平移。

使用glPushMatrix方法和glPopMatrix方法来保存没有平移的坐标系统。

参数

x——指明平移向量的x坐标。

y——指明平移向量的y坐标。

z——指明平移向量的z坐标。

glTranslatex

publicvoid glTranslatex(int x,int y,int z)

功能

glTranslatef方法的修正方法。

glVertexPointer

publicvoid glVertexPointer(int size,int type,int stride,Buffer pointer)

功能

定义一个顶点坐标矩阵。

详细

glVertexPointer指明当渲染时一个顶点坐标矩阵的存储单元和数据。

当一个顶点矩阵被指明时,size, type, stridepointer保存为客户端状态。

如果顶点矩阵功能启用,当调用glDrawArrays方法或glDrawElements方法时会使用。想要启用或禁止顶点矩阵,使用glEnableClientStateglDisableClientState方法,并以GL_VERTEX_ARRAY为参数。顶点矩阵初始为禁止,调用glDrawArrays方法或glDrawElements方法时无效

调用glDrawArrays方法根据事先指明的点和顶点属性矩阵创建一系列图元(都有相同的类型)。调用glDrawElements方法根据顶点索引和顶点属性创建一系列图元。

注意

glVertexPointer在一般版本中是在客户端的。

错误:

如果size不是2, 3或者4,将产生GL_INVALID_VALUE

如果type不是允许的值,将产生GL_INVALID_ENUM

如果stride是负值,将产生GL_INVALID_VALUE

pointer必须是直接缓存,并且类型与type指明的类型相同。

参数

size——每个顶点的坐标维数,必须是2, 3或者4,初始值是4

type——指明每个顶点坐标的数据类型,允许的符号常量有GL_BYTE, GL_SHORT, GL_FIXEDGL_FLOAT,初始值为GL_FLOAT

stride——指明连续顶点间的位偏移,如果为0,顶点被认为是紧密压入矩阵,初始值为0

pointer——指明顶点坐标的缓冲区,如果为null,则没有设置缓冲区。

抛出

java.lang.IllegalStateException——如果是OpenGL ES 1.1并且VBOs可用。

java.lang.IllegalArgumentException——如果pointer不是直接缓存。

 

glViewport

publicvoid glViewport(int x,int y,int width,int height)

功能

设置一个视口

详细

glViewport指明x、y从标准设备坐标到窗口坐标的仿射变换,使(xnd, ynd)为标准设备坐标,然后窗口坐标(xw, yw)由下列公式计算:

xw= ( xnd + 1 ) width/2 + x

yw= ( ynd + 1 ) height/2 + y

视口宽、高的范围区间视版本而定,想查询此区间可使用方法glGetIntegerv,并以GL_MAX_VIEWPORT_DIMS为参数。

错误

如果宽、高为负数,将产生GL_INVALID_VALUE

参数

x——指明视口矩形的左下角x坐标,初始值为0。

y——指明视口矩形的左下角y坐标,初始值为0。

width——指明视口的宽,如果GL上下文首次附于一个surface则宽、高为这个surface大小。

height——指明视口的高,如果GL上下文首次附于一个surface则宽、高为这个surface大小。

gluLookat

public static void gluLookAt (GL10 gl, float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX, float upY, float upZ)

Added in API level 1

根据视角点。视图中心,和观察者本身的方向来定义一个视图转化。

Parameters

gl

a GL10 interface

eyeX

 

eyeY

 

eyeZ

(eyeX,eyeY,eyeZ)为眼睛即视角点的位置

centerX

 

centerY

 

centerZ

(centerX,centerY,centerZ)为所要观察的视图的一个中心点

upX

 

upY

 

upZ

(upX,upY,upZ)表示的是观察者人的方向,如(0,1,0)表示人是正立方向,y轴方向表示人是站立的方向

 

抱歉!评论已关闭.