2013-01-15 68 views
1

最近我的紋理變得瘋狂。我試圖繪製的最後2個紋理如下圖所示。我希望它出現在第一張照片中,但無論我做了什麼,它都堅持像後一張一樣出現。請忽略文本,它與紋理無關。紋理停止正常工作

enter image description here enter image description here

我使用GLUT我openGL的窗口,並GLM OBJ裝載機的TGA讀者。我以前多次使用過讀卡器,並沒有問題。它剛剛停止工作,爲我的最後兩次嘗試加載紋理。相關代碼如下:

Texture onScreenTexture; 


if (LoadTGA(&onScreenTexture, "back.tga")) 
    { 
     glGenTextures(1, &onScreenTexture.texID); 
     glBindTexture(GL_TEXTURE_2D, onScreenTexture.texID); 
     glTexImage2D(GL_TEXTURE_2D, 0, onScreenTexture.bpp/8, onScreenTexture.width, onScreenTexture.height, 0, onScreenTexture.type, GL_UNSIGNED_BYTE, onScreenTexture.imageData); 

     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 

     if (onScreenTexture.imageData) 
     { 
      free(onScreenTexture.imageData); 
     } 
    } 

glEnable(GL_TEXTURE_2D); 
    glBindTexture(GL_TEXTURE_2D, onScreenTexture.texID); 
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); 

    glBegin(GL_QUADS); 
     glTexCoord2f(0,0); glVertex2f(10.0, 10.0); 
     glTexCoord2f(0,1); glVertex2f(260, 10.0); 
     glTexCoord2f(1,1); glVertex2f(260, 110); 
     glTexCoord2f(1,0); glVertex2f(10.0, 110); 
    glEnd(); 
    glDisable(GL_TEXTURE_2D); 
+0

[編輯:轉移到評論。 ]我通過試驗解決了這個問題。顯然如果你的圖像文件的寬高比大於或等於形狀的寬高比,它會給出這樣的結果。 –

回答

3

這是無關的寬度/高度的比值(雖然你似乎使其旋轉90度,造成了一些額外的拉伸),但與行的包裝的像素。這從對角線模式中可以看出,表明漸進式對齊問題,還有彩色條紋,表明RGB數據在每一行上的排列方式不同。

在你的情況,你正在加載一個TGA,它沒有行填充,但將它傳遞給GL,默認期望像素行被填充到4個字節的倍數。

您的工作紋理可能是32位而不是24位,或者是4個像素寬的倍數,其中任何一種都可以自然對齊。

此問題的可能修補程序是:你的質感

  • 更改尺寸,這樣就沒有填充。
  • 更改您的紋理加載,使得填充是什麼GL預計
  • 告訴GL的質地如何包裝,使用(例如)一致glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+0

其實我的紋理是24位的。非常感謝你提供明確的答案 –