2012-05-22 63 views
1

我認爲紋理映射是一項非常簡單的任務。其實,我實施了很多次,但在這次失敗了,不知道爲什麼?我可以保證加載紋理的路線是正確的。任何其他原因讓我感到困惑?爲什麼我不能將紋理加載到我的應用程序中?

這裏是我的代碼:

GLuint mytexture; 
// two functions below come from NeHe's tut. I think it works well. 
AUX_RGBImageRec *LoadBMP(CHAR *Filename)     
{ 
    FILE *File=NULL;          
if (!Filename)          
{ 
    return NULL;          
} 
File=fopen(Filename,"r");       
if (File)           
{ 
    fclose(File);         
    return auxDIBImageLoadA(Filename);    
} 
return NULL;           
} 

int LoadGLTextures()          
{ 
int Status=FALSE;         
AUX_RGBImageRec *TextureImage[1];     
memset(TextureImage,0,sizeof(void *)*1);    

if (TextureImage[0]=LoadBMP("NeHe.bmp")) 
{ 
    Status=TRUE;          
    glGenTextures(1, &mytexture);     
    glBindTexture(GL_TEXTURE_2D, mytexture); 
     glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, 
     GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data); 

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

if (TextureImage[0])         
{ 
    if (TextureImage[0]->data)      
    { 
     free(TextureImage[0]->data);     
    } 

    free(TextureImage[0]);       
} 
return Status;          
} 

//next is my Init() code: 
bool DemoInit(void) 
{ 
if (!LoadGLTextures())       
{ 
    return FALSE;         
} 
glEnable(GL_TEXTURE_2D); 
........//other init is ok 
} 

bool DemoRender() 
{ 
...///render other things 
glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, mytexture); 
glColor3f(0,0,1); 
glBegin(GL_QUADS); 
glTexCoord2f(0, 0); glVertex2f(0, 0); 
glTexCoord2f(1, 0); glVertex2f(200, 0); 
glTexCoord2f(1, 1); glVertex2f(200, 200); 
glTexCoord2f(0, 1); glVertex2f(0, 200); 
glEnd(); 
glDisable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, 0); 
} 

很清楚,哈?但是,最終結果只有一個沒有紋理的藍色矩形。任何人都可以給我一個提示?

+0

沒有任何東西跳出來,因爲不正確。初始化之後你嘗試過glGetError,並且每次渲染循環後都嘗試過一次? – Tim

+5

請停止使用GLAUX。使用一個真正的[圖像加載庫。](http://www.opengl.org/wiki/Image_Libraries) –

+0

添:是的,我使用glGetError,結果爲0.順便說一句,代替紋理,我直接渲染TextureImage [0]與glDrawPixels。我可以以特定的角度看到照片。也許它證明加載過程是可以的。但我認爲我需要紋理。 – TonyLic

回答

0

問題是我加載紋理之前設置GL_LINE模式,我沒有注意到這一點。所以在設置GL_FILL模式之後,一切都很好!

1

假設TextureImage[0]->data被正確填充:

然而,最終的結果只有一個藍色矩形無紋理。

您正在使用默認的GL_MODULATE紋理環境。請將glColor3f(0,0,1)切換爲glColor3f(1,1,1)或使用GL_DECAL

您也可以嘗試glPixelStorei(GL_UNPACK_ALIGNMENT, 1) before your glTexImage2D(),因爲您使用的是GL_RGB,對於格式

+0

謝謝大家。我發現問題是我在加載紋理之前設置了GL_LINE模式,但我沒有注意到這一點。真的很愚蠢的哈?但是,非常感謝你們提供的優秀建議!我想我已經學到了一些東西! – TonyLic

相關問題