openGL+gl10方法使用.docx_第1页
openGL+gl10方法使用.docx_第2页
openGL+gl10方法使用.docx_第3页
openGL+gl10方法使用.docx_第4页
openGL+gl10方法使用.docx_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android OpenGL GL10的方法解析这是我在网上找到底资料对学习openGL的初学者帮助挺大的。好好看吧原文地址:/wangziling100/article/category/847525为了可以方便的查询以后学习笔记上的函数的使用方法,本人特此翻译了部分所用到的函数的使用方法。由于本人英语水平有限,可能会有一些翻译错误,还望海涵。javax.microedition.khronos.opengles接口GL10上级接口:GL下级接口:GL11公共接口GL10继承于GLGL10接口包含了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接口描述,了解如何获取该接口实例。方法的详细描述:glActiveTexturepublicvoid glActiveTexture(inttexture)功能:选择服务端活动的纹理单元详细: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。glAlphaFuncpublicvoid glAlphaFunc(intfunc,floatref)功能:指定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。glAlphaFuncxpublicvoid glAlphaFuncx(intfunc,intref)功能:glAlphaFunc的修正版本,仅仅参数类型由float ref变为int ref。glBindTexturepublicvoid glBindTexture(inttarget,inttexture)功能:将一个已命名的纹理与一个纹理目标绑定。详细: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指明纹理的名称。glBlendFuncpublicvoid glBlendFunc(intsfactor,intdfactor)功能:指明像素算法。详细:像素可以通过函数操作后被绘出,该函数的功能是将引入的值与颜色缓冲中已有的值混合。使用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= RsGd= GsBd= BsAd= 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。 因此不论叠加多少次,亮度是不变的。glClearpublicvoid glClear(intmask)功能:清理缓冲区,并设置为预设值。详细: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()的唯一参数表示需要被清除的缓冲区。glClearColorpublicvoid glClearColor(floatred,floatgreen,floatblue,floatalpha)功能:指定颜色缓冲区的清理值详细:glClearColor指明红、绿、蓝、alpha的值并通过glClear来清理颜色缓冲区,被glClearColor指明的值属于区间0, 1。参数:red指明颜色缓冲区被清理时红色的值,初始值为0。green指明颜色缓冲区被清理时绿色的值,初始值为0。blue指明颜色缓冲区被清理时蓝色的值,初始值为0。alpha指明颜色缓冲区被清理时alpha的值,初始值为0。glClearColorxpublicvoid glClearColorx(intred,intgreen,intblue,intalpha)功能:glClearColor的修正方法。glClearDepthfpublicvoid glClearDepthf(floatdepth)功能:指明深度缓冲区的清理值。详细:glClearDepth方法指明深度值,并通过glClear来清理深度缓冲区。glClearDepth指明的值属于区间0, 1。参数:depth指明深度缓冲区被清理时的深度值,初始值为1。glClearDepthxpublicvoid glClearDepthx(intdepth)功能:glClearDepth的修正方法。glClearStencilpublicvoid glClearStencil(ints)功能:指明模板缓冲区的清理值。详细:glClearStencil指明glClear清理模板缓冲区时的索引,s为2m-1,其中m是模板缓冲区中的bit数。相关获取:glGetIntegerv方法,并以GL_STENCIL_BITS为参数。参数:s指明glClear清理模板缓冲区时的索引,初始值为0。glClientActiveTexturepublicvoid glClientActiveTexture(inttexture)功能:选择客户端活动纹理单元。glClientActiveTexture选择顶点矩阵,客户状态参数由glTexCoordPointer方法修改。可用性由glEnableClientState与glDisableClientState决定,参数为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。glColor4fpublicvoid glColor4f(floatred,floatgreen,floatblue,floatalpha)功能:设置当前颜色。详细:GL储存当前四值的RGBA颜色,glColor可以设置新的四值的RGBA颜色。当前颜色值被储存为整型或浮点型,如果值被储存为浮点型,尾数和指数的大小未指明。在当前颜色更新之前整型与浮点型都不属于区间0, 1,然而颜色元素在修改或写入颜色缓冲区前会属于该区间。参数:red为当前颜色指明一个新的红色值,初始值为1。green为当前颜色指明一个新的绿色值,初始值为1。blue为当前颜色指明一个新的蓝色值,初始值为1。alpha为当前颜色指明一个新的alpha值,初始值为1。glColor4xpublicvoid glColor4x(intred,intgreen,intblue,intalpha)功能:glColor4f的修正方法。glColorMaskpublicvoid glColorMask(booleanred,booleangreen,booleanblue,booleanalpha)功能:开启与禁止颜色元素的写入操作。详细:glColorMask指明单独的颜色元素是否可以被写入。举一个例子,如果red为false,则颜色缓冲区中的任何像素的颜色的红色元素将不会发生变化,忽略企图的绘画操作,包括glClear。不可以控制元素单个位的改变,只能控制整个元素是否可以改变。参数:red指明红色元素是否可以写入颜色缓冲区,初始值为ture,表明可以写入。green指明绿色元素是否可以写入颜色缓冲区,初始值为ture,表明可以写入。blue指明蓝色元素是否可以写入颜色缓冲区,初始值为ture,表明可以写入。alpha指明alpha元素是否可以写入颜色缓冲区,初始值为ture,表明可以写入。glColorPointerpublicvoid glColorPointer(intsize,inttype,intstride,Bufferpointer)功能:定义一个颜色矩阵。详细: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如果是OpenGL ES 1.1并且VBOs(VertexBuffer Object即顶点缓冲对象)启用。java.lang.IllegalArgumentException如果pointer不是直接缓存。网络解释:顶点数组的概念如此的简单,如其名,就是将原来由一系列的glVertex*指定的顶点放在一个数组中,(其意思就是顶点数据组成的数组)由顶点数组处理函数一次性指定。事实上,不仅如此,其一次性指定的不仅仅是数组,还可以是其他系列的东西,比如表面发现,RGBA颜色,辅助颜色等。glCompressedTexImage2Dpublicvoid glCompressedTexImage2D(inttarget,intlevel,intinternalformat,intwidth,intheight,intborder, intimageSize,Bufferdata)功能:指明一个二维的压缩的纹理图像。详细:glCompressedTexImage2D定义一个压缩格式的二维纹理图像。调色板纹理是被支持的压缩格式,一个压缩图像的布局是一个调色板,调色板由用以查找调色板的多层级数的纹理引用决定。调色板的格式可以为R5_G6_B5, RGBA4, RGB5_A1, RGB8, 或者RGBA8,纹理引用的分辨率可以为4位或8位。结果,调色板条目不是16就是256。如果level是0,数据中仅有一个纹理引用的层级数会被描述。否则,level为负值指明描述纹理直到哪一个层级数。可能会有剩余为最低分辨率填补的半个字节会被忽略。注意:glPixelStore对于压缩纹理图像无影响。glCompressedTexImage2D指明当前绑定纹理的二维纹理以及当前纹理单元,分别通过glBindTexture方法和glActiveTexture方法。错误:如果target不是GL_TEXTURE_2D,将会产生GL_INVALID_ENUM(错误枚举)。如果level大于0或者绝对值大于log_2(max),这里的max是GL_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,或者其中一个不能表示为2k + 2*border,k为整数,将产生GL_INVALID_VALUE(错误值)。如果border不是0则产生GL_INVALID_VALUE(错误值)。如果图像不符合格式、尺寸及压缩图像的内容,则产生GL_INVALID_VALUE(错误值)。参数:target指明目标纹理,必须为GL_TEXTURE_2D。level指明具体数值的等级数,必须小于等于0,0表明只有一种层级数,负数表明有多少被数据描述的层级数。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指明纹理图像的宽度,必须是2k + 2*border,k为整数,所有版本支持的纹理图像至少时64像素宽。height指明纹理图像的高度,必须是2k + 2*border,k为整数,所有版本支持的纹理图像至少时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: 指定二维纹理图像的大小. 参数值的必须为 2的m次方 + 2b.border: b的值, 必须是0mipmap: 多个明细等级(即上面的层级数)mipmap: 一系列预先通过滤波生成的, 分辨率递减的纹理图.功能: 使用mipmap技术时, OpenGL根据物体的大小(以像素为单位)自动确定应使用哪个纹理图像.方法: 必须提供从最大尺寸到1 x 1的, 大小为2的幂的各种纹理图.例如最大分辨率为64 X 16, 就必须提供32X8, 16X4, 8X2, 4X1, 2X1, 1X1的纹理原理: 小的纹理图通常是通过对最大的纹理图进行滤波处理得到的,每个纹素的值是前一个纹理图中4个相应纹素的平均值.使用: 用函数glTexImage2D()指定使用哪些纹理. 将参数level, width, height和image设置成不同的值.level的示例: 例如最大分辨率为64 X 16,level为0表示64X16,level为1表示32X8, 以此类推(有些问题)glCompressedTexSubImage2Dpublicvoid glCompressedTexSubImage2D(inttarget,intlevel,intxoffset,intyoffset,intwidth,intheight,intformat,intimageSize,Bufferdata)功能:指明二维压缩纹理子图。详细:glCompressedTexSubImage2D在已存在的二维压缩图像的子区域重新定义纹理子图。子图将替换已存在纹理图像的子区域。范围是x方向从xoffset到xoffset+ width 1,y方向从yoffset到yoffset + height 1。宽、高都为0不是错误,但没有意义。现在没有支持该方法的压缩格式。注意:glPixelStore对于压缩纹理图像无效果。glCompressedTexImage2D指明当前绑定纹理的二维纹理以及当前纹理单元,分别通过glBindTexture方法和glActiveTexture方法。错误:如果target不是GL_TEXTURE_2D,将会产生GL_INVALID_ENUM(错误枚举)。如果纹理矩阵没有被之前的glCompressedTexImage2D操作定义则产生GL_INVALID_OPERATION。如果level小于0或者绝对值大于log_2(max),这里的max是GL_MAX_TEXTURE_SIZE的返回值。则产生GL_INVALID_VALUE。如果xoffset (w - b), yoffset (h- b),这里w纹理的宽度,h是纹理的高度,b是被修改的纹理图像的边界,则产生GL_INVALID_VALUE。注意w 和h包含2倍的边界宽。如果宽、高小于0则产生GL_INVALID_VALUE。如果type不是类型常量则产生GL_INVALID_ENUM。如果type是GL_UNSIGNED_SHORT_5_6_5并且format不是GL_RGB则产生GL_INVALID_OPERATION。如果type是GL_UNSIGNED_SHORT_4_4_4_4或GL_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: level是mipmap明细等级. format和type描述了纹理图像数据的格式和数据类型.子图像受函数glPixelStore*()和glPixelTransfer*()设置的模式以及其他像素转移操作的影响.xoffset, yoffset: 要替换的子区域左下角相对于当前纹理左下角的位置.width, height: 要替换的子区域的宽度和高度.texels: 子图像的纹理数据. glCopyTexImage2Dpublicvoid glCopyTexImage2D(inttarget, intlevel,intinternalformat, intx, inty, intwidth, intheight, intborder)功能:指明一个像素从颜色缓冲区获得的二维纹理图像。详细:glCopyTexImage2D定义一个像素从颜色缓冲区获得的二维纹理图像。获取纹理数据的矩形,x、y代表矩形的左下角,宽为width + 2*border,高为height of height +2*border,分辨率为level指明的分辨率,internalformat指明纹理的颜色元素。每一个被读取的像素的红、绿、蓝、alpha元素被转换为未指明精度的内部整型或浮点型格式。转换机构将元素最大值映射为1.0,元素值为0时映射为0.0。然后值再被转换为纹理内部格式并储存在像素矩阵中。必须事先确定内部格式以使颜色缓冲区元素在转换时进行处理。但新的颜色元素不能添加。举一个例子,一个RGB颜色缓冲区可以被用来创建一个LUMINANCE或RGB纹理,不能是ALPHA、LUMINANCE_ALPHA或者RGBA纹理。像素排列时,下面的x、y坐标与纹理的下面的s、t坐标相对应。如果指明的颜色缓冲区矩形位于当前渲染的窗口的外面,则那些获取的值是未定义的。注意:一个宽、高均为0的图像表示无纹理。错误:如果target不是GL_TEXTURE_2D,将会产生GL_INVALID_ENUM(错误枚举)。如果internalformat不与颜色缓冲区格式相匹配,将会产生GL_INVALID_OPERATION。如果level小于0或者绝对值大于log_2(max),这里的max是GL_MAX_TEXTURE_SIZE的返回值。则产生GL_INVALID_VALUE。如果宽、高小于0或大于GL_MAX_TEXTURE_SIZE或不满足2k + 2*border,k为整数,将产生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是基本图像level,level n是第n层级数压缩图像。internalformat指明图像的颜色元素,允许的符号常量有GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RGB以及GL_RGBA。x复制矩形的左下角x坐标。y复制矩形的左下角y坐标。width指明纹理图像宽度,必须是0 或者 2n + 2*border,n为整数。height指明纹理图像高度,必须是0 或者 2n + 2*border,n为整数。border指明边界宽度。必须为0。网络解释:功能:复制帧缓存为纹理数据target: 必须为常量GL_TEXTURE_2Dlevel, internalFormat, border: 同函数glTexImage2D()x,y: 屏幕坐标的左下点width, height: 矩形的宽和高.glCopyTexSubImage2Dpublicvoid glCopyTexSubImage2D(inttarget, intlevel, intxoffset,intyoffset, intx, inty, intwidth,intheight)功能:指明一个像素从颜色缓冲区获得的二维纹理图像子图。详细:glCopyTexSubImage2DglCullFacepublic void glCullFace(intmode)功能:指明多边形的前面或后面是否被拣选。详细:glCullFace指明多边形的前面或后面是否被拣选(当mode被指明时)当拣选功能开启。开启或禁止拣选功能,调用glEnable方法和glDisable方法并以GL_CULL_FACE为参数。拣选功能初始值为禁止。glFrontFace指明顺时针和逆时针绘出多边形,哪一个是前面,哪一个是背面。注意:如果mode是GL_FRONT_AND_BACK,多边形不会被绘出,但是其他图元像点、线会被绘出。错误:如果mode不是被允许的值,将会产生GL_INVALID_ENUM。参数:mode指明多边形的前面或后面是否被拣选。允许的符号常量有:GL_FRONT,GL_BACK和GL_FRONT_AND_BACK。初始值为GL_BACK。glDrawElementspublicvoid glDrawElements(intmode,intcount,inttype,Bufferindices)功能:由矩阵数据渲染图元。详细:glDrawElements用少量调用指明多重几何图元,你可以事先指明独立的顶点、法线、颜色和纹理坐标矩阵并且可以通过调用glDrawElements方法来使用它们创建序列图元。当glDrawElements被调用,它会使用有序索引来查询可用矩阵中的元素,并以此创建序列几何图元,如果GL_VERTEX_ARRAY被禁用,则不会创建。顶点属性由glDrawElements修改,glDrawElements在返回后会有一个未指明的值。举一个例子,如果GL_COLOR_ARRAY启用,当执行glDrawElements方法后,当前颜色的值是未定义的,属性不会维持它之前的值。错误:如果mode的值不被允许,将产生GL_INVALID_ENUM。如果type的值不被允许,将产生GL_INVALID_ENUM。如果

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论