javax.microedition.khronos.opengles
接口GL10
上级接口:GL
下级接口:GL11
公共接口GL10继承于GL
GL10接口包含了Java(TM)程序语言为OpenGL绑定的核心功能。OES_byte_coordinates,OES_single_precision,OES_fixed_point,OES_read_format,以及OES_compressed_paletted_texture等扩展功能也是这个接口的一部分。
一个以x或xv为后缀的方法是属于OES_fixed_point扩展功能的,并且需要一个或更多的修正的点为参数。这些修正的点可能是浮点点派生出来的值通过乘以65536后再取最接近整数得到。
为了使用方便起见,这个接口记录了OpenGL ES各版本包括1.1及其扩展版本的方法。当运行一个OpenGL ES 1.0的应用程序时,被标为“(仅1.1)”可以被忽略。
查看GL接口描述,了解如何获取该接口实例。
方法的详细描述:
glActiveTexture
public void 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
public void glAlphaFunc(int func,float ref)
功能:
指定Alpha测试功能。
详细:
Alpha测试依据结果舍弃片段,该结果由引入片段的alpha值与参照值常量进行比较得到。glAlphaFunc指定参照值与比较方法。只有当alpha测试有效时,比较才有用。使alpha测试有效或无效可以利用glEnable和glDisable方法,它们都是以GL_ALPHA_TEST为参数的,alpha测试初始为无效。
func与ref指明像素被绘出的条件。引入的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操作,包括那些从点、线、多边形的扫描转换得到的结果。glAlphaFunc对glClear无影响。
错误:
当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
public void glAlphaFuncx(int func,int ref)
功能:glAlphaFunc的修正版本,仅仅参数类型由float ref变为int ref。
glBindTexture
public void 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
public void 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。举一个例子,当sfactor是GL_SRC_ALPHA,dfactor 是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表明完全透明。
错误:
当sfactor或dfactor为不允许的值时,产生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。 因此不论叠加多少次,亮度是不变的。
glClear
public void 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等函数所指定的值来清除指定的缓冲区。比如:
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
第一条语句表示清除颜色设为黑色,第二条语句表示把整个窗口清除为当 前的清除颜色,glClear()的唯一参数表示需要被清除的缓冲区。
glClearColor
public void glClearColor(float red,float green