Загрузка и наложение текстур. (C++/SDL/OpenGL)

Модератор: Модераторы разделов

Аватара пользователя
Corsair
Сообщения: 842
Статус: Местный "тролль"
ОС: Fedora

Загрузка и наложение текстур.

Сообщение Corsair »

Есть функция для загрузки изображений:

Код: Выделить всё

SDL_Surface* ImageLoad(char *file){
 SDL_Surface *temp1, *temp2;
 temp1 = SDL_LoadBMP(file);
 temp2 = SDL_DisplayFormat(temp1);
 SDL_FreeSurface(temp1);
 return temp2;
}


С загрузкой текстуры проблем не возникает.

Код: Выделить всё

SDL_Surface* texture;
texture = SDL_LoadBMP(file);


Как мне наложить текстуру, скажем, не такой квадратик?

Код: Выделить всё

 glTexCoord2d(0.0,0.0); glVertex2d(-1.0,-1.0);
 glTexCoord2d(1.0,0.0); glVertex2d(+1.0,-1.0);
 glTexCoord2d(1.0,1.0); glVertex2d(+1.0,+1.0);
 glTexCoord2d(0.0,1.0); glVertex2d(-1.0,+1.0);


По идее все должно быть вот так...

Код: Выделить всё

glEnable(GL_TEXTURE_2D);
glGenTextures( 1, &texture );
glBindTexture( GL_TEXTURE_2D, texture );


но OpenGL не понимает тип данных SDL_Surface и, соответственно, glGenTextures и glBindTexture начинают ругаться на неправильный тип. Как можно преобразовать тип в понятный для OpenGL?

Рассмотрю альтернативные варианты загрузки и наложения текстур :grin:

ЗЫ: Делал явное преобразование SDL_Surface* к GLuint*, ошибок компиляции не возникает, но текстура не отображается.
Жестокий стоячий админ (с) коллега
Спасибо сказали:
Аватара пользователя
indie
Сообщения: 87

Re: Загрузка и наложение текстур.

Сообщение indie »

Из туториалов nehe:

Код: Выделить всё

SDL_Surface *TextureImage[1];

    /* Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit */
    if ( ( TextureImage[0] = SDL_LoadBMP( "data/nehe.bmp" ) ) )
        {

        /* Set the status to true */
        Status = TRUE;

        /* Create The Texture */
        glGenTextures( 1, &texture[0] );

        /* Typical Texture Generation Using Data From The Bitmap */
        glBindTexture( GL_TEXTURE_2D, texture[0] );

        /* Generate The Texture */
        glTexImage2D( GL_TEXTURE_2D, 0, 3, TextureImage[0]->w,
              TextureImage[0]->h, 0, GL_BGR,
              GL_UNSIGNED_BYTE, TextureImage[0]->pixels );

        /* Linear Filtering */
        glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
        glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
}
Спасибо сказали:
Аватара пользователя
Corsair
Сообщения: 842
Статус: Местный "тролль"
ОС: Fedora

Re: Загрузка и наложение текстур.

Сообщение Corsair »

indie писал(а):
18.06.2007 21:19
Из туториалов nehe:

Код: Выделить всё

SDL_Surface *TextureImage[1];

    /* Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit */
    if ( ( TextureImage[0] = SDL_LoadBMP( "data/nehe.bmp" ) ) )
        {

        /* Set the status to true */
        Status = TRUE;

        /* Create The Texture */
        glGenTextures( 1, &texture[0] );

        /* Typical Texture Generation Using Data From The Bitmap */
        glBindTexture( GL_TEXTURE_2D, texture[0] );

        /* Generate The Texture */
        glTexImage2D( GL_TEXTURE_2D, 0, 3, TextureImage[0]->w,
              TextureImage[0]->h, 0, GL_BGR,
              GL_UNSIGNED_BYTE, TextureImage[0]->pixels );

        /* Linear Filtering */
        glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
        glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
}



Благодарю. Поленился получше поискать по сайту NeHe :blush:
Жестокий стоячий админ (с) коллега
Спасибо сказали: