Текстура BMP не загружается правильно, используя Open GL - PullRequest
1 голос
/ 01 декабря 2019

Привет всем, я пытаюсь загрузить текстуру (карту нормалей), используя OpenGL.

GLuint loadTexture(const char* fileName) {
    GLuint textureID;
    glGenTextures(1, &textureID);

    // load file - using core SDL library
    SDL_Surface* tmpSurface;
    tmpSurface = SDL_LoadBMP(fileName);
    if (tmpSurface == nullptr) {
        std::cout << "Error loading bitmap" << std::endl;
    }

    // bind texture and set parameters
    glBindTexture(GL_TEXTURE_2D, textureID);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, tmpSurface->w, tmpSurface->h, 0,
        GL_BGR, GL_UNSIGNED_BYTE, tmpSurface->pixels);
    glGenerateMipmap(GL_TEXTURE_2D);

    SDL_FreeSurface(tmpSurface);
    return textureID;
}

, тогда, если я пытаюсь ее визуализировать, это дает мне: enter image description here

Вместо:

enter image description here

Но я могу сделать это обычно: enter image description here

У вас есть идея? глубокий цвет - 32 для того, кто не работает, и 24 для рабочего

1 Ответ

1 голос
/ 01 декабря 2019

Используйте SDL_ConvertSurfaceFormat, чтобы преобразовать формат поверхности и загрузить преобразованную границу:

SDL_Surface* tmpSurface = SDL_LoadBMP(fileName);
SDL_Surface* formattedSurface = SDL_ConvertSurfaceFormat(
                                tmpSurface, SDL_PIXELFORMAT_ABGR8888, 0);
SDL_FreeSurface(tmpSurface);

// [...]

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, tmpSurface->w, tmpSurface->h, 0,
             GL_RGBA, GL_UNSIGNED_BYTE, formattedSurface->pixels);
SDL_FreeSurface(formattedSurface);

Конечно, вы можете оценить атрибут format SDL_Surface и установите правильный атрибут формата, когда двумерное текстурное изображение указано как glTexImage2D.

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