androidOpenGLgl10方法解析.docx

上传人:b****4 文档编号:5464952 上传时间:2022-12-16 格式:DOCX 页数:34 大小:36.77KB
下载 相关 举报
androidOpenGLgl10方法解析.docx_第1页
第1页 / 共34页
androidOpenGLgl10方法解析.docx_第2页
第2页 / 共34页
androidOpenGLgl10方法解析.docx_第3页
第3页 / 共34页
androidOpenGLgl10方法解析.docx_第4页
第4页 / 共34页
androidOpenGLgl10方法解析.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

androidOpenGLgl10方法解析.docx

《androidOpenGLgl10方法解析.docx》由会员分享,可在线阅读,更多相关《androidOpenGLgl10方法解析.docx(34页珍藏版)》请在冰豆网上搜索。

androidOpenGLgl10方法解析.docx

androidOpenGLgl10方法解析

我的android——OpenGL

(2)——gl10方法解析

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后再取最接近整数得到。

为了使用方便起见,这个接口记录了OpenGLES各版本包括1.1及其扩展版本的方法。

当运行一个OpenGLES1.0的应用程序时,被标为“(仅1.1)”可以被忽略。

查看GL接口描述,了解如何获取该接口实例。

方法的详细描述:

glActiveTexture

publicvoidglActiveTexture(int texture)

功能:

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

详细:

glActiveTexture选择哪一个纹理在后面的纹理状态改变时有效,纹理单元的数量是依据该纹理单元所被支持的具体实现。

在OpenGLES1.0中至少一个,在OpenGLES1.1中至少两个。

注意:

常常会这样GL_TEXTUREi=GL_TEXTURE0+i

一个纹理单元由纹理可用状态、纹理矩阵堆、纹理环境以及当前渲染纹理组成。

修改其中任一成分均会改变当前活动纹理单元。

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

错误:

当0<=i

相关获取:

利用glGetIntegerv处理GL_MAX_TEXTURE_UNITS。

参数:

texture——指定哪一个纹理单元为活动。

必须是一个GL_TEXTUREi,其中0<=i

glAlphaFunc

publicvoidglAlphaFunc(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

publicvoidglAlphaFuncx(int func,int ref)

功能:

glAlphaFunc的修正版本,仅仅参数类型由floatref变为intref。

glBindTexture

publicvoidglBindTexture(int target,int texture)

功能:

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

详细:

glBindTexture可以让你创建或使用一个已命名的纹理,调用glBindTexture方法并将target设置为GL_TEXTURE_2D,将texture设置为你想要绑定的新纹理的名称。

当一个纹理与目标绑定时,该目标之前的绑定关系将自动被释放。

纹理的名称是一个无符号的整数。

在每个纹理目标中,0被保留用以代表默认纹理。

纹理名称与相应的纹理内容被保留在当前GLrendering上下文的共享的纹理对象空间中(参照eglCreateContext)

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

当一个纹理被绑定时,对于其目标的GL操作将作用于该绑定的纹理之上。

如果被绑定的纹理的目标的维度的纹理映射是活动的,则绑定的纹理被使用。

实际上,纹理目标成为当前被绑定纹理的别名,并且纹理名称0指的是在初始化时被绑定的默认纹理。

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

一旦创建,一个已命名的纹理可能经常需要与维度匹配的目标多次绑定。

这样利用glBindTexture来将一个已命名的纹理与一个纹理目标绑定,比利用glTexImage2D进行纹理图像的重载要快的多。

错误:

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

参数:

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

texture——指明纹理的名称。

glBlendFunc

publicvoidglBlendFunc(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,RssR+RddR)

Gd=min(kG,GssG+GddG)

Bd=min(kB,BssB+BddB)

Ad=min(kA,AssA+AddA)

尽管从表面上看混合算法并没有指明上述等式的精度,因为混合操作是采用不精确的整型颜色值。

然而应当等于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,andGL_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

publicvoidglClear(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,andGL_STENCIL_BUFFER_BIT。

网络解释:

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

比如:

glClearColor(0.0,0.0,0.0,0.0);

glClear(GL_COLOR_BUFFER_BIT);

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

glClearColor

publicvoidglClearColor(float red,float green,float blue,float alpha)

功能:

指定颜色缓冲区的清理值

详细:

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

参数:

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

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

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

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

glClearColorx

publicvoidglClearColorx(int red,int green,int blue,int alpha)

功能:

glClearColor的修正方法。

glClearDepthf

publicvoidglClearDepthf(float depth)

功能:

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

详细:

glClearDepth方法指明深度值,并通过glClear来清理深度缓冲区。

glClearDepth指明的值属于区间[0,1]。

参数:

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

glClearDepthx

publicvoidglClearDepthx(int depth)

功能:

glClearDepth的修正方法。

glClearStencil

publicvoidglClearStencil(int s)

功能:

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

详细:

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

相关获取:

glGetIntegerv方法,并以GL_STENCIL_BITS为参数。

参数:

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

glClientActiveTexture

publicvoidglClientActiveTexture(int texture)

功能:

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

glClientActiveTexture选择顶点矩阵,客户状态参数由glTexCoordPointer方法修改。

可用性由glEnableClientState与glDisableClientState决定,参数为GL_TEXTURE_COORD_ARRAY。

注意:

总有GL_TEXTUREi=GL_TEXTURE0+i。

错误:

如果texture不是一个GL_TEXTUREi,这里0<=i

相关获取:

glGetIntegerv方法,并以GL_MAX_TEXTURE_UNITS为参数。

参数:

texture——指定哪一个纹理单元为活动。

纹理个数至少一个(对于1.0)或两个(对于1.1)纹理必须是一个GL_TEXTUREi,其中0<=i

glColor4f

publicvoidglColor4f(float red,float green,float blue,float alpha)

功能:

设置当前颜色。

详细:

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

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

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

参数:

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

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

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

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

glColor4x

publicvoidglColor4x(int red,int green,int blue,int alpha)

功能:

glColor4f的修正方法。

glColorMask

publicvoidglColorMask(boolean red,boolean green,boolean blue,boolean alpha)

功能:

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

详细:

glColorMask指明单独的颜色元素是否可以被写入。

举一个例子,如果red为false,则颜色缓冲区中的任何像素的颜色的红色元素将不会发生变化,忽略企图的绘画操作,包括glClear。

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

参数:

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

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

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

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

glColorPointer

publicvoidglColorPointer(int size,int type,int stride,Buffer pointer)

功能:

定义一个颜色矩阵。

详细:

glColorPointer指明渲染时使用的颜色矩阵。

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

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

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

如果颜色矩阵被启用,当使用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_FIXED和GL_FLOAT,初始值为GL_FLOAT。

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

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

抛出:

java.lang.IllegalStateException——如果是OpenGLES1.1并且VBOs(VertexBufferObject即顶

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1