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):

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