2011-09-11 4 views
2

저는 OpenGL을 처음 접했고 skybox를 렌더링하는 중에 문제가 발생했습니다. 이 그림은 문제를 잘 설명합니다. 스카이 박스의OpenGL Skybox가 올바르게 렌더링되지 않습니다.

옆면은 표시되지 않습니다, 나는합니다 (그림에서처럼) 가장자리를 볼 때 이미지가 바로 옆에 서로 렌더링처럼 은 그냥 대신의 등 다양한 측면의 외모 입방체. 내가 여기에 기본적인 뭔가를 놓친 거지 같은

void display (void) // Create The Display Function 
{ 
glPushMatrix(); 
glDepthMask(0); 
/* replace this code with your height field implementation */ 
/* you may also want to precede it with your rotation/translation/scaling */ 
/* Clear buffers */ 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glLoadIdentity(); 
gluLookAt(0.0, 0.0, 0.0, // eye position 
      0.1, 0.0, 0.1, // camera direction 
      0.0, 1.0, 0.0); // up direction 

glPushAttrib(GL_ENABLE_BIT); 
glEnable(GL_TEXTURE_2D); 
glDisable(GL_DEPTH_TEST); 
glDisable(GL_LIGHTING); 
glDisable(GL_BLEND); 

glColor4f(1.0, 1.0, 1.0, 1.0); 

/*!!!!!!!!!!!!!! FRONT FACE !!!!!!!!!!!!!!!*/ 

glBindTexture(GL_TEXTURE_2D,frontTextureId); // select which texture to use 
glBegin(GL_QUADS); 
    glTexCoord2f(0, 0); glVertex3f( 0.5f, 0.5f, -0.5f); 
    glTexCoord2f(1, 0); glVertex3f(-0.5f, 0.5f, -0.5f); 
    glTexCoord2f(1, 1); glVertex3f(-0.5f, -0.5f, -0.5f); 
    glTexCoord2f(0, 1); glVertex3f( 0.5f, -0.5f, -0.5f); 
glEnd(); 

/*!!!!!!!!!!!!!! LEFT FACE !!!!!!!!!!!!!!!*/ 
glBindTexture(GL_TEXTURE_2D, leftTextureId); // select which texture to use 
glBegin(GL_QUADS); 
    glTexCoord2f(0, 0); glVertex3f( 0.5f, 0.5f, 0.5f); 
    glTexCoord2f(1, 0); glVertex3f( 0.5f, 0.5f, -0.5f); 
    glTexCoord2f(1, 1); glVertex3f( 0.5f, -0.5f, -0.5f); 
    glTexCoord2f(0, 1); glVertex3f( 0.5f, -0.5f, 0.5f); 
glEnd(); 

/*!!!!!!!!!!!!!! RIGHT FACE !!!!!!!!!!!!!!!*/ 
glBindTexture(GL_TEXTURE_2D, rightTextureId); // select which texture to use 
glBegin(GL_QUADS); 
    glTexCoord2f(0, 0); glVertex3f(-0.5f, 0.5f, -0.5f); 
    glTexCoord2f(1, 0); glVertex3f(-0.5f, 0.5f, 0.5f); 
    glTexCoord2f(1, 1); glVertex3f(-0.5f, -0.5f, 0.5f); 
    glTexCoord2f(0, 1); glVertex3f(-0.5f, -0.5f, -0.5f); 
glEnd(); 

/*!!!!!!!!!!!!!! BACK FACE !!!!!!!!!!!!!!!*/ 
glBindTexture(GL_TEXTURE_2D, backTextureId); // select which texture to use 
glBegin(GL_QUADS); 
    glTexCoord2f(0, 0); glVertex3f(-0.5f, 0.5f, 0.5f); 
    glTexCoord2f(1, 0); glVertex3f( 0.5f, 0.5f, 0.5f); 
    glTexCoord2f(1, 1); glVertex3f( 0.5f, -0.5f, 0.5f); 
    glTexCoord2f(0, 1); glVertex3f(-0.5f, -0.5f, 0.5f); 

glEnd(); 

/*!!!!!!!!!!!!!! TOP FACE !!!!!!!!!!!!!!!*/ 
glBindTexture(GL_TEXTURE_2D, upTextureId); // select which texture to use 
glBegin(GL_QUADS); 
    glTexCoord2f(0, 1); glVertex3f(-0.5f, 0.5f, -0.5f); 
    glTexCoord2f(0, 0); glVertex3f(-0.5f, 0.5f, 0.5f); 
    glTexCoord2f(1, 0); glVertex3f( 0.5f, 0.5f, 0.5f); 
    glTexCoord2f(1, 1); glVertex3f( 0.5f, 0.5f, -0.5f); 
glEnd(); 

/*!!!!!!!!!!!!!! BOTTOM FACE !!!!!!!!!!!!!!!*/ 
glBindTexture(GL_TEXTURE_2D, downTextureId); // select which texture to use 
glBegin(GL_QUADS); 
    glTexCoord2f(0, 0); glVertex3f(-0.5f, -0.5f, -0.5f); 
    glTexCoord2f(0, 1); glVertex3f(-0.5f, -0.5f, 0.5f); 
    glTexCoord2f(1, 1); glVertex3f( 0.5f, -0.5f, 0.5f); 
    glTexCoord2f(1, 0); glVertex3f( 0.5f, -0.5f, -0.5f); 
glEnd(); 

/*!!!!!!!!!!!!!! end of drawing of a textured quad !!!!!!!!!!!!!!!*/ 
glPopAttrib(); 
glPopMatrix(); 

/* Swap buffers, so one we just drew is displayed */ 
glutSwapBuffers(); 
} 

는 느낌,하지만 확실히 어떤 아닙니다. 코드는 자습서 사이트 (http://sidvind.com/wiki/Skybox_tutorial)에서 다소 축 어적으로 입니다. 코드는 Ubuntu Linux에서 g ++ 4.5.2로 컴파일되었지만 visual studio에서도 같은 문제가 발생합니다.

위 코드에서 사용 된 숫자는 에서 링크 된 그림을 생성 한 값이라는 것을 명시해야합니다.

답변

3

텍스처가 큐브 가장자리를 통해 완벽한 결합을 형성해야합니다. 제공 한 스크린 샷에서이 이미지는 완벽한 결합을 형성하지 않습니다 (하늘을 바라보십시오).

또한 투영 행렬을 확인하십시오. 투시 변환을 설정하고 있습니까?

는 원근 투영 (3D 애플 리케이션을위한 가장 일반적인)을 설정하려면 :

glMatrixMode(GL_PROJECTION); // switch to projection matrix 
glLoadIdentity(); // reset projection 
gluPerspective(90.0,4.0/3.0,0.01,10.0); // 90deg FOV, 4:3 aspect ratio, 0.01 near clip plane, 10.0 far clip plane 
glMatrixMode(GL_MODELVIEW); // back to model matrix 
+0

내가 알 수있는 한, 좌표는 매끄러운 가장자리를 형성해야합니다. 카메라를 축을 따라 (어느 방향 으로든) 가리키면 상자의 적절한면이 나타나지만 상자의 다른면이 아닌 검정색으로 둘러싸여 있습니다. gluLookAt 함수를 사용하여 원근감 만 변경하지만 해당 호출이 없어도 문제가 지속됩니다. z 축을 따라 변환 할 때 이미지의 크기에는 변화가 없음을 알았습니다. – sabauma

+0

질문을 편집하여 프로젝션 매트릭스를 설정 한 코드를 추가 할 수 있습니까? ('glMatrixMode (GL_PROJECTION);'후의 내용) – geofftnz

+0

glMatrixMode에 대한 호출을하지 않습니다 (어쩌면 이것이 내 문제 임). – sabauma

1

그것은 오른쪽의 질감처럼 나에게 보이는 왼쪽 이미지의 왼쪽에있을해야한다. 그래서 당신 큐브의 잘못된 부분을 텍스처링하는 것 같아요.

+0

가능하지만 그게 내 주요 문제의 원인이라고 생각하지 않습니다. – sabauma

관련 문제