2014-11-29 2 views
3

OpenGL에서 객체를 올바르게 확대하는 방법을 찾기 위해 여러 포럼 (여기 및 다른 곳)에서 검색했습니다. 많은 것을 읽은 후에, 마침내 GluLookAt()를 사용하는 방법을 생각했습니다. 아무런 문제없이 카메라를 움직일 수있게되었습니다. 나는 카메라가 움직이면서 객체가 사라지기 때문에 그것이 작동한다는 것을 안다. 그러나 나는 카메라를 패닝하면서 객체를 확대하고 싶다. 나는 카메라 위치가 그것을 처리 할 것이지만 카메라 위치를 업데이트하는 것이 도움이되지 않는다고 생각했다. 나는 또한 gScalef()를 시도했지만 'w'키를 누를 때 한 번만 호출됩니다.OpenGL에서 제대로 돌리 (객체에서 이동하고 객체에서 이동)하는 방법

void keyboard(unsigned char c, int x,int y) 
{ 
    if(c==27) 
    {exit(0);} 
    if (c=='w') 
    { 
     glMatrixMode(GL_MODELVIEW); 
     glLoadIdentity(); 

     float forward_x, forward_y,forward_z; 
     gluLookAt(current[0], current[1], current[2], 
     current[0]+center_x, current[1]+center_y, current[2]+center_z, 
     0.0, 1.0, 0.0); 
     // glScalef(1.2,1.2,1.2); 
     current[0]= (current[0]- 0.1*center_x); 
     current[1]= (current[1]-0.1*center_y); 
     current[2]= (current[2]- 0.1*center_z); 

    } 

} 

void Camera_rotation(int x, int y) 
{ 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    center_x = cos(-0.05*x)*sin(-.05*y); 
    center_y = cos(-.05*y); 
    center_z = sin(0.05*x)*sin(.05*y); 
    eye_x = x; eye_y = 1.0, 
    float new_x = x; 
    gluLookAt(current[0], current[1], current[2], 
      current[0]+center_x, 
      current[1]+center_y, 
      current[2]+center_z, 
      0.0, 1.0, 0.0); 
    render(); 
} 

'current'및 'center_x [yz]'는 전역 변수입니다. 누군가 도울 수 있습니까?

+1

아래 답변에 대한 의견을 말하면 용어를 삭제해야합니다. 카메라를 움직이게하지 않고도 카메라를 확대/축소하면 FOV가 변경됩니다. 당신이 달성하기를 원하는 것은 * 확대/축소가 아닌 * 돌리 카메라입니다. 돌리와 줌의 조합은 알프레드 히치콕 (Alfred Hitchcock)이 인기를 얻은 현기증 (Vertigo) 효과라고도합니다. – datenwolf

+0

@datenwolf : 제 잘못입니다. 전에 결코 돌리라는 단어를 보지 못했습니다. 고맙습니다. 나는 quesiton 헤더 –

답변

3

카메라가 대상을 조준하는 동안 확대/축소 효과를 얻으려면 Perspective Projection MatrixFOV (시야)을 설정해야합니다. FOV이 작을수록 확대/축소 영역이 작아집니다.

주제에 관한 훌륭한 튜토리얼은 here입니다. 끝에 오른쪽 확대/축소에 대해 이야기합니다. 토론 후

+0

을 편집 할 것입니다. 1 인칭 슈팅 게임에서 볼 때 오브젝트쪽으로 걷는 것이 FOV가 바뀌는 것입니까? 나는 그것이 의미가있을 것이라고 생각하지만, 어떻게 든 그것은 너무 많은 계산처럼 느낀다. 카메라 자체가 원추형으로 보이는 경우이 문제가 해결되지 않습니까? –

+0

FOV는 일반적으로 게임 내내 동일하게 유지됩니다. 특히 FOV를 사용하여 게임을 시작했을 때 멋진 게임을 제공하는 게임이 있습니다. Minecraft와 CoD가 그것을합니다. – Iggy

+0

그게 문제 야, 내가 직면하고 있다고 생각해. 나는 카메라를 물체에 더 가깝게 이동시키고 물체를 가까이서보고 싶다는 뜻입니다. 기술적으로 카메라 위치가 물체에 가까워 지므로 카메라 위치가 더 커야합니다. 그게 내가 얻지 못하는 것입니다. –

0

가능한 해결 방법 : 렌더링() 함수 (또는 표시 기능)에서

는 투영 행렬을 언급. 이렇게하면 카메라 동작 방식이 설정됩니다. 코드 :

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
gluPerspective(30.0,1.0,-1.0,1.0);// FOV = 30 degrees, aspect ratio is one and I can see throughout the plane 
관련 문제