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";
}