androidOpenGLgl10方法解析Word文档格式.docx
- 文档编号:8327196
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:34
- 大小:36.77KB
androidOpenGLgl10方法解析Word文档格式.docx
《androidOpenGLgl10方法解析Word文档格式.docx》由会员分享,可在线阅读,更多相关《androidOpenGLgl10方法解析Word文档格式.docx(34页珍藏版)》请在冰点文库上搜索。
点阵是客户端GL资源,它通过glClientActiveTexture程序获取。
错误:
当0<
=i<
GL_MAX_TEXTURE_UNITS时,如果纹理不是一个GL_TEXTUREi,GL_INVALID_ENUM(错误枚举)会产生。
相关获取:
利用glGetIntegerv处理GL_MAX_TEXTURE_UNITS。
参数:
texture——指定哪一个纹理单元为活动。
必须是一个GL_TEXTUREi,其中0<
GL_MAX_TEXTURE_UNITS,初始值为GL_TEXTURE0。
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
glAlphaFunc的修正版本,仅仅参数类型由floatref变为intref。
glBindTexture
publicvoidglBindTexture(int
target,int
将一个已命名的纹理与一个纹理目标绑定。
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
glClearColor的修正方法。
glClearDepthf
publicvoidglClearDepthf(float
depth)
指明深度缓冲区的清理值。
glClearDepth方法指明深度值,并通过glClear来清理深度缓冲区。
glClearDepth指明的值属于区间[0,1]。
depth——指明深度缓冲区被清理时的深度值,初始值为1。
glClearDepthx
publicvoidglClearDepthx(int
glClearDepth的修正方法。
glClearStencil
publicvoidglClearStencil(int
s)
指明模板缓冲区的清理值。
glClearStencil指明glClear清理模板缓冲区时的索引,s为2m-1,其中m是模板缓冲区中的bit数。
glGetIntegerv方法,并以GL_STENCIL_BITS为参数。
s——指明glClear清理模板缓冲区时的索引,初始值为0。
glClientActiveTexture
publicvoidglClientActiveTexture(int
选择客户端活动纹理单元。
glClientActiveTexture选择顶点矩阵,客户状态参数由glTexCoordPointer方法修改。
可用性由glEnableClientState与glDisableClientState决定,参数为GL_TEXTURE_COORD_ARRAY。
总有GL_TEXTUREi=GL_TEXTURE0+i。
如果texture不是一个GL_TEXTUREi,这里0<
GL_MAX_TEXTURE_UNITS,则产生一个GL_INVALID_ENUM(错误矩阵)。
glGetIntegerv方法,并以GL_MAX_TEXTURE_UNITS为参数。
纹理个数至少一个(对于1.0)或两个(对于1.1)纹理必须是一个GL_TEXTUREi,其中0<
glColor4f
publicvoidglColor4f(float
设置当前颜色。
GL储存当前四值的RGBA颜色,glColor可以设置新的四值的RGBA颜色。
当前颜色值被储存为整型或浮点型,如果值被储存为浮点型,尾数和指数的大小未指明。
在当前颜色更新之前整型与浮点型都不属于区间[0,1],然而颜色元素在修改或写入颜色缓冲区前会属于该区间。
red——为当前颜色指明一个新的红色值,初始值为1。
green——为当前颜色指明一个新的绿色值,初始值为1。
blue——为当前颜色指明一个新的蓝色值,初始值为1。
alpha——为当前颜色指明一个新的alpha值,初始值为1。
glColor4x
publicvoidglColor4x(int
glColor4f的修正方法。
glColorMask
publicvoidglColorMask(boolean
red,boolean
green,boolean
blue,boolean
开启与禁止颜色元素的写入操作。
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即顶
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- androidOpenGLgl10 方法 解析