Camera::Camera(const CameraData& cameraData) : m_pos(cameraData.m_pos), m_direction(cameraData.m_direction), m_up(cameraData.m_up), m_ratio(cameraData.m_ratio), m_fov(cameraData.m_fov), m_zNear(cameraData.m_znear), m_zFar(cameraData.m_zfar), m_mousePos(cameraData.m_mouse_pos) { m_strafeDirection = glm::cross(m_direction, m_up); UpdateViewProjection(); }
void Camera::Update() const { if (isDirty_) { isDirty_ = false; UpdateProjection(); UpdateViewProjection(); signalUpdated_->Run(); } }
void Camera::mouseUpdate(const glm::vec2& position) { glm::vec2 delta = (m_mousePos - position) / ROTATION_SPEED; if (glm::length(delta) < 0.075f) { m_strafeDirection = glm::cross(m_direction, m_up); glm::mat4 rotation = glm::rotate(delta.x, m_up) * glm::rotate(delta.y, m_strafeDirection); m_direction = glm::mat3(rotation) * m_direction; UpdateViewProjection(); } m_mousePos = position; }
void Camera::moveDown() { m_pos -= MOVEMENT_SPEED * m_up; UpdateViewProjection(); }
void Camera::strafeRight() { m_pos += MOVEMENT_SPEED * m_strafeDirection; UpdateViewProjection(); }
void Camera::moveBackward() { m_pos -= MOVEMENT_SPEED * m_direction; UpdateViewProjection(); }
void RendererD3D::SetProjectionMatrix(const Matrix4x4& projection) { mProjectionMatrix = projection; UpdateViewProjection(); }
void RendererD3D::SetViewMatrix(const Matrix4x4& view) { mViewMatrix = view; UpdateViewProjection(); }