Использование QImage для создания текстуры для OpenGL 4.5 - PullRequest
0 голосов
/ 25 октября 2018

Этот вопрос , кажется, задает точный вопрос, но его задают в 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

1 Ответ

0 голосов
/ 25 октября 2018

Я нашел исправление для этого.Интересно, что QImage в QT 5.11 (возможно, и в других версиях) по умолчанию загружает изображения в 32-битном формате ARGB.Итак, я ожидаю RGB 24-битный формат или RGB_888 в качестве входных данных для glTexImage2D.Простое исправление заключается в преобразовании изображения с использованием функции QImage convertToFormat, например, так:

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

Это был мой формат openGL, GL_RGB не соответствует загруженному формату.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...