2014-01-28 56 views
0

如何加载OpenGL中具有64位深度颜色的PNG文件?我尝试过SOIL和SDL,但是他显示的纹理是白色的。对于32位深度完美的作品(只有如果我的PNG包含渐变,它不会平滑地显示,并且颜色会被略微清除) - >某些功能无法正常工作。我已经尝试在数论论坛上,但似乎没有解决我的问题。这是我与土壤使用功能:OpenGL图像加载64位深度

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文件在我的项目目录。

回答

2

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

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

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

+0

感谢您的意见。使用libpng的SDL与GL_RGBA16一起工作。我现在得到的唯一错误是SDL_GetError();指定我使用sRGB并且它不是正确的颜色格式。即使我从坐标指定为正常绘制,图像仍然以较高的质量显示,但它是颠倒的。还是一个改进。再次感谢。 – Andrew