我已經搜索了這個,但不幸的是,我找到的唯一答案是那些處理紋理未映射的問題,在這種情況下紋理映射,但看起來不像加載的表面。SDL2與OpenGL紋理顯示不正確
無論如何,忽略了2個方形圖像的強度不是必需的事實(我還沒有正確地研究過),我已經制作了一個功能腳本,用於將表面擴展到2維和一個結構用於存儲調整大小的表面,表面的舊尺寸和紋理的ID。
我的紋理編碼表面是(參數是SDL_Surface *衝浪,antTex * TEX):
tex->w=surf->w;
tex->h=surf->h;
tex->surf=resizeToNearestPow2(surf);
glGenTextures(1, &tex->id);
glBindTexture(GL_TEXTURE_2D, tex->id);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex->surf->w, tex->surf->h, 0, GL_BGRA, GL_UNSIGNED_BYTE, tex->surf->pixels);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glBindTexture(GL_TEXTURE_2D, NULL);
的antTex結構是:
GLuint id; //Texture ID
int w, h; //Original Image Size
int rw, rh; //Resized Canvas Size
SDL_Surface* surf; //Resized Surface
一切有關調整圖像大小,似乎是工作(使用SDL的SDL_SaveBMP函數檢查生成的圖像),我使用SDL2_image.h的IMG_Load來加載原始圖像。
當我畫一個平面,而GL_BLEND啓用映射到它的紋理什麼也不顯示的一切,當我禁用它,我得到這個(紅色是窗口的背景色):
http://i1200.photobucket.com/albums/bb336/DarknessXeagle/error_zps03e1e5a1.png
原始圖像是這樣的:
http://i1200.photobucket.com/albums/bb336/DarknessXeagle/d_zpsc8b9af6f.png
這是我對於所映射的紋理繪製平面功能(參數是antTex * TEX,詮釋的x,int y)對:
glBindTexture(GL_TEXTURE_2D, tex->id);
int w, h;
w=tex->w;
h=tex->h;
GLfloat tw, th;
th=(GLfloat)tex->h/(GLfloat)tex->rh;
tw=(GLfloat)tex->w/(GLfloat)tex->rw;
glPushMatrix();
glTranslatef(x, y, 0);
glBegin(GL_QUADS);
glNormal3f(0, 0, 1);
glTexCoord2f(0, th); glVertex2f(0, h);
glTexCoord2f(tw, th); glVertex2f(w, h);
glTexCoord2f(tw, 0); glVertex2f(w, 0);
glTexCoord2f(0, 0); glVertex2f(0, 0);
glEnd();
glPopMatrix();
glBindTexture(GL_TEXTURE_2D, NULL);