歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> 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.htm

Ubuntu 13.04 安裝 OpenGL http://www.linuxidc.com/Linux/2013-05/84815.htm

OpenGL三維球體數據生成與繪制【附源碼】 http://www.linuxidc.com/Linux/2013-04/83235.htm

Ubuntu下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

-------------------------------------分割線-------------------------------------

Copyright © Linux教程網 All Rights Reserved