Chapter 5
Работа с картинками

5.5  Повторение тектуры

     Размножить текстуру на плоскости не составляет большого труда. Давайте немного отредактируем программу из предыдущего раздела. Для того чтобы иметь возможность повторять текстуру, нужно установить параметр GL_REPEAT для ее S и T координат. S-координата текстуры - это горизонтальная координата, T-координата - вертикальная. Второй параметр, который может быть установлен для координат, - GL_CLAMP. Он гарантирует, что текстура не будет размножена. По умолчанию установлено GL_REPEAT. Но я, все-таки, приведу соответствующий код, чтобы вы представляли, как устанавливать этот параметр. В функцию main добавьте следующие строки:

  
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
Теперь отредактируйте функцию display.
  
void CALLBACK display(void)
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

 glEnable(GL_TEXTURE_2D);
 glColor3d(1,1,1);

 glBindTexture(GL_TEXTURE_2D, space_tex );
  glBegin(GL_QUADS);
     glTexCoord2d(0,0); glVertex3d(-5,-5, -0.1);
     glTexCoord2d(0,1); glVertex3d(-5, 5, -0.1);
     glTexCoord2d(1,1); glVertex3d( 5, 5, -0.1);
     glTexCoord2d(1,0); glVertex3d( 5,-5, -0.1);
  glEnd();

 glBindTexture(GL_TEXTURE_2D, photo_tex);
   glBegin(GL_QUADS);
     glTexCoord2d(0,0); glVertex2d(-4,-4);
     glTexCoord2d(0,2); glVertex2d(-4, 4);
     glTexCoord2d(3,2); glVertex2d( 4, 4);
     glTexCoord2d(3,0); glVertex2d( 4,-4);
 glEnd();

 glDisable(GL_TEXTURE_2D);

auxSwapBuffers();
}

     Функция glTexCoord привязывает координаты текстуры к вершинам объекта. Как я уже говорил, левый нижний угол текстуры имеет координату (0,0), а правый верхний - (1,1). Если вы указываете в качестве привязки значение, которое больше единицы, то текстура повторяется. В нашем примере, координату (0,0) текстуры мы привязали к левой нижней вершине плоскости с координатой (-4,-4), а координату (3,2) текстуры - к правой верхней вершине (4,4). Тем самым, мы получили размножение текстуры по горизонтали в количестве трех штук и по вертикали в количестве двух штук. Другие две вершины мы связали соответсвующим образом. Если там указать не те числа, то изображение наклонится.


Исходный файл смотрите здесь. Исполняемый файл здесь.
Моя фотография здесь. Звездное небо здесь.