source: GTP/branches/IllumWPdeliver2008dec/IlluminationWP/demos/Standalone/Hierarchical Systems Demo [OpenGL]/RESOURCES/include/My3DGraphRes/Camera.h @ 3255

Revision 3255, 3.8 KB checked in by szirmay, 15 years ago (diff)
Line 
1#ifndef camera_h
2#define camera_h
3
4#include "Vector.h"
5#include <includes.h>
6
7enum Axis
8{
9        AXIS_X=0,
10        AXIS_Y=1,
11        AXIS_Z=2
12};
13
14class Camera
15{
16public:
17        Camera(void);
18        ~Camera(void);
19
20        Vector m_Orientation;
21
22        Vector m_EyePosition;
23        Vector m_LookAt;
24        Vector m_UpVector;
25        Vector m_ViewDirection;
26        Vector m_RightVector;
27       
28protected:      double m_AspectRatio;
29        double m_NearClipDistance;
30        double m_FarClipDistance;
31        double m_FovX;
32        double m_FovY;
33        double m_LeftCorner;
34        double m_RightCorner;
35        double m_TopCorner;
36        double m_DownCorner;
37
38public:
39        void Rotate(Axis axis, double angle);
40        void Rotate(Vector rotvec);
41
42        virtual void SetPosition(Vector position)
43        {
44                m_EyePosition=position;
45                m_ViewDirection=m_LookAt-m_EyePosition;
46        //      CalculateRightVector();
47        }
48        virtual void SetPosition(double x,double y,double z)
49        {
50                m_EyePosition.x=x;
51                m_EyePosition.y=y;
52                m_EyePosition.z=z;
53
54        //      m_ViewDirection=m_LookAt-m_EyePosition;
55        //      CalculateRightVector();
56        }
57
58        Vector getPosition(void)
59        {
60                return m_EyePosition;
61        }
62        void getPosition(double& x,double&y,double &z)
63        {
64                x=m_EyePosition.x;
65                y=m_EyePosition.y;
66                z=m_EyePosition.z;
67        }
68
69        void setLookAt(Vector lookat)
70        {
71                m_LookAt=lookat;
72                m_ViewDirection=m_LookAt-m_EyePosition;
73        //      CalculateRightVector();
74        //      CalculateUpVector();
75        }
76
77        void setLookAt(double x,double y,double z)
78        {
79                m_LookAt.x=x;
80                m_LookAt.y=y;
81                m_LookAt.z=z;
82//              m_ViewDirection=m_LookAt-m_EyePosition;
83//              CalculateRightVector();
84//              CalculateUpVector();
85        }
86
87        Vector getLookAt()
88        {
89                return m_LookAt;
90        }
91        void  getLookAt(double& x,double&y,double &z)
92        {
93                x=m_LookAt.x;
94                y=m_LookAt.y;
95                z=m_LookAt.z;
96        }
97
98        void SetUpVector(Vector position)
99        {
100                m_UpVector=position;
101        }
102        void SetUpVector(double x,double y,double z)
103        {
104                m_UpVector.x=x;
105                m_UpVector.y=y;
106                m_UpVector.z=z;
107        }
108
109        Vector getUpVector(void)
110        {
111                return m_UpVector;
112        }
113        void getUpVector(double& x,double&y,double &z)
114        {
115                x=m_UpVector.x;
116                y=m_UpVector.y;
117                z=m_UpVector.z;
118        }
119
120        Vector getRightVector(void)
121        {
122                return m_RightVector;
123        }
124
125        void setRightVector(Vector v)
126        {
127                m_RightVector=v;
128        }
129
130
131        void setFovX(double angle)
132        {
133                m_FovX=angle;
134                UpdateFovY();
135        }
136
137        void setFovY(double angle)
138        {
139                m_FovY=angle;
140                UpdateFovX();
141        }
142
143        double getFovX(void)
144        {
145                return m_FovX;
146        }
147
148        double getFovY(void)
149        {
150                return m_FovY;
151        }
152
153        void setNearClipDistance(double distance)
154        {
155                m_NearClipDistance=distance;
156        }
157
158        void setFarClipDistance(double distance)
159        {
160                m_FarClipDistance=distance;
161        }
162
163        double getNearClipDistance(void)
164        {
165                return m_NearClipDistance;
166        }
167
168        double getFarClipDistance(void)
169        {
170                return m_FarClipDistance;
171        }
172        void setAspectRatio(double ratio)
173        {
174                m_AspectRatio=ratio;
175                UpdateFovY();
176        }
177        void setCorners(double left,double right,double top,double bottom)
178        {
179                m_LeftCorner=left;
180                m_RightCorner=right;
181                m_TopCorner=top;
182                m_DownCorner=bottom;
183        }
184private:
185       
186        void UpdateCamera(void);
187       
188        void UpdateFovX(void)
189        {
190                m_FovX=m_FovY/m_AspectRatio;
191        }
192
193        void UpdateFovY(void)
194        {
195                m_FovY=m_AspectRatio*m_FovX;
196        }
197
198        void CalculateRightVector(void)
199        {
200                Vector X = m_ViewDirection.UnitVector() % m_UpVector;
201                X.Normalize();
202                m_RightVector=X;
203        }
204        void CalculateUpVector(void)
205        {
206                Vector X = m_ViewDirection.UnitVector() % m_RightVector;
207                X.Normalize();
208                m_UpVector=X;
209        }
210public:
211        void SetViewandProjection(void);
212        void SetViewandProjectionNew(void);
213       
214        void SetProjection(void);
215        virtual void SetViewandProjectionOrto(void);
216        virtual void Move(Axis axis, double distance);
217        virtual void setViewforBbox()
218        {
219                gluLookAt(0,0,0,
220                        m_ViewDirection.x,
221                        m_ViewDirection.y,
222                        m_ViewDirection.z,
223                        m_UpVector.x,
224                        m_UpVector.y,
225                        m_UpVector.z);
226        }
227};
228
229#endif
Note: See TracBrowser for help on using the repository browser.