Chapter 5
Работа с картинками

5.7  Текстура на сфере

     Здесь я покажу, как работать с одной единственной текстурой и накладывать текстуры на сферы. Создайте новый проект с именем sphere. Добавьте глобальную переменную.

AUX_RGBImageRec* photo_image;
В функции main загрузите изображение и создайте текстуру. Поскольку текстура у нас в этом приложении всего одна, то создавать идентификатор для нее не надо.
void main()
{
    auxInitPosition( 50, 10, 400, 400);
    auxInitDisplayMode( AUX_RGB | AUX_DEPTH | AUX_DOUBLE );
    auxInitWindow( "Shapes" );
    auxIdleFunc(display);
    auxReshapeFunc(resize);
    
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_TEXTURE_2D);

    photo_image = auxDIBImageLoad("photo.bmp");

    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    glTexImage2D(GL_TEXTURE_2D, 0, 3, 
                 photo_image->sizeX,
                 photo_image->sizeY,
                 0, GL_RGB, GL_UNSIGNED_BYTE,
                 photo_image->data);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

    auxMainLoop(display);
}

     Отредактируйте функцию display. Здесь все вам знакомо см. 4.1, кроме gluQuadricTexture. Эта функция разрешает или запрещает наложение текстуры на трехмерный объект. Второй параметр GL_TRUE или GL_FALSE. По умолчанию наложение текстуры запрещено.

void CALLBACK display(void)
{
GLUquadricObj *quadObj; 

glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

quadObj = gluNewQuadric(); 
gluQuadricTexture(quadObj, GL_TRUE);
gluQuadricDrawStyle(quadObj, GLU_FILL); 
glColor3d(1,1,1);

glRotated(5, 0,1,0);

glPushMatrix();
 glRotated(-90, 1,0,0);
  gluSphere(quadObj, 3, 16, 16); 
glPopMatrix(); 

gluDeleteQuadric(quadObj);
auxSwapBuffers();
}


Исходный файл смотрите здесь. Исполняемый файл здесь.
Моя фотография здесь.