OPENGL ES1.X多重纹理的实现
来源:互联网 发布:java用汉字组成的图案 编辑:程序博客网 时间:2024/04/19 23:04
参考: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); // 设置纹理坐标
2 1
- OPENGL ES1.X多重纹理的实现
- OpenGl多重纹理的计算
- OpenGL--多重纹理
- OpenGL 多重纹理
- opengl多重纹理映射
- 21.OpenGL--多重纹理
- Opengl多重纹理
- 渲染世界的OPENGL<14>纹理进阶-多重纹理
- 对比es1.x和es2.0纹理加载方法
- OpenGL 多重纹理示例代码
- OpenGL ES Shader 多重纹理
- opengl中使用多重纹理
- Android中使用OpenGL ES实现纹理贴图以及实现多重纹理混合
- C#+OpenGL编程之OpenGL 多重纹理
- OpenGL ES 纹理阵列的实现
- 多重纹理的混合
- 多重纹理的操作
- OpenGL ES1.1.12 目录
- 【数据结构】二叉树中包含的【堆栈、链表、队列】
- 雏菊与罂粟花
- kaptcha 验证码组件使用简介
- 批处理下各符号的作用详解
- host字段变复杂了
- OPENGL ES1.X多重纹理的实现
- 关于手机上显示网页自适应大小viewport参数设置
- cocos2d-x之__Array:: createWithContentsOfFile引发的“血案”
- 快速比较两个TXT文件的差异
- 线程堆栈统计
- [备忘] git http(https) 免密码提交
- OC7_Property_KVC
- 利用struts生成随机验证码(JAVA)
- 深入理解java异常处理机制