2014-03-06 3 views
1

UPDATE의 OpenGL : 텍스처 로딩 있지만 적용되지


내가 glutSolidCube 사용을 중단하고 수동으로 질감을 적용하기 시작했습니다. 아직 아무 소용이 없습니다. 어떤 아이디어가 아니라면 텍스처가 큐브에 성공적으로 적용된 예를 들어 볼 수 있습니까?

glRotatef(180, 0.0f, 1.0f, 0.0f); 

glBindTexture(GL_TEXTURE_CUBE_MAP, texture); 

glTranslatef(pos_x, 0, pos_z); 

int size = 1; 

// Begin Rending 
glBegin(GL_QUADS); 

// Face 1 
glNormal3f(0.0f, 0.0f, 1.0f); 

glTexCoord2f(0.0f, 0.0f); 
glVertex3f(size, size,-size); 

glTexCoord2f(1.0f, 0.0f); 
glVertex3f(-size, size,-size); 

glTexCoord2f(1.0f, 1.0f); 
glVertex3f(-size, size, size); 

glTexCoord2f(0.0f, 1.0f); 
glVertex3f(size, size, size);  

// Face 2 

glNormal3f(0.0f, 0.0f,-1.0f); 

glTexCoord2f(0.0f, 0.0f); 
glVertex3f(size,-size, size);  

glTexCoord2f(1.0f, 0.0f); 
glVertex3f(-size,-size, size); 

glTexCoord2f(1.0f, 1.0f); 
glVertex3f(-size,-size,-size); 

glTexCoord2f(0.0f, 1.0f); 
glVertex3f(size,-size,-size); 

// Face 3 


glTexCoord2f(0.0f, 0.0f); 
glVertex3f(size, size, size);  

glTexCoord2f(1.0f, 0.0f); 
glVertex3f(-size, size, size); 

glTexCoord2f(1.0f, 1.0f); 
glVertex3f(-size,-size, size);  

glTexCoord2f(0.0f, 1.0f); 
glVertex3f(size,-size, size); 

// Face 4 

glNormal3f(0.0f,-1.0f, 0.0f); 

glTexCoord2f(0.0f, 0.0f); 
glVertex3f(size,-size,-size); 

glTexCoord2f(1.0f, 0.0f); 
glVertex3f(-size,-size,-size); 

glTexCoord2f(1.0f, 1.0f); 
glVertex3f(-size, size,-size); 

glTexCoord2f(0.0f, 1.0f); 
glVertex3f(size, size,-size); 

// Face 5 

glNormal3f(1.0f, 0.0f, 0.0f); 

glTexCoord2f(0.0f, 0.0f); 
glVertex3f(-size, size, size);  

glTexCoord2f(1.0f, 0.0f); 
glVertex3f(-size, size,-size);  

glTexCoord2f(1.0f, 1.0f); 
glVertex3f(-size,-size,-size); 

glTexCoord2f(0.0f, 1.0f); 
glVertex3f(-size,-size, size); 

// Face 6 

glNormal3f(1.0f, 0.0f, 0.0f); 

glTexCoord2f(0.0f, 0.0f); 
glVertex3f(size, size,-size); 

glTexCoord2f(1.0f, 0.0f); 
glVertex3f(size, size, size); 

glTexCoord2f(1.0f, 1.0f); 
glVertex3f(size,-size, size); 

glTexCoord2f(0.0f, 1.0f); 
glVertex3f(size,-size,-size);  

glEnd(); 

나는 OpenGL을 + GLUT 간단한 복셀 기반의 게임을 만들고있어 내가 텍스처를로드하고 큐브에 적용에 문제가 있어요.

texture = SOIL_load_OGL_cubemap (
    "block.png", 
    "block.png", 
    "block.png", 
    "block.png", 
    "block.png", 
    "block.png", 
    SOIL_LOAD_RGB, 
    SOIL_CREATE_NEW_ID, 
    SOIL_FLAG_MIPMAPS 
); 

을 그리고 여기 추첨 방식 적용 : 텍스처는 여기에 생성

glEnable(GL_TEXTURE_GEN_S); //enable texture coordinate generation 
glEnable(GL_TEXTURE_GEN_T); 
glBindTexture(GL_TEXTURE_2D, texture); 
glutSolidCube(2); 
glDisable(GL_TEXTURE_GEN_S); //enable texture coordinate generation 
glDisable(GL_TEXTURE_GEN_T); 

하지만 응용 프로그램을 실행할 때, 나는 아직도 단색 흰색 큐브를 얻을.

http://i.snag.gy/ahxUt.jpg

오전 나는 매우 분명 뭔가 빠진?

+0

'glEnable (GL_TEXTURE_CUBE_MAP)'했습니까? 왜'GL_TEXTURE_CUBE_MAP' 대신'glBindTexture()'에서'GL_TEXTURE_2D' 타겟을 사용하고 있습니까? – genpfault

+0

이전 솔루션과 새로운 솔루션을 모두 사용해 보았습니다. –

+0

2D 텍스처를 사용 했습니까? (glEnable (GL_TEXTURE_2D)). 또한 나는 SOIL에 익숙하지 않지만 큐브 맵이 아닌 2D 텍스처 만 사용해야합니다. 따라서 SOIL_load_OGL_cubemap에 대한 호출이 잘못된 것일 수 있습니다. 일반 2D 텍스처를로드 할 SOIL 함수가 있는지 살펴 봅니다. – redsoxfantom

답변

0

glutSolidCube에는 uv 좌표가 포함되어 있지 않으므로 OpenGL에서 텍스처를 적용해야하는 위치를 알 수있는 방법이 없습니다. 나는 단지 glutSolidTeapot이 이런 식으로 텍스처링 될 수 있다고 믿는다. 확실하지.

어쨌든 uv 좌표를 자동 생성하지 않는 glutSolidCube 텍스처를 쉽게 만들 수있는 방법이 없습니다. 이 작업을 수행하는 방법을 잘 모르겠지만이 link이 도움이 될 수 있습니다. 자동 생성 좌표를 처리하고 싶지 않으면 수동으로 큐브를 그리고 그곳에서 uv를 지정하십시오.

+0

질문이 업데이트되었습니다. –