这个question似乎是在问一个确切的问题,但在2011年被问到使用的QGLWidget是一种过时的方法,具有固定的管道。
当使用QImage这样的纹理图像看上去已损坏时,我得到的结果不正确。显然,出现了问题,并且未以预期的RGB格式返回位。在这种使用情况下,如何正确使用QImage?
QImage img(texture.file_path.c_str());
unsigned char* actual_texture_img = img.bits();
int width = img.width();
int height = img.height();
if (!actual_texture_img) {
return -1;
}
GLuint texture_id;
glGenTextures(1, &texture_id);
glBindTexture(GL_TEXTURE_2D, texture_id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, actual_texture_img);
glGenerateMipmap(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, 0);
具有错误纹理的图像样本:
答案 0 :(得分:0)
我已经确定了解决方法。有趣的是,QT 5.11中的QImage(也许在其他版本中也是如此)默认情况下以32位ARGB格式加载图像。因此,我期望将RGB 24位格式或RGB_888作为glTexImage2D的输入。简单的解决方法是使用QImage函数convertToFormat
转换图像,如下所示:
img = img.convertToFormat(QImage::Format_RGB888);
这是我的openGL格式的情况,GL_RGB与加载的格式不匹配。