OpenGL ES1.X多重纹理的达成
发布时间:2021-12-11 11:29:52 所属栏目:PHP教程 来源:互联网
导读:要实现多重纹理。以前使用directx 11,可以方便使用shader language实现。opengl es 2.0现在也支持shader language。但是,没办法需要支持各种Android设备。 网上查了一下,说是使用texture combiners 进行实现,试了一下果然成功了。下面代码主要实现了两个
要实现多重纹理。以前使用directx 11,可以方便使用shader language实现。opengl es 2.0现在也支持shader language。但是,没办法需要支持各种Android设备。 网上查了一下,说是使用texture combiners 进行实现,试了一下果然成功了。下面代码主要实现了两个纹理的相乘,伪代码如下: result_rgb = texture0_rgb //Just read the texture result_a = texture0_a result_rgb = result_rgb * texture1_rgb result_a = result_a * texture1_a 具体的实现代码如下: glActiveTexture(GL_TEXTURE0); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, gTexture2); //Simply sample the texture glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); //------------------------ glActiveTexture(GL_TEXTURE1); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, gTexture3); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); //Sample RGB, multiply by previous texunit result glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); //Modulate RGB with RGB glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PREVIOUS); glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_TEXTURE); glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); //Sample ALPHA, multiply by previous texunit result glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_MODULATE); //Modulate ALPHA with ALPHA glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_PREVIOUS); glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_ALPHA, GL_TEXTURE); glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA, GL_SRC_ALPHA); render(); 比较重要的是,如何设置纹理坐标。设置代码如下: glClientActiveTexture(GL_TEXTURE0);//设置texture0的纹理坐标 glTexCoordPointer(2, GL_FLOAT, 0, gTextureSquareCoord3); // 设置纹理坐标 glClientActiveTexture(GL_TEXTURE1);//设置texture1的纹理坐标 glTexCoordPointer(2, GL_FLOAT, 0, gTextureSquareCoord3); // 设置纹理坐标 ![]() (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |