2013-08-20 3 views
2

glm :: quat에 정의 된 방향을 따라 카메라의 위치를 ​​변환하려고합니다.glm을 사용하여 쿼터니언을 따라 카메라 번역

void Camera::TranslateCameraAlongZ(float distance) { 
    glm::vec3 direction = glm::normalize(rotation * glm::vec3(0.0f, 0.0f, 1.0f)); 
    position += direction * distance; 
} 

회전이 신원 확인 쿼터니언 일 때 제대로 작동합니다. 회전이 다른 경우 X 및 Z 변환이 작동하지 않습니다. 카메라가 왼쪽으로 45도 회전했을 때 나는 TranslateCameraAlongZ(-0.1f)으로 전화를합니다. 나는 거꾸로 그리고 오른쪽으로 가야 할 때 왼쪽으로 번역되었습니다. 완벽한 90도 단위가 아닌 모든 번역은 비슷하게 엉망입니다. 여기서 내가 뭘 잘못하고 있고, 그것을 고칠 수있는 가장 간단한 방법은 무엇입니까? 나는 "회전"카메라의 회전의 (생각의 역이라고 추측하고있어

glm::mat4 Camera::GetView() { 
    view = glm::toMat4(rotation) * glm::translate(glm::mat4(), position); 
    return view; 
} 

void Camera::RotateCameraDeg(float x, float y, float z) { 
    rotation = glm::normalize(glm::angleAxis(x,glm::vec3(1.0f, 0.0f, 0.0f)) * rotation); 
    rotation = glm::normalize(glm::angleAxis(y,glm::vec3(0.0f, 1.0f, 0.0f)) * rotation); 
    rotation = glm::normalize(glm::angleAxis(z,glm::vec3(0.0f, 0.0f, 1.0f)) * rotation); 
    std::cout << glm::eulerAngles(rotation).x << " " << glm::eulerAngles(rotation).y << " " << glm::eulerAngles(rotation).z << "\n"; 
} 

답변

0

: 경우에 그들은 여기 내 카메라를 회전 내보기 매트릭스를 생성하는 기능과 함수, 관련이있을 수 세계의 대상으로 카메라). 즉, "회전"은 세계 공간에서 카메라 공간으로 객체를 가져옵니다. 카메라의 월드 공간 위치를 앞쪽으로 이동하려면 로컬 전진 벡터 (0,0,1) 또는 (0,0, -1)?을 "rotation"의 역수로 곱해야합니다 (이동하려면 카메라 공간에서 월드 공간에 이르는 벡터), 크기를 조정하고 위치에 추가합니다.