2011-12-19 7 views
0

- (- 50, -50, -50)에서 (50, 50, 50)까지 5 개의면을 표시하고 싶습니다 (상단 면만 표시되지 않음).왜 내 큐브의 측면이 표시되지 않습니까?

void init() 
{ 
    glClearColor(1.0, 1.0, 1.0, 1.0); // Clear the background of our window to white 
    GLfloat specular[] = {1.0, 1.0, 1.0, 1.0}, shininess[] = {50.0}, emission[] = {0.0, 0.0, 0.0, 1.0}, 
     lightPosition[] = {1.0, 1.0, 1.0, 0.0}, lightAmbient[] = {0.0, 0.0, 0.0, 1.0}, 
     lightDiffuse[] = {1.0, 1.0, 1.0, 1.0}, lightSpecular[] = {1.0, 1.0, 0.0, 1.0}; 
    glShadeModel(GL_SMOOTH); 
    glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); 
    glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular); 
    glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, shininess); 
    glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, emission); 
    glLightfv(GL_LIGHT0, GL_POSITION, lightPosition); 
    glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmbient); 
    glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDiffuse); 
    glLightfv(GL_LIGHT0, GL_SPECULAR, lightSpecular); 
    glEnable(GL_LIGHT0); 

    //glEnable(GL_DEPTH_TEST); // makes objects overlap correctly/or not?! 
    glEnable(GL_LIGHTING); 
    glEnable(GL_COLOR_MATERIAL); 
    glEnable(GL_CULL_FACE); // makes it faster?! 
} 

최종 결과 :

well something's wrong!

void drawRectangularPrism(Coordinate corner, Coordinate dimensions) 
{ 
    glPushMatrix(); 
    glBegin(GL_QUADS); 
    // back face 
    glNormal3f(0, 0, 1); 
    glVertex3f(corner.x, corner.y, corner.z); 
    glVertex3f(corner.x + dimensions.x, corner.y, corner.z); 
    glVertex3f(corner.x + dimensions.x, corner.y + dimensions.y, corner.z); 
    glVertex3f(corner.x, corner.y + dimensions.y, corner.z); 
    // bottom face 
    glNormal3f(0, 1, 0); 
    glVertex3f(corner.x, corner.y, corner.z); 
    glVertex3f(corner.x, corner.y, corner.z + dimensions.z); 
    glVertex3f(corner.x + dimensions.x, corner.y, corner.z + dimensions.z); 
    glVertex3f(corner.x + dimensions.x, corner.y, corner.z); 
    // top face 
    glNormal3f(0, -1, 0); 
    glVertex3f(corner.x, corner.y + dimensions.y, corner.z); 
    glVertex3f(corner.x, corner.y + dimensions.y, corner.z + dimensions.z); 
    glVertex3f(corner.x + dimensions.x, corner.y + dimensions.y, corner.z + dimensions.z); 
    glVertex3f(corner.x + dimensions.x, corner.y + dimensions.y, corner.z); 
    // right face 
    glNormal3f(-1, 0, 0); 
    glVertex3f(corner.x + dimensions.x, corner.y, corner.z); 
    glVertex3f(corner.x + dimensions.x, corner.y, corner.z + dimensions.z); 
    glVertex3f(corner.x + dimensions.x, corner.y + dimensions.y, corner.z + dimensions.z); 
    glVertex3f(corner.x + dimensions.x, corner.y + dimensions.y, corner.z); 
    // left face 
    glNormal3f(1, 0, 0); 
    glVertex3f(corner.x, corner.y, corner.z); 
    glVertex3f(corner.x, corner.y, corner.z + dimensions.z); 
    glVertex3f(corner.x, corner.y + dimensions.y, corner.z + dimensions.z); 
    glVertex3f(corner.x, corner.y + dimensions.y, corner.z); 
    glEnd(); 
    glPopMatrix(); 
} 

그리고 경우에 유용

가 여기 OpenGL은 렌더링을 설정 내 기능입니다 다음과 같이 내 큐브 그리기 기능입니다

왜 큐브의 위쪽과 왼쪽면이 표시되지 않습니까?

+0

각면을 개별적으로 그리면 어떤면이 예상대로 그려지지 않고 있는지 알 수 있습니까? –

+0

@DavidBrown 무슨 소리 야? 한 쪽을 제외한 모든 것을 주석으로 처리하여 실제로 그려지지 않았는지 확인하십시오. 그렇다면 왼쪽면과 윗면을 제외하고는 홀로 그려 질 때마다 모든면이 그려집니다. – wrongusername

답변

3

상위/하위 작동합니다, 왼쪽/오른쪽 얼굴 쌍은 단지 '당신에게 피난처를 제안하는 오프셋에 따라 달라집니다 버텍스 와인딩 순서를 고려해야합니다. 로 시작하려면 glFrontFace을보십시오.

0

대퇴사 두근이 대부분을 제거

glEnable(GL_CULL_FACE); 

에 의해 떨어져 학살하고는

관련 문제