OpenGL 纹理单元的使用步骤详解

iOS 纹理单元的使用步骤:


片元着色器

precision mediump float; 

                           

uniform sampler2D u_TextureUnit;                                           

varying vec2 v_TextureCoordinates;                                             

  

void main()                            

{                                  

    gl_FragColor = texture2D(u_TextureUnit, v_TextureCoordinates);                                   

}


示例1

//—————————使用纹理———————————

// Set the active texture unit to texture unit 0.

glActiveTexture(GL_TEXTURE0);


// Bind the texture to this unit.

glBindTexture(GL_TEXTURE_2D, textureId);


// Tell the texture uniform sampler to use this texture in the shader by telling it to read from texture unit 0.

glUniform1i(uTextureUnitLocation, 0);//将片元着色器中的uTextureUnitLocation纹理采样器(sample2D)和纹理单元0对应起来。


//glActiveTexture(GL_TEXTURE0)表示把活动的纹理单元设置为纹理单元0,调用glBindTexturetextureId指向的纹理绑定到纹理单元0,最后,调用glUniform1i把选定的纹理单元传递给片段着色器中的u_TextureUnitsampler2D)。

//—————————使用纹理———————————



示例2

//获取shader里面uniform变量的地址

int tex1_location=glGetUniformLocation(m_uProgram, "tex1");

int tex2_location=glGetUniformLocation(m_uProgram, "tex2");

int tex3_location=glGetUniformLocation(m_uProgram, "tex3");


//对这几个纹理采样器变量进行设置

glUniform1i( (GLint)tex1_location, 0);//对应纹理第一层

glUniform1i( (GLint)tex2_location, 1);//对应纹理第二层

glUniform1i( (GLint)tex3_location, 2);//对应纹理第三层


//后面渲染的时候,设置三成纹理

 glActiveTexture(GL_TEXTURE0 + 0);

 glBindTexture(GL_TEXTURE_2D, texture1Id);

 

 glActiveTexture(GL_TEXTURE0 + 1);

 glBindTexture(GL_TEXTURE_2D, texture2Id);

 

 glActiveTexture(GL_TEXTURE0 + 2);

 glBindTexture(GL_TEXTURE_2D, texture3Id);

 

 //所以glActiveTexture第几层,并不表示是shader里面第几个采样器,

 //中间有glUniform1i进行纹理层和采样器地址进行绑定


参考文章:http://www.cnblogs.com/younghao/p/5141290.html












  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值