저는 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에서도 같은 문제가 발생합니다.
위 코드에서 사용 된 숫자는 에서 링크 된 그림을 생성 한 값이라는 것을 명시해야합니다.
내가 알 수있는 한, 좌표는 매끄러운 가장자리를 형성해야합니다. 카메라를 축을 따라 (어느 방향 으로든) 가리키면 상자의 적절한면이 나타나지만 상자의 다른면이 아닌 검정색으로 둘러싸여 있습니다. gluLookAt 함수를 사용하여 원근감 만 변경하지만 해당 호출이 없어도 문제가 지속됩니다. z 축을 따라 변환 할 때 이미지의 크기에는 변화가 없음을 알았습니다. – sabauma
질문을 편집하여 프로젝션 매트릭스를 설정 한 코드를 추가 할 수 있습니까? ('glMatrixMode (GL_PROJECTION);'후의 내용) – geofftnz
glMatrixMode에 대한 호출을하지 않습니다 (어쩌면 이것이 내 문제 임). – sabauma