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

Revision 3255, 4.4 KB checked in by szirmay, 15 years ago (diff)
Line 
1#include ".\camera.h"
2
3Camera::Camera(void):
4m_EyePosition(0,0,0),
5m_LookAt(0,0,-1),
6m_UpVector(0,1,0),
7m_RightVector(1,0,0),
8m_ViewDirection(0,0,-1),
9m_Orientation(0,0,0),
10m_AspectRatio(1),
11m_NearClipDistance(0.1),
12m_FarClipDistance(500),
13m_FovX(45),
14m_FovY(45),
15m_LeftCorner(-1),
16m_RightCorner(1),
17m_DownCorner(-1),
18m_TopCorner(1)
19{
20       
21}
22
23Camera::~Camera(void)
24{
25       
26}
27
28void Camera::Rotate(Vector rotvec)
29{
30        m_Orientation+=rotvec;
31
32       
33}
34
35void Camera::Rotate(Axis axis, double angle)
36{
37        switch (axis)
38        {
39        case AXIS_X:
40                m_UpVector=m_UpVector.Rotate(m_RightVector,angle);
41                m_ViewDirection=m_ViewDirection.Rotate(m_RightVector,angle);
42                UpdateCamera();
43                break;
44        case AXIS_Y:
45                m_ViewDirection=m_ViewDirection.Rotate(Vector(0,1,0),angle);
46                m_RightVector=m_RightVector.Rotate(Vector(0,1,0),angle);
47                UpdateCamera();
48                break;
49        case AXIS_Z:
50                m_RightVector=m_RightVector.Rotate(m_ViewDirection,angle);
51                m_UpVector=m_UpVector.Rotate(m_ViewDirection,angle);                   
52                break;
53        }
54}
55
56void Camera::UpdateCamera(void)
57{
58        m_LookAt=m_EyePosition+m_ViewDirection;
59}
60
61
62
63void Camera::SetProjection(void)
64{
65
66        glMatrixMode(GL_PROJECTION);
67        glLoadIdentity();
68        gluPerspective(m_FovY,m_AspectRatio,m_NearClipDistance,m_FarClipDistance);
69}
70
71void Camera::SetViewandProjection(void)
72{
73
74        glMatrixMode(GL_PROJECTION);
75        glLoadIdentity();
76        gluPerspective(m_FovY,m_AspectRatio,m_NearClipDistance,m_FarClipDistance);
77
78        glMatrixMode(GL_MODELVIEW);
79    glLoadIdentity();
80
81//////
82
83        m_UpVector=Vector(0,1,0);
84        m_RightVector=Vector(1,0,0);
85        m_ViewDirection=Vector(0,0,-1);
86
87        m_UpVector=m_UpVector.RotateX(m_Orientation.x);
88        m_ViewDirection=m_ViewDirection.RotateX(m_Orientation.x);
89
90        m_UpVector=m_UpVector.RotateY(m_Orientation.y);
91        m_ViewDirection=m_ViewDirection.RotateY(m_Orientation.y);
92        m_RightVector=m_RightVector.RotateY(m_Orientation.y);
93               
94        m_LookAt=m_EyePosition+m_ViewDirection;
95
96/////
97       
98        gluLookAt(m_EyePosition.x,
99                                m_EyePosition.y,
100                                m_EyePosition.z,
101                                m_LookAt.x,
102                                m_LookAt.y,
103                                m_LookAt.z,
104                                m_UpVector.x,
105                                m_UpVector.y,
106                                m_UpVector.z);
107        /*                     
108        glRotatef(-m_Orientation.y,0,1,0);
109        glRotatef(-m_Orientation.x,1,0,0);
110        //glRotatef(m_Orientation.z,0,0,1);
111        glTranslatef(-m_EyePosition.x,-m_EyePosition.y,m_EyePosition.z);*/
112       
113}
114
115void Camera::SetViewandProjectionNew(void)
116{
117
118        glMatrixMode(GL_PROJECTION);
119        glLoadIdentity();
120        gluPerspective(m_FovY,m_AspectRatio,m_NearClipDistance,m_FarClipDistance);
121
122        glMatrixMode(GL_MODELVIEW);
123    glLoadIdentity();
124
125//////
126
127        m_UpVector=Vector(0,1,0);
128        m_RightVector=Vector(1,0,0);
129        m_ViewDirection=Vector(0,0,-1);
130
131        m_UpVector=m_UpVector.RotateX(m_Orientation.x);
132        m_ViewDirection=m_ViewDirection.RotateX(m_Orientation.x);
133
134        m_UpVector=m_UpVector.RotateY(m_Orientation.y);
135        m_ViewDirection=m_ViewDirection.RotateY(m_Orientation.y);
136        m_RightVector=m_RightVector.RotateY(m_Orientation.y);
137
138        m_UpVector=m_UpVector.RotateZ(m_Orientation.z);
139        m_ViewDirection=m_ViewDirection.RotateZ(m_Orientation.z);
140        m_RightVector=m_RightVector.RotateZ(m_Orientation.z);
141               
142        m_LookAt=m_EyePosition+m_ViewDirection;
143
144/////
145       
146        gluLookAt(m_EyePosition.x,
147                                m_EyePosition.y,
148                                m_EyePosition.z,
149                                m_LookAt.x,
150                                m_LookAt.y,
151                                m_LookAt.z,
152                                m_UpVector.x,
153                                m_UpVector.y,
154                                m_UpVector.z);
155        /*                     
156        glRotatef(-m_Orientation.y,0,1,0);
157        glRotatef(m_Orientation.z,0,0,1);
158        glRotatef(-m_Orientation.x,1,0,0);
159        glTranslatef(-m_EyePosition.x,-m_EyePosition.y,-m_EyePosition.z);*/
160       
161}
162
163void Camera::SetViewandProjectionOrto(void)
164{
165        glMatrixMode(GL_PROJECTION);
166        glLoadIdentity();
167        glOrtho(m_LeftCorner,m_RightCorner,m_DownCorner,m_TopCorner,m_NearClipDistance,m_FarClipDistance);
168
169        glMatrixMode(GL_MODELVIEW);
170    glLoadIdentity();
171        gluLookAt(m_EyePosition.x,
172                                m_EyePosition.y,
173                                m_EyePosition.z,
174                                m_LookAt.x,
175                                m_LookAt.y,
176                                m_LookAt.z,
177                                m_UpVector.x,
178                                m_UpVector.y,
179                                m_UpVector.z);
180
181}
182
183void Camera::Move(Axis axis, double distance)
184{
185        switch (axis)
186        {
187        case AXIS_X:
188                m_EyePosition+=m_RightVector.UnitVector()*distance;
189                m_LookAt+=m_RightVector.UnitVector()*distance;
190                break;
191        case AXIS_Y:
192                m_EyePosition+=m_UpVector.UnitVector()*distance;
193                m_LookAt+=m_UpVector.UnitVector()*distance;
194                break;
195        case AXIS_Z:
196                m_EyePosition+=m_ViewDirection.UnitVector()*distance;
197                m_LookAt+=m_ViewDirection.UnitVector()*distance;               
198                break;
199        }
200}
Note: See TracBrowser for help on using the repository browser.