多重纹理
顶点着色器
#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 corein 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采样器变量的值作为纹理单元的索引