0

如何在 openGL 中加载具有 64 位深度颜色的 PNG 文件?我尝试过 SOIL 和 SDL,但它显示的纹理是白色的。对于 32 位深度,效果很好(只有当我的 PNG 包含渐变时,它显示不流畅并且颜色有点褪色)-> 某些东西无法正常工作。我已经在 numerues 论坛上尝试过,但似乎没有任何东西可以解决我的问题。这是我与 SOIL 一起使用的功能:

    bool LoadGLTextures()                                  
    {
        texture = SOIL_load_OGL_texture 
    (
    "mountain.png",
    SOIL_LOAD_AUTO,
    SOIL_CREATE_NEW_ID,
    SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT
    );


glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    return true;
  }

当我绘制我使用的纹理时:

    glBindTexture(GL_TEXTURE_2D, texture);
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
    //Code for drawing quad with texture (glTexCoord and  glVertex)

我的项目目录中有我的 png 文件。

4

1 回答 1

2

有 64 位的 PNG 文件吗?让我们来看看:

  1. SOIL 使用的 stb_image 库不支持 64 位 PNG:http ://nothings.org/stb_image.c
  2. SDL 使用 libpng,它应该支持一切。
  3. 确保纹理使用 GL_RGBA16。

我建议尝试手动创建 64 位纹理,以确保您的 OpenGL 实现支持 GL_RGBA16。例如:在内存中创建一个简单的红色渐变,然后将其作为纹理加载。然后,一旦您完成了该工作,请尝试使用 SDL 加载纹理。

于 2014-01-28T19:06:22.960 回答