2011-10-25 2 views
2

나는 OpenGL을 배우고있다. 첫 번째 2D 프로그램을 만들었지 만 gluPerspective를 계속 사용하고 있습니다.gluPerspective() 사용하기

3D 프로젝트를 어떻게 만들 수 있는지 알기 위해 약간의 테스트를 시도하고 있지만, 내가 누락 된 부분과이 작은 테스트 작업을 수행하는 데 필요한 것이 무엇인지 알아낼 수 없습니다.

void init_perspective() 

{ 

SDL_Init(SDL_INIT_EVERYTHING); 
SDL_SetVideoMode(640, 480, 32, SDL_OPENGL); 
SDL_WM_SetCaption("OpenGL Test", NULL); 

glClearColor(0, 0, 0, 0); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
gluPerspective(45, 1.333, 0, 100); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glClear(GL_COLOR_BUFFER_BIT); 

} 

int main(int argc, char **argv) 

{ 

init_perspective(); 

glTranslatef(200, 200, 50); 
glColor4f(1.0,1.0,1.0,1.0); 

glBegin(GL_QUADS); 

    glVertex3f(0, 0 ,0); 
    glVertex3f(50,0 ,10); 
    glVertex3f(50,50,30); 
    glVertex3f(0, 50,0); 

glEnd(); 

glLoadIdentity(); 

SDL_GL_SwapBuffers(); 

SDL_Delay(1000); 

SDL_Quit(); 

return 0; 

} 

아무도 내가 사용할 수있는 함수 호출이 무엇인지 말할 수 없으므로이 테스트 코드에서 빠져 나와 놀 수 있고 3D OpenGL이 어떻게 작동 하는지를 배울 수있어서 감사 할 것입니다.

+0

SDL이란 무엇입니까? 저는 OpenGL으로 잠시 일해 왔으며 SDL을 보지 못했습니다. –

+0

들어 본 적이 없으며, 항상 OpenGL을 사용했습니다. 마이클에게 감사드립니다. –

답변

6

gluPerspective (45, 1.333, , 100);

zNear를 0으로 설정하지 마십시오. 그것은 엉망 the math : zNear는 0, zNear0.01 또는 12과 같은 몇 가지 작은 양의 수를 선택 0

로 설정해서는 안됩니다 접근으로 r = zFar/zNear가 무한대에 접근

때문입니다.

편집 : 기본적으로

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

glTranslatef(0,0,-5); 
glColor4f(1.0,1.0,1.0,1.0); 

glBegin(GL_QUADS); 
    glVertex2f(-1,-1); 
    glVertex2f(1,-1); 
    glVertex2f(1, 1); 
    glVertex2f(-1, 1); 
glEnd(); 

SDL_GL_SwapBuffers(); 

SDL_Delay(1000); 

SDL_Quit(); 

return 0; 
} 

가 위치 (0, 0, 0)에서 -Z 축을 아래로 찾고 : 또한, 당신의 형상을 볼 수 있도록 카메라 어딘가에 넣어.

+0

팁을 주셔서 감사합니다. 필자가 본 코드 예제 중 zNear가 0.1f 또는 그와 비슷한 값으로 설정된 이유가 궁금했습니다. 코드에서 값을 1로 변경했지만 큰 문제라고 생각하지 않습니다. –

+2

1로 설정하면 카메라가 객체에서 1 단위보다 작 으면 객체가 렌더링되지 않습니다. . 반면에 zNear를 너무 작은 값으로 설정하면 유한 정밀 z 버퍼가 있기 때문에 렌더링 아티팩트가 생길 수 있습니다. – NickLH

+0

gluPerspective()를 사용할 때 ViewPorts를 사용해야하는지 궁금합니다. glOrtho를 사용할 때 ViewPort를 사용하지 않아도됩니다. 일반적으로 직교 뷰를 전체적으로 투영합니다. –