2017-05-21 13 views
0

저는 현재 http://www.codecolony.de/opengl.htm#camera의 코드를 사용하고 있고 씬 위에서 궤도를 그리는 기능을 추가하려고합니다 (카메라를 객체 주위로 이동).opengl 서클에서 위치 회전

주어진 중심에서 원을 그리는 것처럼 생각했습니다. 거의 작동합니다. 내가 선택한 지점에서 회전하며보기가 올바른 방향입니다. 문제는 반경이 일정하지 않고 항상 중심에 더 가깝게 접근한다는 것입니다. 여기

코드는 내가 쓰기된다

void CCamera::RotateView(GLfloat Angle, SF3dVector center) // in degree 
{ 
    // rotate the position over the center 
    Position.x = cos(Angle*PIdiv180) * (Position.x - center.x) - sin(Angle*PIdiv180) * (Position.z - center.z) + center.x; 
    Position.z = sin(Angle*PIdiv180) * (Position.x - center.x) + cos(Angle*PIdiv180) * (Position.z - center.z) + center.z; 

    // adjust the viewDir 
    ViewDir = center - Position; 

    //now compute the new RightVector (by cross product) 
    RightVector = CrossProduct(&ViewDir, &UpVector); 

} 

는 I (카메라가) 항상 중심에서 같은 거리에 숙박하지 않는 이유 어떤 아이디어가 있습니까?

답변

0

음, 전체 클래스를 제공하지 않았으므로 Position은 카메라 위치를 설명하는 멤버 변수라고 가정합니다. 당신은 무한한 수학적 정확성을 가지고 있다고 가정하는 추기경 실수를하고 있습니다. 당신은 매번 위치 값을 반복하고 있으므로 점점 더 많은 에러가 발생합니다. 그것은 실제로 몇백 번의 반복을 합친 것입니다. 당신이해야 할 일은 매번 새로운 위치를 계산하는 것입니다. 당신이 원하는 것은 gluLookAt()입니다. [gluLookatDocumentation] [1]