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();
}
Исходный файл смотрите здесь.
Исполняемый файл здесь.
Моя фотография здесь.
|