2014-10-02 6 views
0

다음은 솔리드 구를 표시하는 코드입니다. ModelMatrix를 사용하여 표시했습니다. 그러나 나는 단단한 것을 볼 수 없다. 영사를 추가해야하는 것과 같은 것이 있어야합니다. 그러나 나는 현재 예상 할 필요가 없다.sput가 glutSolidSphere()와 함께 표시되지 않습니다.

#include <stdlib.h> 
    #include <GL/gl.h> 
    #include <GL/glu.h> 
    #include <GL/glut.h> 
    #include<windows.h> 
    static void Init() { 
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    } 


    static void display() { 
     glMatrixMode(GL_MODELVIEW); 
     glLoadIdentity(); 
     glColor3d(1,1,0); 
     glutSolidSphere(3,4,4); 
    } 

    int main(int argc, char** argv) { 

     glutInit(&argc,argv); 
     glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); 
     glutInitWindowSize(550, 550); 
     glutInitWindowPosition(50, 50); 
     glutCreateWindow("Balloon"); 

     glutDisplayFunc(display); 
     Init(); 
     glutMainLoop(); 
     return 0; 
    } 
+0

문제를 일으킬 수있는 몇 가지 사항이 있습니다. 먼저 표시 함수의 끝에서 glutSwapBuffers()를 호출해야합니다. 그러면 프론트 버퍼가 백 버퍼 (사용자가 그린 버퍼)와 바뀌어 표시됩니다. 두 번째로, 이전 프레임의 내용을 지우려면 표시 함수의 처음에 glClear를 호출해야합니다. 또한 모델 뷰와 프로젝션 매트릭스가 모두 단위 행렬 인 경우 표시 가능한 좌표는 -1에서 1이되므로 현재 구와 구가 너무 큽니다. – user3256930

답변

2

modelview 매트릭스를 identity로 설정하면 기본적으로 카메라가 원점에 직접 배치됩니다. 당신의 구가 비슷하게 원점에서 렌더링되기 때문에, 당신의 시점은 구의 중심에 있습니다. glut이 렌더링되는 방식에 따라, 이것은 지오메트리의 뒷면을보고 있기 때문에 구를 보이지 않게 할 수 있습니다.

또한 투영 행렬을 설정하지 않으면 기본 투영법을 암묵적으로 사용하게됩니다.이 투영법은 모든 3 차원에서 [-1, 1] 범위에 한정된 직교 투영법입니다. 구의 반지름이 3이므로 모든 지오메트리가 투영 절두체 바깥에 있으므로 선택됩니다.

gluLookAt를 사용하여 카메라 위치와 카메라 위치를 시도해보십시오. gluLookAt를 사용하여 카메라를 원점을 바라 보는 0,0,1에 위치시킨 다음 반지름이 0.5 인 구를 그릴 것이 좋습니다. 더 이상 볼의 표면을 프로젝션 프러스 텀의 바깥쪽으로 밀지 않고 더 이상 구의 내부에 있지 않으므로이를 볼 수 있어야합니다.

+0

gluLookAt() 설정이이 경우 도움이됩니까? – Sam

+0

내 대답이 업데이트되었습니다. – Jherico

+0

감사합니다. 효과가있었습니다. – Sam

관련 문제