1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
FreeCamera::FreeCamera(vec3 position, vec3 lookAt, vec3 up, float fovy, float ratio, float zNear, float zFar):Camera(position, lookAt, up, fovy, ratio, zNear, zFar){
m_lookAt = m_lookAt-m_position;
m_lookAt.normalize();
m_lookAt += m_position;
}
FreeCamera::FreeCamera(vec3 position, vec3 lookAt, float fovy, float ratio, float zNear, float zFar):Camera(position, lookAt, fovy, ratio, zNear, zFar){
m_lookAt = m_lookAt-m_position;
m_lookAt.normalize();
}
FreeCamera::~FreeCamera(){
}
void FreeCamera::forward(float f){
vec3 dir = m_lookAt-m_position;
dir.normalize();
dir *= f;
m_position += dir;
m_lookAt += dir;
m_updateModelview = true;
}
void FreeCamera::backward(float f){
forward(-f);
}
void FreeCamera::right(float f){
vec3 dir = vec3Cross(m_lookAt-m_position, m_up);
dir.normalize();
dir *= f;
m_position += dir;
m_lookAt += dir;
m_updateModelview = true;
}
void FreeCamera::left(float f){
right(-f);
}
void FreeCamera::up(float f){
m_position += m_up*f;
m_lookAt += m_up*f;
}
void FreeCamera::down(float f){
up(-f);
}
void FreeCamera::rotate(float x, float y, float f){
vec3 dir = vec3Cross(m_lookAt-m_position, m_up);
dir.normalize();
dir *= f;
vec3 rot = dir*x;
rot.z = 0; // gilt nur für up Vektor = 0|0|1 !
m_lookAt -= rot;
rot = vec3Cross(m_lookAt-m_position, dir);
rot.normalize();
rot *= f*y;
m_lookAt -= rot;
m_updateModelview = true;
}
|