Загрузка 3D-текстуры: SDL / OpenGL в Linux Eclipse - PullRequest
1 голос
/ 15 июля 2011

Существует странная проблема с текстурами Eclipse и SDL в программировании на C OpenGL на FC15.

В целях тестирования настройки используется пример кода NeHe: http://bigdaddysurf.com/blog/?p=21

Программа запускается и загружает текстуру, если мы запускаем ее на консоли с

$ make
$ ./lesson07 

- поэтому все необходимые библиотеки среды установлены и присутствуют в среде разработки linux. Однако, если мы попытаемся сделать то же самое в IDE Eclipse, программа запустится, но текстура не будет загружена, поэтому мы увидим только белое поле без текстуры.

Настройка для среды проекта содержит библиотеки библиотек компоновщиков (L), такие как SDL, SDLmain, SDL_image, GL, GLU и т. Д., Например: OpenGL и GLUT в Eclipse на OS X

Программы с SDL отлично работают для ввода с клавиатуры и т. Д. Однако текстура не загружается.

В Makefile, предоставленном NeHe, который используется для запуска командной строки в консоли, я заметил следующую информацию:

CC = gcc -Wall -ansi
all:
$(CC) lesson07.c -o lesson07 -lGL -lGLU `sdl-config --cflags --libs`

Затем, читая Makefile, который автоматически генерируется в IDE Eclipse, я заметил, что, по-видимому, этот дополнительный флаг отсутствует: sdl-config --cflags --libs. Должен ли быть этот дополнительный флаг, что мешает команде SDL_LoadBMP отображать текстуру?

Если да, то как правильно настроить эту дополнительную информацию для настроек Eclipse, чтобы сгенерированный Makefile IDE работал правильно?

По поводу способа загрузки текстуры, вот функция:

int LoadGLTextures( )
{
/* Status indicator */
int Status = FALSE;

/* Create storage space for the texture */
SDL_Surface *TextureImage[1];

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

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

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

    /* Load in texture 1 */
    /* 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 );

    /* Nearest Filtering */
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
             GL_NEAREST );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
             GL_NEAREST );

    /* Load in texture 2 */
    /* Typical Texture Generation Using Data From The Bitmap */
    glBindTexture( GL_TEXTURE_2D, texture[1] );

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

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

    /* Load in texture 3 */
    /* Typical Texture Generation Using Data From The Bitmap */
    glBindTexture( GL_TEXTURE_2D, texture[2] );

    /* Mipmapped Filtering */
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
             GL_LINEAR_MIPMAP_NEAREST );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
             GL_LINEAR );

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

/* Free up any memory we may have used */
if ( TextureImage[0] )
    SDL_FreeSurface( TextureImage[0] );

return Status;
}

Все комментарии высоко ценятся.

1 Ответ

3 голосов
/ 15 июля 2011

Путь к файлу текстуры жестко закодирован?Это реально?Затем программа должна быть запущена из правильного каталога, чтобы относительный путь фактически оценивал текстуру, в противном случае файл не найден и текстура не загружена., ломая любые жестко закодированные пути к файлам.Eclipse просто не запускает программу с правильным рабочим каталогом.Существуют различные способы определения местоположения двоичных файлов приложений в зависимости от ОС.См. http://autopackage.org/docs/binreloc, чтобы узнать, как определить двоичное местоположение программы.

...