Вторая проблема связана с тем, что назначенные значения координат 5 или / могут выйти за пределы интервала (0.0, 1.0). В этом случае возможны два варианта: либо повторять текстуру за пределами интервала, либо использовать предельные значения: 1.0 - если значение координаты превышает 1.0, или 0.0- если значение координаты оказывается меньше 0.0. Настройка режима повторения образца за пределами номинального интервала изменения координаты 5 выполняется вызовом функции д1ТехРагате!ег (СЬ_ТЕХТ"кЕ_ИШ>_5, СЬ_КЕРЕАТ);
9.2. Наложение проективных текстур
Для аналогичной настройки координаты / следует использовать константу СЬ_ТЕХТиКЕ_ШАР_Т. Для настройки режима ограничения в качестве второго аргумента функции д1ТехРагал^ег() необходимо передать константу СЬ_С1АМР.
Третья проблема- влияние дискретизации на изображение наложенной текстуры. При отображении координат текстуры на пространство индексов массива текселей очень редко получается так, что координаты соответствуют центру текселя. Кроме того, размер закрашиваемого пикселя на экране может быть больше или меньше размера текселя (рис. 9.14).
Рис. 9.14. Отображение текселей на пиксели: а -увеличение; б -уменьшение В первом случае размер текселя больше размера пикселя, а во втором - меньше. В обоих случаях быстрее всего изображение будет формироваться, если задать режим выбора ближайшего текселя. Режим увеличения или уменьшения текстуры настраивается с помощью аргументов вызова функции glTexParameterf ( ):
glTexParameterf(GL TEXTURE 2D, GL TEXTURE MAG_FILTER,
GL NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL TEXTURE MÎN FILTER,
GLJŒAREST);
Но такая стратегия может привести в снижению качества изображения. Лучшие результаты дает усреднение интенсивности текселя. В OpenGL используется область усреднения с размерами 2x2, и такой режим настраивается заменой в списке аргументов функции glTexParameterf ( ) константы GL_NEAREST на константу GL_LINEAR.
В OpenGL можно использовать и другой способ разрешения проблемы неравенства размеров - он получил название мип-наложения (mipmapping). Если проекция объекта на экран мала по сравнению с размерами образца текстуры, нет смысла в полной мере использовать степень детализации текстуры, обеспечиваемую массивом хранения образца. OpenGL позволяет создать несколько массивов образцов с уменьшенным разрешением. Если исходный массив имел размеры 64x64, можно, воспользовавшись функцией gluBuild2DMipmaps( ) из библиотеки GLU, создать массивы с размерами 32x32, 16x16, 8x8, 4x4, 2x2 и 1x1: