안녕하세요 여러분 glm 라이브러리에서 lookAt를 사용하는 Camera 클래스를 사용하려고합니다. 나는 4 점을 가지고 있는데, 첫 번째는 눈, 즉 공간상의 카메라 위치, 두 번째는 카메라가보고있는 지점, 세 번째는 카메라의 방향을 설정하는 upp입니다. , 그리고 네 번째는 측면입니다. 그것은 look - eye와 upp-ee의 교차 생성물입니다.lookAt를 사용한 카메라 회전
결국 결국 나는 3 개의 벡터로 된베이스를 얻었고, 그 중 3 개의 벡터는 모두 원점을 가지고 있습니다. 나는 카메라의 좌표 시스템을 가지고있다.
내 카메라 클래스에서 전 세계의 좌표계가 아닌 카메라의 좌표계를 중심으로 회전 할 수 있기를 원합니다. 그래서 제가하고있는 일은 카메라 좌표계의 축 중 하나를 회전시키는 것입니다.
I는 다음과 같이 초기 값을 가지는 클래스를 생성 :
void Observer::initialize(glm::vec3 eye, glm::vec3 look, glm::vec3 upp, glm::vec3 side)
{
this->eye = eye; // (0.0, 0.0, 0.0)
this->look = look; // (0.0, 0.0, -1.0)
this->upp = upp; // (0.0, 1.0, 0.0)
this->side = side; // (1.0, 0.0, 0.0)
}
를 I는 I 이렇게 GLM에서 함수 호출, 예를 들면, x 축에 대한 좌표계를 회전 할 때 :
void Observer::pitch(GLfloat pitch)
{
glm::mat4 rotate(1.0f);
rotate = glm::rotate(rotate, pitch, side - eye);
look = glm::vec3(rotate * glm::vec4(look, 1.0f));
upp = glm::vec3(rotate * glm::vec4(upp, 1.0f));
}
을
지금까지, 모든 포인트가 여전히 카메라의 좌표계를 형성하고 모든 벡터가 서로 수직이라는 것을 이해하고 있습니다.
그러나 나는 lookAt 함수를 사용하여이 점을 사용하여 카메라를 세계에 배치합니다. 나는 다른 방법으로 회전하는 것처럼
glm::mat4 view = glm::lookAt(eye, look, upp);
내가 많이 회전하기 시작하면 OpenGL을
에서 모델 뷰 행렬이 행렬을 곱는 몇 회전 후 카메라 (회전을 "반영" 나는 더 나은 방법으로 실제로 일어나고있는 것을 기술하는 방법을 모른다.
나는 정말로 무슨 일이 일어나고 있는지 이해하지 못한다. 회전을 적용한 후 벡터를 정규화해야합니까? 짐벌 잠금 장치에 문제가 있습니까 (나는 짐벌 잠금 장치에 대해 많이 모릅니다)?