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);
}

かなり明確ですよね?ただし、最終結果には、テクスチャのない青い四角形しかありません。誰でも私にヒントを与えることができますか?

4

2 に答える 2

1

TextureImage[0]->data正しく設定されていると仮定します:

ただし、最終結果には、テクスチャのない青い四角形しかありません。

デフォルトのGL_MODULATEテクスチャ環境を使用しています。に切り替えるか、glColor3f(0,0,1)glColor3f(1,1,1)使用してGL_DECALください。

for formatを使用しているため、glPixelStorei(GL_UNPACK_ALIGNMENT, 1)前にglTexImage2D()a を試すこともできます。GL_RGB

于 2012-05-22T15:44:38.000 に答える
0

問題は、テクスチャをロードする前に GL_LINE モードを設定し、それに気付かなかったことです。GL_FILL モードを設定した後、すべて問題ありません!!!

于 2012-05-29T02:12:45.870 に答える