收藏 分销(赏)

openGL+gl10方法使用.docx

上传人:xrp****65 文档编号:7599389 上传时间:2025-01-10 格式:DOCX 页数:33 大小:56.30KB 下载积分:10 金币
下载 相关 举报
openGL+gl10方法使用.docx_第1页
第1页 / 共33页
openGL+gl10方法使用.docx_第2页
第2页 / 共33页


点击查看更多>>
资源描述
Android OpenGL GL10的方法解析 这是我在网上找到底资料对学习openGL的初学者帮助挺大的。。。好好看吧 原文地址: 为了可以方便的查询以后学习笔记上的函数的使用方法,本人特此翻译了部分所用到的函数的使用方法。由于本人英语水平有限,可能会有一些翻译错误,还望海涵。 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 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测试有效或无效可以利用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 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。举一个例子,当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 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等函数所指定的值来清除指定的缓冲区。比如: glClearColor(0.0,0.0,0.0,0.0); glClear(GL_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清理模板缓冲区时的索引,s为2m-1,其中m是模板缓冲区中的bit数。 相关获取: glGetIntegerv方法,并以GL_STENCIL_BITS为参数。 参数: s——指明glClear清理模板缓冲区时的索引,初始值为0。 glClientActiveTexture publicvoid glClientActiveTexture(int texture) 功能:选择客户端活动纹理单元。 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。 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指明单独的颜色元素是否可以被写入。举一个例子,如果red为false,则颜色缓冲区中的任何像素的颜色的红色元素将不会发生变化,忽略企图的绘画操作,包括glClear。 不可以控制元素单个位的改变,只能控制整个元素是否可以改变。 参数: red——指明红色元素是否可以写入颜色缓冲区,初始值为ture,表明可以写入。 green——指明绿色元素是否可以写入颜色缓冲区,初始值为ture,表明可以写入。 blue——指明蓝色元素是否可以写入颜色缓冲区,初始值为ture,表明可以写入。 alpha——指明alpha元素是否可以写入颜色缓冲区,初始值为ture,表明可以写入。 glColorPointer publicvoid glColorPointer(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——如果是OpenGL ES 1.1并且VBOs(VertexBuffer 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。如果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,或者其中一个不能表示为2^k + 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——指明纹理图像的宽度,必须是2^k + 2*border,k为整数,所有版本支持的纹理图像至少时64像素宽。 height——指明纹理图像的高度,必须是2^k + 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的值, 必须是0 mipmap: 多个明细等级(即上面的层级数) 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, 以此类推(有些问题) glCompressedTexSubImage2D publicvoid glCompressedTexSubImage2D(int target,                                      int level,                                      int xoffset,                                      int yoffset,                                      int width,                                      int height,                                      int format,                                      int imageSize,                                      Buffer data) 功能: 指明二维压缩纹理子图。 详细: 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 < -b, xoffset +width > (w - b), yoffset < -b, or yoffset + height > (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: 子图像的纹理数
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 应用文书 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服