[英]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。 紋理是否以某種方式在內部刪除? 我的渲染有問題嗎?
如果需要,我願意提供更多代碼。
編輯:我不知道我做了什么......現在我的渲染看起來像這樣:
從SDL_LoadBMP文檔:
注意:加載24位Windows BMP文件時,像素數據點將加載為藍色,綠色,紅色和非紅色,綠色,藍色(如人們所料)。
因此,提供給glTexImage2D的格式參數需要是GL_BGR
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.