2011-07-15 33 views
1

在FC15上的C OpenGL編程中,Eclipse和SDL紋理存在一個奇怪的問題。加載3D紋理:Linux上的SDL/OpenGL Eclipse

如需安裝測試的目的,訥河示例代碼用於: http://bigdaddysurf.com/blog/?p=21

的程序運行和加載的紋理,如果我們用

$ make 
$ ./lesson07 

在控制檯上運行它 - 因此,所有需要的環境庫被安裝並存在於linux開發環境中。但是,如果我們嘗試在IDE Eclipse上執行相同的操作,程序將運行,但不會加載紋理,因此我們只能看到沒有紋理的白色框。

對項目環境的設置已經在庫到庫鏈接(L),如SDL,SDLmain,SDL_image,GL,GLU等 - 如: OpenGL and GLUT in Eclipse on OS X

與SDL程序工作正常用鍵盤輸入等。但是,紋理不加載。

在從訥河提供的生成文件,其用於運行在控制檯命令行中,我注意到以下信息:

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

然後,讀取被上IDE Eclipse的自動生成的生成文件中,我觀察到顯然這個附加標誌丟失:sdl-config --cflags --libs。應該是這個額外的標誌是什麼阻止命令SDL_LoadBMP顯示紋理?

如果是這樣,關於如何正確調整Eclipse的設置的其他信息以允許生成的IDE Makefile正常工作的一些建議?

關於紋理加載,這裏的方法是功能:

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; 
} 

所有評論受到了高度評​​價。

回答

3

是硬編碼紋理文件的路徑嗎?它是相對的嗎?然後,程序必須從正確的目錄開始,以便相對路徑實際上評估紋理,否則不會找到文件並且不加載紋理。

IDE傾向於在編譯目錄中編譯和運行編譯的二進制文件,破壞所有硬編碼的文件路徑。 Eclipse只是不能用正確的工作目錄啓動程序。根據操作系統的不同,有多種方式可以檢測應用程序二進制文件的位置。有關如何確定程序二進制位置的技巧,請參見http://autopackage.org/docs/binreloc

+0

感謝您的意見。請參閱上面加載圖像的函數,也許它可以給你一些更好的見解。我之前把「data/crate.bmp」放在項目中的所有目錄中,看看是否可以工作,但它還沒有。但我也試圖把文件「crate.bmp」沒有子目錄,也沒有工作到目前爲止。 – ThreaderSlash

+0

在我們要求調試並運行的IDE Eclipse中,圖像不顯示。但是,如果我們找到從Eclipse生成的可執行文件所在的文件夾,並且如果我們單擊該文件,則它將運行並顯示紋理。很奇怪的是,這種行爲。有些暗示爲什麼以及如何解決這個問題?提前致謝。 – ThreaderSlash

+0

這裏的問題是,散佈項目目錄樹中紋理的副本不是直接的方法。添加一個char * buf; puts(buf = getcwd(NULL,0)); free(buf);'在程序的開始部分查看哪個目錄是啓動時的工作目錄。 – datenwolf