Пример кода включает автоматическую генерацию координат текстуры, поэтому ваши вызовы glTexCoord2f игнорируются. Автоматическая генерация проецируется на плоскость Z. Поскольку ваш четырехугольник представляет собой плоскость Y, он, по сути, просто растягивает один пиксель текстуры по всему четырехугольнику.
Чтобы заставить его работать, отключите автоматическую генерацию текстуры перед вашим glBegin, а затем снова включите его после glEnd.
т.е:.
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2f(-1, -1);
glTexCoord2f(1,0);
glVertex2f(1, -1);
glTexCoord2f(1, 1);
glVertex2f(1, 1);
glTexCoord2f(0,1);
glVertex2f(-1, 1);
glEnd();
glEnable (GL_TEXTURE_GEN_S);
glEnable (GL_TEXTURE_GEN_T);
В качестве альтернативы, вы можете настроить автоматическую генерацию текстур для проецирования на плоскость Y и опустить вызовы glTexCoord2f, а затем установить обратно в Z, когда закончите:
float zPlane[4] = {0., 0., 1., 0.};
float yPlane[4] = {0., 1., 0., 0.};
glTexGenfv (GL_T, GL_OBJECT_PLANE, yPlane);
glBegin(GL_QUADS);
glVertex2f(-1, -1);
glVertex2f(1, -1);
glVertex2f(1, 1);
glVertex2f(-1, 1);
glEnd();
glTexGenfv (GL_T, GL_OBJECT_PLANE, zPlane);