OpenGL ES 05 纹理单元和采样器是怎么对应上的

OpenGL ES 05 纹理单元和采样器是怎么对应上的_第1张图片 激活纹理单元

// 激活0号纹理单元,把rawData纹理数据绑定到0号纹理单元
glActiveTexture(GLenum(GL_TEXTURE0))
glBindTexture(GLenum(GL_TEXTURE_2D), texture)
            glTexImage2D(GLenum(GL_TEXTURE_2D), 0, GL_RGBA, GLsizei(width), GLsizei(height), 0, GLenum(GL_RGBA), GLenum(GL_UNSIGNED_BYTE), rawData)

// 激活1号纹理单元,把rawData纹理数据绑定到1号纹理单元
glActiveTexture(GLenum(GL_TEXTURE1))
glBindTexture(GLenum(GL_TEXTURE_2D), texture)
            glTexImage2D(GLenum(GL_TEXTURE_2D), 0, GL_RGBA, GLsizei(width), GLsizei(height), 0, GLenum(GL_RGBA), GLenum(GL_UNSIGNED_BYTE), rawData)

// 激活2号纹理单元,把rawData纹理数据绑定到2号纹理单元
glActiveTexture(GLenum(GL_TEXTURE2))
glBindTexture(GLenum(GL_TEXTURE_2D), texture)
            glTexImage2D(GLenum(GL_TEXTURE_2D), 0, GL_RGBA, GLsizei(width), GLsizei(height), 0, GLenum(GL_RGBA), GLenum(GL_UNSIGNED_BYTE), rawData)

设置采样器即将采样的纹理单元编号

   // 设置caodi采样器采样的第0号纹理单元
        shader.setInt(name: "caodi", value: 0)
        // 设置huangtu采样器采样的第1号纹理单元
        shader.setInt(name: "huangtu", value: 1)
        // 设置noise采样器采样的第2号纹理单元
        shader.setInt(name: "noise", value: 2)
 func setInt(name:String, value:Int) {
        //通过location设置uniform的值
        glUniform1i(glGetUniformLocation(shaderProgram, name), GLint(value))
    }

三个采样器,分别采样对应 0 1 2 号纹理单元的纹理数据

#version 300 es

precision mediump float;

out vec4 FragColor;
in vec2 uv;
// 草地采样器/
uniform sampler2D caodi; 
// 黄土采样器
uniform sampler2D huangtu;
// 噪声采样
uniform sampler2D noise;

void main()
{
    // 从一张纹理图片中采样uv对应位置的颜色
    vec4 caodiColor = texture(caodi, uv);
    vec4 huangtuColor = texture(huangtu, uv);
    vec4 noiceColor = texture(noise, uv);
    // 将三张纹理图片的颜色混合
    vec4 finalColor = mix(caodiColor, huangtuColor, noiceColor.r);
    FragColor = vec4(finalColor.rgb, 1.0);
}

 

你可能感兴趣的:(OpenGLES,连载,前端,javascript,人工智能)