滚动纹理的GLSL着色器

lac*_*cas 6 opengl opengl-es glsl

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

Vik*_*pov 11

  1. 使用设置纹理包装模式

    glTexParameteri(TextureID, L_TEXTURE_WRAP_S, GL_REPEAT)

  2. 将名为float的uniform统一添加Time到纹理着色器中

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

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

这是一个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) );
}
Run Code Online (Sandbox Code Playgroud)