2014-01-28 55 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