2013-02-21 50 views
2

我有一個應該顯示圖像,但永遠不會出現圖像的代碼。使用OpenGL顯示圖像使用SOIL

GLuint tex_2d = SOIL_load_OGL_texture (
    "ImageName.tga", 
    SOIL_LOAD_AUTO, 
    SOIL_CREATE_NEW_ID, 
    SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT 
); 
glColor3f(0.0f,1.0f,.50f); 
glBindTexture(GL_TEXTURE_2D, tex_2d); 
glEnable(GL_TEXTURE_2D); 
glBegin(GL_QUADS); 
    glTexCoord2d(0,0);  glVertex3f(factor*BOARD_BREADTH/2,-factor*BOARD_LENGTH/2,0); 
    glTexCoord2d(0,1);  glVertex3f(factor*BOARD_BREADTH/2,factor*BOARD_LENGTH/2,0); 
    glTexCoord2d(1,1);  glVertex3f(-factor*BOARD_BREADTH/2,factor*BOARD_LENGTH/2,0); 
    glTexCoord2d(1,0);  glVertex3f(-factor*BOARD_BREADTH/2,-factor*BOARD_LENGTH/2,0); 


glEnd(); 

但我只得到一個綠色的矩形作爲輸出。沒有編譯錯誤。

+1

你有沒有檢查'tex_2d'實際上是不是0(即如果圖像加載失敗)?另外,'glColor'調用會影響固定管道中的紋理渲染,你知道嗎? – 2013-02-21 11:29:30

+0

看起來有問題。當像'C:\\ Images \\ Imagename.tga'這樣的完整路徑給出這當然不總是可能的時候,它會顯示imgae,所以我想知道應該使用哪個相對路徑作爲圖像文件?我正在使用** Code :: Blocks ** 10.05作爲我的IDE – 2013-02-22 18:47:57

+0

你在問m e如何爲文件構建相對路徑? * Srsly?*'..'是「上一個目錄」。因此,如果你的代碼位於'/ whatever/bin /'和'/ whatever/images /'中,則路徑將是'../ images/imagename.tga'。 – 2013-02-22 18:58:27

回答

2

SOIL_load_OGL_texture如果加載成功則返回正確的OpenGL紋理標識符,如果失敗則返回0。你應該經常檢查!

就你而言,如果錯誤的路徑導致了問題,請使用相對路徑。這裏的例子文件夾結構:

root/ 
--- data/ 
-------- music/ 
-------- images/ 
------------ texture.tga 
--- bin/ 
-------- debug/ 
------------ program.exe 

在這種情況下,相對路徑將是"../../data/images/texture.tga"。注意我們是如何去了兩次(由..,去root/,然後進入data/images/

這樣,如果你把文件夾結構,沒關係,其中root/駐留在磁盤上。