簡體   English   中英

OpenGL紋理的奇怪事件

[英]Odd happenings of OpenGL Texturing

我相當肯定我的紋理加載沒有問題,但是,我無法讓它們渲染!

我初始化GL時啟用GL_TEXTURE_2D 然后我用這個函數加載紋理:

GLuint loadTexture(std::string filepath)
{
    SDL_Surface *image;
    if ( image = SDL_LoadBMP( filepath.c_str() ) )
    {
        GLuint tex_id;
        glGenTextures( 1, &tex_id );
        glBindTexture( GL_TEXTURE_2D, tex_id );

        glTexImage2D(   GL_TEXTURE_2D, 0, 3, image->w,
                        image->h, 0, GL_RGB,
                        GL_UNSIGNED_BYTE, image->pixels );

        SDL_FreeSurface(image);

        glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
        glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );

        textures.emplace(getFilename(filepath), tex_id);

        glBindTexture(GL_TEXTURE_2D, 0);

        return tex_id;
    }
    else
    {
        // std::cout << "[!!] Could not open " << filepath << "! \n";
        return -1;
    }
}

加載紋理,然后將紋理名稱放在地圖中,文件名作為鍵。 該地圖是全局定義為std::map <std::string, GLuint> textures 我可以遍歷地圖並驗證GL正確分配紋理名稱。 最后,我繼續繪制我的四邊形:

glBindTexture(GL_TEXTURE_2D, textures["MY_IMAGE.BMP"]);

glBegin(GL_QUADS);

glTexCoord2f(0.0, 0.0);
glVertex3d(0.0,  0.0, iNode->verticies[1]);

glTexCoord2f(1.0, 0.0);
glVertex3d(1.0,  0.0, iNode->verticies[2]);

glTexCoord2f(1.0, 1.0);
glVertex3d(1.0,  1.0, iNode->verticies[3]);

glTexCoord2f(0.0, 1.0);
glVertex3d(0.0,  1.0, iNode->verticies[4]);

glEnd();

一些值得注意的事情:

  • 在繪制之前已經定義了這些四邊形的顏色。 如果我注釋掉所有顏色定義,格式為glColor3ub(r, g, b) ,則四邊形呈現黑色。
  • 如果我調用glIsTexture(textures["MY_IMAGE.BMP"]) ,則返回false。
  • 紋理名稱仍然正確存儲在地圖中。
  • 我正在使用OpenGL 2.1。

紋理是否以某種方式在內部刪除? 我的渲染有問題嗎?

如果需要,我願意提供更多代碼。

編輯:我不知道我做了什么......現在我的渲染看起來像這樣: 在此輸入圖像描述

SDL_LoadBMP文檔:

注意:加載24位Windows BMP文件時,像素數據點將加載為藍色,綠色,紅色和非紅色,綠色,藍色(如人們所料)。

因此,提供給glTexImage2D的格式參數需要是GL_BGR

暫無
暫無

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

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