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

Revision 3255, 2.1 KB checked in by szirmay, 15 years ago (diff)
Line 
1#include ".\thirdpersoncamera.h"
2
3ThirdPersonCamera::ThirdPersonCamera(void)
4{
5        rot=0;
6        yaw=0;
7        dist=1;
8        m_RightVector=Vector(1,0,0);
9        m_UpVector=Vector(0,1,0);
10        m_EyePosition=Vector(0,0,-1);
11        m_LookAt=Vector(0,0,0);
12        m_ViewDirection=Vector(0,0,1);
13}
14
15ThirdPersonCamera::~ThirdPersonCamera(void)
16{
17}
18void ThirdPersonCamera::setViewforBbox()
19{
20        glMatrixMode(GL_MODELVIEW);
21    glLoadIdentity();
22
23        gluLookAt(0,0,0,-m_EyePosition.x,
24                                -m_EyePosition.y,
25                                -m_EyePosition.z,
26                                m_UpVector.x,
27                                m_UpVector.y,
28                                m_UpVector.z);
29       
30}
31
32void ThirdPersonCamera::SetViewandProjection(void)
33{
34        glMatrixMode(GL_PROJECTION);
35        glLoadIdentity();
36        gluPerspective(m_FovY,m_AspectRatio,m_NearClipDistance,m_FarClipDistance);
37
38        glMatrixMode(GL_MODELVIEW);
39    glLoadIdentity();
40
41        gluLookAt(m_EyePosition.x,
42                                m_EyePosition.y,
43                                m_EyePosition.z,
44                                m_LookAt.x,
45                                m_LookAt.y,
46                                m_LookAt.z,
47                                m_UpVector.x,
48                                m_UpVector.y,
49                                m_UpVector.z);
50       
51
52
53}
54
55void ThirdPersonCamera::Move(Axis axis, double distance)
56{
57        switch (axis)
58        {
59        case AXIS_X:
60                rot+=distance*3.14/40.0;
61                break;
62        case AXIS_Y:
63                yaw+=distance*3.14/40.0;
64                break;
65        case AXIS_Z:
66                dist-=distance;
67                break;
68        }
69        Vector dir(cos(rot)*cos(yaw),sin(yaw),sin(rot)*cos(yaw));
70        Vector d=dir;
71        if(d.y==0)
72        {
73                m_UpVector=Vector(0,1,0);
74        }
75        else
76        {
77                d.y=0;
78                d.Normalize();
79                m_UpVector=dir-d;
80                if(d.y<0)m_UpVector*=-1;
81                m_UpVector.Normalize();
82        }
83        m_RightVector=m_UpVector%dir;
84        m_RightVector.Normalize();
85       
86        dir=dir*dist;
87       
88        m_EyePosition=m_LookAt+dir;
89        m_Orientation.y=rot/3.14*180.0;
90        m_Orientation.x=-yaw/3.14*180.0;
91}
92
93void ThirdPersonCamera::SetPosition(Vector position)
94{
95        m_EyePosition=position;
96        Vector dir0=m_EyePosition-m_LookAt;
97        dir0.Normalize();
98
99        Vector ddd;
100        ddd.x=dir0.x;
101        ddd.y=dir0.y;
102        ddd.z=dir0.z;
103
104        if(ddd.y==0)
105        {
106                m_UpVector=Vector(0,1,0);
107        }
108        else
109        {
110                ddd.y=0;
111                ddd.Normalize();
112                m_UpVector=dir0-ddd;
113                if(ddd.y<0)m_UpVector*=-1;
114                m_UpVector.Normalize();
115        }
116        m_RightVector=m_UpVector%(dir0*-1);
117        m_RightVector.Normalize();     
118}
Note: See TracBrowser for help on using the repository browser.