提问人:Scollier 提问时间:11/17/2023 更新时间:11/17/2023 访问量:44
stb_image出现奇怪的图像结果 [已关闭]
Strange image results with stb_image [closed]
问:
我正在尝试使用 OpenGL 和 C++ 渲染带有 stb_image 的图像。这是我用于生成纹理的代码:
class Texture {
public:
std::string filename;
int width;
int height;
int channels;
unsigned char* data; // Actual image data
unsigned int ID;
Texture(std::string textureFilename);
Texture() = default;
void bind();
};
#define STB_IMAGE_IMPLEMENTATION
#include "texture.hpp"
Texture::Texture(std::string textureFilename) {
filename = textureFilename;
glGenTextures(1, &ID);
data = stbi_load(filename.c_str(), &width, &height, &channels, 0);
if (data) {
GLenum format;
switch (channels) {
case 1:
format = GL_RED;
break;
case 2:
format = GL_RG;
break;
case 3:
format = GL_RGB;
break;
case 4:
format = GL_RGBA;
break;
}
glBindTexture(GL_TEXTURE_2D, ID);
glTexImage2D(GL_TEXTURE_2D, 0, format, width, height, 0, format, GL_UNSIGNED_BYTE, data);
glGenerateMipmap(GL_TEXTURE_2D);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
stbi_image_free(data);
} else {
std::cerr << "Could not find texture file: " << textureFilename << "\n";
exit(1);
}
}
void Texture::bind() {
glBindTexture(GL_TEXTURE_2D, ID);
}
这段代码适用于某些纹理,但是当尝试渲染其他纹理(所有 png)时,它看起来像这样: 这是我尝试渲染的图像之一:
知道这是怎么回事吗?为什么有些 png 有效,而另一些则无效?这只是一些奇怪的 png 编码还是什么?还是这是stb_image库本身的错误?
答: 暂无答案
下一个:RGB图像到灰度图像
评论
GL_UNPACK_ALIGNMENT
4
GL_RGB
glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
stbi_convert_iphone_png_to_rgb