滚动纹理的GLSL着色器

时间:2012-06-01 09:44:49

标签: opengl opengl-es glsl

如何滚动平面上的纹理? 所以我有一个带纹理的平面,我可以使用着色器向右滚动(无限)纹理吗?

1 个答案:

答案 0 :(得分:10)

  1. 使用

    设置纹理包装模式

    glTexParameteri(TextureID, L_TEXTURE_WRAP_S, GL_REPEAT)

  2. 将名为Time的浮点制服添加到纹理着色器

  3. 在获取纹理样本时使用类似texture2D(sampler, u + Time, v)的内容。

  4. 使用代码中的某个计时器更新Time制服。

  5. 这是一个GLSL着色器:

    /*VERTEX_PROGRAM*/
    
    in vec4 in_Vertex;
    in vec4 in_TexCoord;
    
    uniform mat4 ModelViewMatrix;
    uniform mat4 ProjectionMatrix;
    
    out vec2 TexCoord;
    
    void main()
    {
         gl_Position = ProjectionMatrix * ModelViewMatrix * in_Vertex;
    
         TexCoord = vec2( in_TexCoord );
    }
    
    /*FRAGMENT_PROGRAM*/
    
    in vec2 TexCoord;
    
    uniform sampler2D Texture0;
    
    /// Updated in external code
    uniform float Time;
    
    out vec4 out_FragColor;
    
    void main()
    {
       /// "u" coordinate is altered
       out_FragColor = texture( Texture0, vec2(TexCoord.x + Time, TexCoord.y) );
    }