多重纹理

多重纹理

顶点着色器 

                #version 330 core 

     layout (location = 0) in vec2 in_position; 
     layout (location = 1) in vec2 in_tex_coord; 
         out vec2 tex_coord0; 
         out vec2 tex_coord1; 

        uniform float time; 

         void main(void) 

       {   mat2 m = mat2( vec2(cos(time), sin(time)), vec2(-sin(time), cos(time)) ); 
            gl_Position = vec4(in_position, 0.5, 1.0); 
            tex_coord0 = in_tex_coord * m; 
              tex_coord1 = in_tex_coord * transpose(m); 
                    } 

   

    片元着色器

     #version 330 core 
          in vec2 tex_coord0; 
         in vec2 tex_coord1; 
         layout (location = 0) out vec4 color; 
         uniform sampler2D tex1;                        //需要声明多个采样器变量
       uniform sampler2D tex2; 

         void main(void) 
           { 
           color = texture(tex1, tex_coord0) + texture(tex2, tex_coord1); 

           } 


使用多重纹理步骤

   glUniform1i(glGetUniformLocation(base_prog, "tex1"), 0); //对于第一个纹理,使用纹理单元0,得到uniform位置

   glActiveTexture(GL_TEXTURE0);                               // 激活纹理选择器,选择纹理单元0
   glBindTexture(GL_TEXTURE_2D, tex1);                //绑定纹理

     

    glUniform1i(glGetUniformLocation(base_prog, "tex2"), 1);     

    glActiveTexture(GL_TEXTURE1);
    glBindTexture(GL_TEXTURE_2D, tex2);

   注意: glUniform1i实际是管理采样器和纹理单元,设置uniform采样器变量的值作为纹理单元的索引

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

屠变恶龙之人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值