void makeCheckerboardO:
void setTexture(GLuint textureName):
}:
Здесь приведены только три метода данного класса, которые нам понадобятся для отображения текстур. Остальные методы и прочие детали обсуждаются в главе 10. Функция readBMPFileO читает
Визуализация граней для усиления реалистичности
BMP-файл1 и записывает значения пикселей в свой объект типа pixmap. Эта функция детально описывается в приложении В. Остальные два метода рассматриваются ниже.
В нашем примере приложения OpenGL будет использовано шесть текстур. Для их создания мы вначале построим для каждой текстуры объект класса RGBpixmap посредством следующей функции:
RGBpixmap pix[6]:
// create six (empty) pixmaps
// создаем шесть (пустых) пиксельных карт
и затем загрузим в каждый такой объект нужное текстурное изображение. После этого для определения текстуры передадим каждый объект в OpenGL.
Создание процедурной текстуры
Создадим для начала шахматную текстуру с помощью метода makeCheckerboardO. Узор шахматной доски хорошо известен и прост для создания, а его геометрическая правильность делает его подходящей текстурой для проверочных целей. Данное приложение генерирует пиксельную карту шахматной доски в pix[0] с помощью вызова метода:
pi х[0] .makeCheckerboardO.
Сам метод имеет следующий вид:
void RGBpixmap:: makeCheckerboardO {
// make checkerboard pattern // создаем шахматный узор
nRows - nCols - 64:
pixel = new RGB[3 * nRows * nCols]:
if(! pixel) {cout « "out of memory!";return;} // «выход за пределы памяти!»
long count - 0:
for(int i - 0; i < nRows: i++)
for(int j - 0: j < nCols; j++) {
int с - (((i/8) + (j/8)) %2) * 255:2 pixel[count].r - c;
// red // красный
pixel[count].g - с:
// green // зеленый
pixel[count++].b - 0;
// blue // синий
}
}
В данной подпрограмме создается пиксельный массив размерностью 64 на 64, где каждый пиксел является RGB-тройкой. В OpenGL требуется, чтобы и ширина, и высота текстурных пиксельных карт составляла степень двойки. Пиксельная карта размещена в памяти как единый длинный байтовый массив, заполняемый строка за строкой снизу вверх, а также слева направо в пределах строки. Вместе с каждым