gpt4 book ai didi

c++ - 使用QImage为OpenGL 4.5创建纹理

转载 作者:行者123 更新时间:2023-12-02 10:24:10 25 4
gpt4 key购买 nike

这个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);

具有错误纹理的样本图像:

Incorrect texture loading

最佳答案

我已经确定了解决方法。有趣的是,QT 5.11中的QImage(也许在其他版本中也是如此)默认情况下以32位ARGB格式加载图像。因此,我期望将RGB 24位格式或RGB_888作为glTexImage2D的输入。简单的解决方法是使用QImage函数convertToFormat转换图像,如下所示:

    img = img.convertToFormat(QImage::Format_RGB888);

我的openGL格式就是这种情况,GL_RGB与加载的格式不匹配。

关于c++ - 使用QImage为OpenGL 4.5创建纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52992745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com