Другой способ - использовать матрицу текстур (матричный режим GL_TEXTURE) или сделать это в шейдере.
Зависит от того, сколько вершин нужно изменить.Если бы только несколько, это могло бы быть более производительным, но для многих вершин подход матрицы / шейдера текстуры мог бы быть лучше.Обратите внимание, что встроенные матричные операции устарели, т.е. теперь рекомендуется использовать текстуры.
Прокрутка в шейдере будет легкой: out.tex = in.tex + offset
, где смещение может быть униформой, которая устанавливается для каждого кадра или вычисляется издругие входные данные.
Поскольку в вашем примере используется непосредственный режим, я расширю его с помощью режима матрицы текстуры.Но учтите, что это устаревшая методология.
glEnable(GL_TEXTURE_2D);
{
glMatrixMode(GL_TEXTURE);
glLoadIndentity();
glTranslatef(x,y,0);
glMatrixMode(GL_MODELVIEW);
glBegin(GL_QUADS);
{
glTexCoord2f(0.0f, 0.0f); glVertex2f( 0.0f, 0.0f);
glTexCoord2f(1.0f, 0.0f); glVertex2f(_width, 0.0f);
glTexCoord2f(1.0f, 1.0f); glVertex2f(_width, _height);
glTexCoord2f(0.0f, 1.0f); glVertex2f( 0.0f, _height);
}
glEnd();
}
glFlush();
glDisable(GL_TEXTURE_2D);