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 требуется, чтобы и ширина, и высота текстурных пиксельных карт составляла степень двойки. Пиксельная карта размещена в памяти как единый длинный байтовый массив, заполняемый строка за строкой снизу вверх, а также слева направо в пределах строки. Вместе с каждым


⇐ Предыдущая| |Следующая ⇒