Chapter 5
Работа с картинками
5.9 Текстура на чайнике
Текстуру можно наложить на объект любой сложности. Для этого надо разрешить
автоматически генерировать координаты текстуры - glEnable(GL_TEXTURE_GEN_S)
и glEnable(GL_TEXTURE_GEN_T). Далее, вы должны установить один из трех алгоритмов
генерации координат текстур.
- GL_OBJECT_LINEAR
- GL_EYE_LINEAR
- GL_SPHERE_MAP
Алгоритм генерации координат устанавливается с помощью функции glTexGeni.
Первый параметр функции указывает тип координаты, для которой будет установлен
алгоритм. GL_S -горизонтальная координата, GL_T - вертикальная. Второй
параметр этой функции должен быть GL_TEXTURE_GEN_MODE. И третий параметр -
один из перечисленных выше алгоритмов. Создайте очередной проект с именем
teapot. Отредактируйте функцию main, как в предыдущей программе, где мы
накладывали изображение на сферу. Только добавьте там строчку glEnable(GL_AUTO_NORMAL),
чтобы чайник лучше выглядел. Этот режим разрешает расчет векторов нормалей,
что позволяет получать улучшенные изображения, однако занимает некоторое
время. А функцию display отредактируйте, как показано ниже.
void CALLBACK display(void)
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glEnable(GL_TEXTURE_2D);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glColor3d(1,1,1);
glRotated(5,0,1,0);
glPushMatrix();
glTranslated(0,3,0);
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
auxSolidTeapot(2);
glTranslated(0,-3,0);
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
auxSolidTeapot(2);
glTranslated(0,-3,0);
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
auxSolidTeapot(2);
glPopMatrix();
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glDisable(GL_TEXTURE_2D);
auxSwapBuffers();
}
Исходный файл смотрите здесь.
Исполняемый файл здесь.
Моя фотография здесь.
Конечно, фотография накладывается не самым лучшим образом. А что вы хотели?
Машина сама сгенерировать правильно координаты на кривой поверхности
не может. Тем не менее, если в качестве текстуры взять изображение в горошек,
то оно довольно неплохо ляжет на чайник. Я не великий ходожник, и горошек
в PaintBrush'e мне изобразить не удалось. Нет, не подумайте, что я совсем
криворукий, просто, горошины у меня никак не хотели строиться в одну линию,
поэтому я нарисовал следующую картину - "Клеточки". И наложил эту текстуру на чайник.
Исходный файл смотрите здесь.
Исполняемый файл здесь.
|