[英]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.