]> git.tdb.fi Git - libs/gl.git/blob - source/camera.h
Fix 4th column of camera matrix
[libs/gl.git] / source / camera.h
1 /* $Id$
2
3 This file is part of libmspgl
4 Copyright © 2010  Mikko Rasa, Mikkosoft Productions
5 Distributed under the LGPL
6 */
7
8 #ifndef MSP_GL_CAMERA_H_
9 #define MSP_GL_CAMERA_H_
10
11 #include "vector.h"
12
13 namespace Msp {
14 namespace GL {
15
16 class Camera
17 {
18 private:
19         float fov;
20         float aspect;
21         // Some compilers have "near" and "far" keywords
22         float clip_near;
23         float clip_far;
24         Vector3 position;
25         Vector3 look_dir;
26         Vector3 up_dir;
27         float matrix[16];
28
29 public:
30         Camera();
31
32         void set_field_of_view(float);
33         void set_aspect(float);
34         void set_depth_clip(float, float);
35         float get_field_of_view() const { return fov; }
36         float get_aspect() const { return aspect; }
37         float get_near_clip() const { return clip_near; }
38         float get_far_clip() const { return clip_far; }
39
40         void set_position(const Vector3 &);
41         void set_look_direction(const Vector3 &);
42         void look_at(const Vector3 &);
43         void set_up_direction(const Vector3 &);
44         const Vector3 &get_position() const { return position; }
45         const Vector3 &get_look_direction() const { return look_dir; }
46         const Vector3 &get_up_direction() const { return up_dir; }
47
48         Vector3 project(const Vector4 &) const;
49         Vector4 unproject(const Vector4 &) const;
50
51         void apply() const;
52
53 private:
54         void compute_matrix();
55 };
56
57 } // namespace GL
58 } // namespcae Msp
59
60 #endif