문제

내 GLUT 응용 프로그램에서 카메라로 평면을 시뮬레이션하고 있습니다. 비행기 속도가 낮 으면 카메라가 떨어지면 코가 땅을 향해 지적되도록하려고합니다. 나의 첫 번째 본능은 그냥 바꾸는 것이 었습니다 정점 -90degrees에서 아래쪽으로 향할 때까지. 그러나 비행기가 측면이나 거꾸로 기울어지면지면을 향한 방향을 바꾸는 지점이 있기 때문에 피치를 바꿀 수는 없습니다.

이제 나는 'lookat.y'를 아래쪽으로 이동시킴으로써 이것을 대략적으로 시뮬레이션하려고 노력하고 있습니다. 이를 위해 카메라를 설정하는 데 사용하는 모든 현재 카메라 좌표를 얻으려고 노력하고 있습니다 (Eye.x, Eye.y, Eye.Z, Look.x, Xook.z, UP.X, UP .y, up.z). 그런 다음 새로운 수정 된 값으로 세트를 리콜하십시오.

카메라 기능을 제어하기 위해 Camera.cpp 및 Camera.h로 작업했습니다. 그들은 찾을 수 있습니다 여기

모든 값을 얻는 방법을 추가 한 후에는 다양한 카메라 모션이 만들어지면 실제로 눈 값 만 업데이트됩니다. 내 질문은이 값을 어떻게 검색 하는가입니다.

Glloadmaxtrix 호출은이 기능에 있습니다

void Camera :: setModelViewMatrix(void)

{ // load model view matrix with existing camera values

    float m[16];

    Vector3 eVec(eye.x, eye.y, eye.z);

    m[0] =  u.x; m[4] =  u.y; m[8]  =  u.z;  m[12] = -eVec.dot(u);

    m[1] =  v.x; m[5] =  v.y; m[9]  =  v.z;  m[13] = -eVec.dot(v);

    m[2] =  n.x; m[6] =  n.y; m[10] =  n.z;  m[14] = -eVec.dot(n);

    m[3] =  0;   m[7] =  0;   m[11] =  0;    m[15] = 1.0;

look.x = u.y; look.y = v.y; look.z = n.y; 

    glMatrixMode(GL_MODELVIEW);

    glLoadMatrixf(m);

}

여기 행렬에서 '눈', 'lookat'및 'up'값을 얻는 방법이 있습니까? 아니면이 값을 얻기 위해 다른 일을해야합니까?

-당신의 도움에 미리 감사드립니다

도움이 되었습니까?

해결책

링크 된 카메라 클래스는 실제 OpenGL 클래스가 아니지만 작업하기에 충분히 간단해야합니다.

인용 된 함수는 카메라 객체의 현재 값을 가져 와서 OpenGL로 보냅니다. 카메라의 설정 기능을 보면 프로그램이 실제로 저장하는 값을 계산하는 방법을 알 수 있습니다.

눈 값은 직접 저장됩니다. Lookat 값은 벡터 수학에 의한 (눈 -n)의 값입니다. UP 값은 가장 어렵지만 벡터 수학을 올바르게 기억한다면 up = (n cross u)라고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top