如果您设置了glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT)(我认为这是默认设置),您只需绘制一个全屏四边形并以小步长递增s纹理坐标(如果您需要,它也可以垂直工作).
大于1.0的值将包裹在纹理的左侧,不需要额外的任何内容.并且,不需要两个绘制调用.
你没有说你是否有ES 1.0或2.0,但如果它是2.0,你可以将偏移作为一个整体传递,并将其添加到着色器中的纹理坐标,这比每次更改顶点数据(texcoord)更有效帧.虽然它是一个每帧一次的东西,但它可能无关紧要,它可能只是一样.
编辑:
我不知道AndEngine,可能有更简单,更方便的命令来绘制纹理全屏四边形…但是给定“OpenGL ES 1.0”,使用立即模式并假设默认的MVP矩阵,这可能看起来像这样非常粗略的例子:
glBindTexture(GL_TEXTURE_2D,cloudy_sky_texture);
glTexImage(...);
glTexParameteri(GL_TEXTURE_2D,GL_REPEAT);
...
float offset = 0.0f;
while(!quit)
{
offset += 1.0f/texture_size;
glBindTexture(GL_TEXTURE_2D,cloudy_sky_texture);
glBegin(GL_QUADS);
glVertex2f(-1.0f,-1.0f);
glTexCoord2f(0.0f + offset,0.0f);
...
glVertex2f(1.0f,1.0);
glTexCoord2f(1.0f + offset,1.0f);
glEnd();
DrawForegroundStuff();
}
为简洁起见,省略了一些行,立即模式并不好,并且有足够的优化空间,但原则应该是清楚的.你真的只是绘制一个四边形并增加纹理坐标的s分量.