2013-08-07 3 views
1

텍스처 매핑에서 매우 이상한 결과가 나타납니다.GL_QUADS의 OpenGL 텍스처 매핑에 이상한 결과가 있습니다.

GL_QUADS의 텍스처 매핑을 수행하기 위해 128 * 128 RGBA bmp 이미지를 사용했다면 다음과 같은 이상한 결과가 나왔습니다. 다른 이미지로 테스트해도 괜찮 았지만이 이미지에서는 매우 이상한 결과가 나타납니다.

잎 이미지를 GL_QUADS에 매핑하고 싶습니다.

다음

내 코드입니다 :

void init (void) 
{ 

glClearColor(0.6, 0.6, 0.6, 0.0); 
glClearDepth(1.0); 
glShadeModel(GL_SMOOTH); 

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



glutSetCursor(GLUT_CURSOR_CROSSHAIR); 
} 

void display(){ 

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glLoadIdentity(); 
gluLookAt(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0); 

GLuint texture[2]; 

unsigned int outWidth; 
unsigned int outHeight; 
unsigned int outDepth; 

glGenTextures(1, &texture[0]); 
glBindTexture(GL_TEXTURE_2D, texture[0]); 

unsigned char * data=loadbmp("leaftest.bmp", outWidth, outHeight, outWidth, true); 

gluBuild2DMipmaps(GL_TEXTURE_2D, 4, outWidth, outHeight, GL_BGRA, GL_UNSIGNED_BYTE, data); 

glBindTexture(GL_TEXTURE_2D, texture[0]); 

glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE); 
    glTranslatef(0, 0, 2); 
    glRotatef(90, 1, 0, 0); 

    glBegin(GL_QUADS); 
     glTexCoord2f(0.0,0.0); 
     glVertex3f(0.0,-0.6,-0.3); 

     glTexCoord2f(0.0,1.0); 
     glVertex3f(0.0,0.0,-0.3); 

     glTexCoord2f(1.0,1.0); 
     glVertex3f(0.0,0.0,0.3); 

     glTexCoord2f(1.0,0.0); 
     glVertex3f(0.0,-0.6,0.3); 

    glEnd(); 
glutSwapBuffers(); 
} 
+2

사진이 있습니까? 내 머리 꼭대기에서 나는 당신의 uv 좌표의 순서가 틀렸다고 생각할 것입니다. –

+0

안녕 저스틴 : 미안하지만 사진을 여기에 추가 할 수 없었습니다. 매핑 될 그림은 잎의 이미지입니다. 그러나 나는 잎의 어떤 부분처럼 보이지 않는 녹색으로 거의 빈 텍스처를 가지고있다. –

답변

1

그것은 당신이 어떤 질감 대상 바인딩하기 전에

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

을하기 때문에 어쩌면이다, 이것은 분명히 잘못하고 몇 가지 예 일할 수있는 이유는 무엇 wounder .

코드가 작성되기 전에 자습서를 확인하십시오 (예 : this). 책 또는 제품을 구입하십시오.