GLSL着色器滚动纹理

7
如何在平面上滚动纹理? 我有一个带纹理的平面,我可以使用着色器将其上的纹理向左滚动(无限)吗?
1个回答

12
  1. 使用 glTexParameteri(TextureID, L_TEXTURE_WRAP_S, GL_REPEAT) 来设置纹理的包裹模式。

  2. 在您的纹理着色器中添加名为 Time 的浮点型 uniform 变量。

  3. 在获取纹理采样时,使用类似于 texture2D(sampler, u + Time, v) 的代码。

  4. 使用代码中的计时器来更新 Time uniform 变量。

下面是一个 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) );
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接