2013-02-21 48 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/驻留在磁盘上。