簡體   English   中英

機頂盒圖像加載庫返回白色紋理

[英]stb image loading library returning white textures

我正在嘗試將紋理加載到我的小型OpenGL應用程序中。 我已經看到了很多有關stb庫的建議。 它確實符合我的需求,因為它不必構建或鏈接,我只需要包含標題即可。

不幸的是,我似乎無法(在Linux筆記本電腦或Windows台式機上)正確加載紋理。 它可以正確找到文件(因為尺寸正確適合我當時正在測試的任何紋理),但是無法正確加載像素。

我最初以為這是我使用OpenGL代碼產生的錯誤,但是在進一步檢查數組stb返回給我時,我發現無論我嘗試加載什么圖像,它都用255作為每個單個值填充。

這是我的紋理加載代碼:

bool Texture::LoadTextureFromFile(std::string path)
{
  bool success = true;

  int comp, width, height;
  unsigned char* image = stbi_load(path.c_str(), &width,
      &height, &comp, 0);

  texture_width = width;
  texture_height = height;

  glGenTextures(1, &texture_id);

  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB,
      GL_UNSIGNED_BYTE, image);

  glBindTexture(GL_TEXTURE_2D, 0);

  stbi_image_free(image);

  return success;
}

我已經為此花了一周的時間來敲打我的頭,我真的很想在這個問題上有所啟發。

如果有人認為有幫助,我也可以展示我的OpenGL初始化代碼。

您的opengl代碼確實有錯誤。 您必須在glGenTextures(1, &texture_id)之后綁定紋理。 通過添加該代碼,我使您的代碼正常工作(我還將RGB更改為RGBA,因為我使用的圖像文件是RGBA格式)。

bool load(std::string filename) {
  int w, h, comp; 
  GLuint t; 

  unsigned char * im = stbi_load(filename.c_str(), &w, &h, &comp, 0);

  glGenTextures(1, &t); 

  glBindTexture(GL_TEXTURE_2D, t);

  glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, im); 

  glBindTexture(GL_TEXTURE_2D, 0);

  return true;
}

該代碼對我有用。 如果您說從stbi_load僅獲得255個值,則可能還存在其他錯誤。 確保您具有正確的文件名路徑,並確保啟用了紋理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM