AUX_RGBImageRec *n - 0: //Структура с результатом загрузки картинки, unsigned int Num;
n-auxDIBImageLoad(s): //Загрузка картинки из файла s. glGenTexturesd. &Num); //Получение одного незанятого номера текстуры. glBindTexture(GL_TEXTURE_2D. Num); //Он будет связан с двумерной текстурой, gl Pi xel Storei(GL_UNPACK_ALIGNMENT. 1): //Строки битовой карты в DIB-формате //выравнивались на границу двойного слова добавлением пустых байт. //Эта функция указывает, что пустых байт нет. //Создание текстуры
glTexImage2D(GL_TEXTURE_2D. 0.3. //0 - не уменьшаем. 3 - байт на точку n->sizeX. // Размеры картинки.
n->sizeY. 0. //Ширина границы GL_RGB. GL_UNSIGNED_BYTE.
n->data): //Указатель на графические данные. продолжение &
Инициализация библиотек и вывод примитивов
Листинг 22.25 (продолжение)
//Настройка текстуры:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER.
GL_LINEAR); //Если берем ближайший пиксел, пишем GL_NEAREST
gl ТехРа ramet егі ( GLJEXTUREJD. GL_TEXTURE_MAG_F I LTER. GL_L I NEAR ) :
glTexEnvi (GL_TEXTURE_ENV. GL JEXTURE JNVMODE.
GL_MODULATE);//Зададим GL_DECAL. цвет не зависит от цвета точек шара
if(n) //Удаляем загруженную картинку - текстура создана.
{
if(n->data)free(n->data):
free(n); //Структуру п система тоже разместила в куче - надо удалять. }
NumTex - Num: //Занесли в поле объекта идентификатор текстуры.
return;
}
В методе Render О не удается использовать одну последовательность команд для каркаса и поверхности. Если текстурирование не выключать, то двумерная текстура тоже влияет на цвет линий. Код метода приведен в листинге 22.26.
Листинг 22.26
void GLOBE::RenderGridCGRIDBALL *Gr,bool Fill) {
if(Fill) {
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D. NumTex);
}
else
{
glDisable(GL_TEXTURE_2D); //glBindTexture(GL_TEXTURE_2D. 0): }
for( int i-0;i<Gr->Nl-l;i+-l) for( int j-0;j<Gr->Nh-l;j+-l) {
if(Fill) {
glBegin(GL_QUADS);
glColor3ub(Gr->Grid[i][j].R.Gr->Grid[i][j].G.Gr->Grid[i][j].B); glNorma!3d( Gr->Gr1d[1][j].Nx. Gr->Grid[i.Ny. Gr->Grid[i][j].Nz):