【发布时间】:2012-06-01 09:44:48
【问题描述】:
如何在平面上滚动纹理? 所以我有一个带有纹理的平面,我可以使用着色器从右向左滚动(无限)它上面的纹理吗?
【问题讨论】:
如何在平面上滚动纹理? 所以我有一个带有纹理的平面,我可以使用着色器从右向左滚动(无限)它上面的纹理吗?
【问题讨论】:
使用设置纹理环绕模式
glTexParameteri(TextureID, L_TEXTURE_WRAP_S, GL_REPEAT)
将名为 Time 的浮动制服添加到您的纹理着色器中
在获取纹理样本时使用 texture2D(sampler, u + Time, v) 之类的东西。
使用代码中的某些计时器更新 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) );
}
【讨论】: