2009-12-28 5 views
2

OpenGL 프로그램을 수행하면서 문제가 발생했습니다. 문제가 무엇인지 확인할 수 있습니까?OpenGL에서 gluPerspective 사용

을 사용하는 경우 y 축을 기준으로 평면을 회전합니다. glOrtho을 사용할 때는 올바르게 작동하지만 gluPerspective은 그렇지 않습니다.

gluPerspective에 약간의 문제가 있습니다. 왜냐하면 각도를 0으로 변경하면 모든 것을 볼 수 있지만 모든 것을 볼 수 없기 때문입니다. 그러나 45로 변경하면 화면에 아무 것도 나타나지 않고 가까운 값과 먼 값에 대한 단서를 얻지 못합니다.

#include iostream 
#include "Xlib.h" 
#include "gl.h" 
#include "glu.h" 
#include "glut.h" 
#include math.h 
void setupRC() 
{ 
    glClearColor(1,0,0,1); 
    glColor3f(0,0,0); 
} 
void timerfunc(int value) 
{ 
    glutPostRedisplay(); 
    glutTimerFunc(1, timerfunc ,1); 
} 
void RenderScene() 
{ 
    glColor3f(0,0,0); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    static GLfloat rot = 0.0f,x =0.0f , y=1.0f , z=0.0f; 
    rot++; 
    glPushMatrix(); 

    glRotatef(rot,0.0,1.0,0.0); 
    glBegin(GL_POLYGON); 
     glVertex3i(1,-1,0); 
     glVertex3i(1,1,0); 
     glVertex3i(-1,1,0); 
     glVertex3i(-1,-1,0); 
     glVertex3i(1,-1,0); 

    glEnd(); 
    glPopMatrix(); 
    if (rot == 360) 
     rot = 0; 
    glutSwapBuffers(); 
} 
void ChangeSize(GLint w, GLint h) 
{ 
    if(h==0) 
     h = 1; 
    GLfloat aspectratio = (GLfloat)w/(GLfloat)h; 

    glViewport(0,0,w,h); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(45.0f, aspectratio, 1,1000); 
    /*if(w <= h) 
     glOrtho(-100,100,-100/aspectratio, 100/aspectratio, 1,-1); 
    else 
     glOrtho(-100*aspectratio, 100*aspectratio , -100,100,1,-1);*/ 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 

} 

int main(int argc , char **argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); 
    glutInitWindowSize(800,600); 
    glutInitWindowPosition(0,0); 
    glutCreateWindow("chelsea"); 
    glutTimerFunc(1, timerfunc , 1); 
    setupRC(); 
    glutDisplayFunc(RenderScene); 
    glutReshapeFunc(ChangeSize); 
    glutMainLoop(); 

    return 0; 
} 
+0

는 아마도 더 자세한 설명 제목을 작성합니다

당신은 Z 축을 따라 음의 번역을 적용하여, fovy=45에 "모든 일"을 참조 카메라에서 멀리 다각형을 이동 할 수있게하려면

? – torger

+1

완벽한 단어와 구두점을 사용하면 질문을 읽기가 쉬워지며 더 가볍게 답을 얻을 수 있습니다. – Nifle

+0

oh k. 알았어. 의견을 주셔서 감사합니다 – yuneek

답변

9

당신의 문제는 다음과 같습니다 당신의 다각형과 카메라가 같은 좌표에있다. (다각형 카메라 앞에의 아니며, 그것은 그것에 이다.) 다각형가 초기 위치에있을 때, 그것은 바로 볼 수없는 카메라와 정렬

  1. ;
  2. 회전이 시작될 때 카메라의 일부가 카메라 앞쪽으로 지나치지만 너무 가깝게 표시됩니다.

그러나, 설정 fovy 관점 매트릭스 (정말) 가까운 물체를 볼 수있는 (정말로) 광각 카메라, 산출 구축 할 때 ° 0 -, 당신이 뭔가를 볼 수있는 이유를 설명을 "하지만 모든 일".

void RenderScene() 
{ 
    ... 
    glPushMatrix(); 
    glTranslatef(0.,0.,-10.); // Move away from camera 
    glRotatef(rot,0.0,1.0,0.0); 
    glBegin(GL_POLYGON); 
     ... 
    glEnd(); 
    glPopMatrix(); 
    ... 
} 
+0

안녕하세요 대단히 감사합니다. 이제 저는 모든 것을 이해하고 실제 도움을 받았습니다. 감사합니다. – yuneek

관련 문제