繁体   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