Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / OpenGL ES1.X多重纹理的实现

参考:http://stackoverflow.com/questions/1952720/opengl-es-multi-texture-alpha-blending-question            https://www.opengl.org/wiki/Texture_Combiners#Example_:_multiply_tex0_and_tex1要实现多重纹理。以前使用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); // 设置纹理坐标OpenGL编程指南(原书第7版)中文扫描版PDF 下载 http://www.linuxidc.com/Linux/2012-08/67925.htm-------------------------------------分割线-------------------------------------OpenGL 渲染篇 http://www.linuxidc.com/Linux/2011-10/45756.htmUbuntu 13.04 安装 OpenGL http://www.linuxidc.com/Linux/2013-05/84815.htmOpenGL三维球体数据生成与绘制【附源码】 http://www.linuxidc.com/Linux/2013-04/83235.htmUbuntu下OpenGL编程基础解析 http://www.linuxidc.com/Linux/2013-03/81675.htm如何在Ubuntu使用eclipse for c++配置OpenGL http://www.linuxidc.com/Linux/2012-11/74191.htm《OpenGL超级宝典》学习笔记 http://www.linuxidc.com/Linux/2013-10/91414.htm-------------------------------------分割线-------------------------------------本文永久更新链接地址:http://www.linuxidc.com/Linux/2014-11/109816.htm