簡體   English   中英

bmp 紋理未使用 Open GL 正確加載

[英]bmp texture not loading correctly using Open GL

大家好,我正在嘗試使用 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;
}

然后如果我嘗試渲染它,它會給我: 在此處輸入圖像描述

代替:

在此處輸入圖像描述

但我可以正常渲染: 在此處輸入圖像描述

你有好主意嗎? 不工作的顏色深為 32,工作的顏色為 24

使用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);

當然,當glTexImage2D指定二維紋理圖像時,您可以評估SDL_Surfaceformat屬性並設置適當的格式屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM