void kore::Camera::rotateViewQuat(const float angle, const glm::vec3 v3Axis) { glm::vec3 v3View = getForward(); glm::vec3 v3Up(0.0f, 1.0f, 0.0f); glm::quat quatView(0, v3View); glm::quat quatViewResult = glm::rotate(quatView, angle, v3Axis); v3View.x = quatViewResult.x; v3View.y = quatViewResult.y; v3View.z = quatViewResult.z; v3View = glm::normalize(v3View); glm::vec3 v3Side = glm::cross(v3Up, v3View); v3Side = glm::normalize(v3Side); v3Up = glm::cross(v3View, v3Side); v3Up = glm::normalize(v3Up); setOrientation(v3Side, v3Up, v3View); }
/*! * * @param angle * @param axis */ void Camera::RotateByQuat(const float angle, const glm::vec3 axis) { glm::vec3 view = GetLookAt(); glm::vec3 up(0.0f, 1.0f, 0.0f); glm::quat quatView(0, view); glm::quat quatViewResult = glm::rotate(quatView, angle, axis); view.x = quatViewResult.x; view.y = quatViewResult.y; view.z = quatViewResult.z; view = glm::normalize(view); glm::vec3 side = glm::cross(up, view); side = glm::normalize(side); up = glm::cross(view, side); up = glm::normalize(up); SetOrientation(side, up, view); }