2012-05-22 3 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

Tim : 예 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을 사용하십시오.

형식GL_RGB을 사용 중이므로 glPixelStorei(GL_UNPACK_ALIGNMENT, 1) before your glTexImage2D()을 사용해 볼 수도 있습니다.

+0

모두에게 감사드립니다. 문제는 질감을로드하기 전에 GL_LINE 모드를 설정하고이를 알아 채지 못했습니다. 정말 바보 같은 하? 그러나 당신의 훌륭한 제안에 대해 모두 똑같이 감사드립니다! 나는 뭔가를 배웠다고 생각해! – TonyLic

관련 문제