【问题标题】:Displaying image using SOIL with OpenGL使用带有 OpenGL 的 SOIL 显示图像
【发布时间】:2013-02-06 13:10:48
【问题描述】:

我有以下代码应该显示图像但图像从未出现。

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();

但我只得到一个绿色矩形作为输出。没有编译错误。

【问题讨论】:

  • 你检查tex_2d是否真的不是0(即如果图像加载失败)?还有,glColor调用会影响固定管线中的纹理渲染,你知道吗?
  • 好像有问题。当给出像C:\\Images\\Imagename.tga这样的完整路径时,它会显示imgae,这当然并不总是可能的。所以我想知道我应该为图像文件使用哪个相对路径?我使用 Code::Blocks 10.05 作为我的 IDE
  • 你问我如何构造文件的相对路径? Srsly? .. 是“上一个目录”。所以如果你的代码在/whatever/bin/,图片在/whatever/images/,那么路径就是../images/imagename.tga

标签: image opengl textures soil


【解决方案1】:

SOIL_load_OGL_texture 如果加载成功则返回正确的 OpenGL 纹理标识符,如果加载失败则返回0。你应该经常检查!

在您的情况下,如果错误的路径导致问题,请使用相对路径。这是示例文件夹结构:

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

在这种情况下,相对路径将是"../../data/images/texture.tga"。请注意我们如何向上两次(通过..,到达root/,然后进入data/images/

这样,如果您保持文件夹结构,root/ 驻留在磁盘上的哪个位置并不重要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 2017-03-05
    • 1970-01-01
    相关资源
    最近更新 更多