在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;
}
所有評論受到了高度評價。
感謝您的意見。請參閱上面加載圖像的函數,也許它可以給你一些更好的見解。我之前把「data/crate.bmp」放在項目中的所有目錄中,看看是否可以工作,但它還沒有。但我也試圖把文件「crate.bmp」沒有子目錄,也沒有工作到目前爲止。 – ThreaderSlash
在我們要求調試並運行的IDE Eclipse中,圖像不顯示。但是,如果我們找到從Eclipse生成的可執行文件所在的文件夾,並且如果我們單擊該文件,則它將運行並顯示紋理。很奇怪的是,這種行爲。有些暗示爲什麼以及如何解決這個問題?提前致謝。 – ThreaderSlash
這裏的問題是,散佈項目目錄樹中紋理的副本不是直接的方法。添加一個char * buf; puts(buf = getcwd(NULL,0)); free(buf);'在程序的開始部分查看哪個目錄是啓動時的工作目錄。 – datenwolf