| @@ -31,6 +31,8 @@ Camera::Camera(vec3 const &position, vec3 const &target, vec3 const &up) | |||||
| m_gamegroup = GAMEGROUP_BEFORE; | m_gamegroup = GAMEGROUP_BEFORE; | ||||
| m_drawgroup = DRAWGROUP_CAMERA; | m_drawgroup = DRAWGROUP_CAMERA; | ||||
| /* Create a default perspective */ | |||||
| SetPerspective(45.f, 800.f, 600.f, -1000.f, 1000.f); | |||||
| SetPosition(position); | SetPosition(position); | ||||
| } | } | ||||
| @@ -43,6 +45,17 @@ void Camera::SetPosition(vec3 const &pos) | |||||
| m_position = pos; | m_position = pos; | ||||
| } | } | ||||
| void Camera::SetOrtho(float width, float height, float near, float far) | |||||
| { | |||||
| m_proj_matrix = mat4::ortho(width, height, near, far); | |||||
| } | |||||
| void Camera::SetPerspective(float fov, float width, float height, | |||||
| float near, float far) | |||||
| { | |||||
| m_proj_matrix = mat4::perspective(fov, width, height, near, far); | |||||
| } | |||||
| mat4 const &Camera::GetViewMatrix() | mat4 const &Camera::GetViewMatrix() | ||||
| { | { | ||||
| return m_view_matrix; | return m_view_matrix; | ||||
| @@ -81,8 +94,6 @@ void Camera::TickGame(float seconds) | |||||
| m_target += vec3(rightleft, 0, -updown) * 200.f * seconds; | m_target += vec3(rightleft, 0, -updown) * 200.f * seconds; | ||||
| m_view_matrix = mat4::lookat(m_position, m_target, m_up); | m_view_matrix = mat4::lookat(m_position, m_target, m_up); | ||||
| m_proj_matrix = mat4::perspective(45.0f, 640.0f, 480.0f, 1.f, 10000.0f); | |||||
| //m_proj_matrix = mat4::ortho(-160, 160, -120, 120, .1f, 2000.0f); | |||||
| } | } | ||||
| void Camera::TickDraw(float seconds) | void Camera::TickDraw(float seconds) | ||||
| @@ -30,6 +30,9 @@ public: | |||||
| char const *GetName() { return "<camera>"; } | char const *GetName() { return "<camera>"; } | ||||
| void SetPosition(vec3 const &pos); | void SetPosition(vec3 const &pos); | ||||
| void SetOrtho(float width, float height, float near, float far); | |||||
| void SetPerspective(float fov, float width, float height, | |||||
| float near, float far); | |||||
| mat4 const &GetViewMatrix(); | mat4 const &GetViewMatrix(); | ||||
| mat4 const &GetProjMatrix(); | mat4 const &GetProjMatrix(); | ||||
| @@ -1814,6 +1814,7 @@ template <typename T> struct Mat4 | |||||
| /* Helpers for projection matrices */ | /* Helpers for projection matrices */ | ||||
| static Mat4<T> ortho(T left, T right, T bottom, T top, T near, T far); | static Mat4<T> ortho(T left, T right, T bottom, T top, T near, T far); | ||||
| static Mat4<T> ortho(T width, T height, T near, T far); | |||||
| static Mat4<T> frustum(T left, T right, T bottom, T top, T near, T far); | static Mat4<T> frustum(T left, T right, T bottom, T top, T near, T far); | ||||
| static Mat4<T> perspective(T fov_y, T width, T height, T near, T far); | static Mat4<T> perspective(T fov_y, T width, T height, T near, T far); | ||||
| @@ -658,6 +658,13 @@ template<> mat4 mat4::ortho(float left, float right, float bottom, | |||||
| return ret; | return ret; | ||||
| } | } | ||||
| template<> mat4 mat4::ortho(float width, float height, | |||||
| float near, float far) | |||||
| { | |||||
| return mat4::ortho(-0.5f * width, 0.5f * width, | |||||
| -0.5f * height, 0.5f * height, near, far); | |||||
| } | |||||
| template<> mat4 mat4::frustum(float left, float right, float bottom, | template<> mat4 mat4::frustum(float left, float right, float bottom, | ||||
| float top, float near, float far) | float top, float near, float far) | ||||
| { | { | ||||