source: GTP/trunk/App/Demos/Illum/Illumination Networks Demo [OpenGL]/RESOURCES/include/My3DGraphRes/Camera.h @ 845

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