#pragma once #include using namespace glm; class Poseable { public: // Assumes that forward, up, and right are orthogonal and normalized Poseable( const vec3& position = vec3(0.0f, 0.0f, 0.0f), const vec3& forward = vec3(0.0f, 0.0f, 1.0f), const vec3& up = vec3(0.0f, 1.0f, 0.0f), const vec3& right = vec3(1.0f, 0.0f, 0.0f) ); void update_position(const vec3& position); // Assumes that forward, up, and right are orthogonal and normalized void update_orientation(const vec3& forward, const vec3& up, const vec3& right); void translate(const vec3& translation); void rotate(const vec3& axis, float angle); const mat4& get_orientation_matrix() const { return m_orientation_matrix; } protected: mat4 m_orientation_matrix; };