-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathFrameActor.cpp
126 lines (105 loc) · 2.81 KB
/
FrameActor.cpp
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/*
* FrameActor.cpp
*
* Created on: 13/ago/2010
* Author: dario
*/
#include "FrameActor.h"
//Costruttore, inizializzo i vettori
FrameActor::FrameActor() {
origin[0] = 0.0f;
origin[1] = 0.0f;
origin[2] = 0.0f;
moveDirection[0] = 0.0f;
moveDirection[1] = 0.0f;
moveDirection[2] = -1.0f;
}
//Applica tutte le trasformazioni
void FrameActor::applyTransform() {
applyTranslateTransform();
applyRotateTransform();
}
//Applica le trasformazioni di rotazione
void FrameActor::applyRotateTransform() {
for (vector<float*>::iterator i = rotateStack.begin(); i < rotateStack.end(); i++) {
glRotatef((*i)[0], (*i)[1], (*i)[2], (*i)[3]);
}
rotateStack.clear();
}
//Applico le trasformazioni di traslazione
void FrameActor::applyTranslateTransform() {
glTranslatef(origin[0], origin[1], origin[2]);
}
//Muovo l'oggetto lungo il vettore "up"
void FrameActor::moveUp(float delta) {
setOrigin(origin[0], origin[1] + delta, origin[2]);
}
//Muovo l'oggetto secondo il vettore di movimento
void FrameActor::moveForward(float delta) {
setOrigin(origin[0] + (moveDirection[0] * delta), origin[1] + (moveDirection[1] * delta), origin[2] + (moveDirection[2] * delta));
}
//Aggiungo una rotazione generica
void FrameActor::rotate(float angle, float x, float y, float z) {
float *tmp = new float[4];
tmp[0] = angle;
tmp[1] = x;
tmp[2] = y;
tmp[3] = z;
rotateStack.push_back(tmp);
}
//Imposto la direzione di movimento
void FrameActor::setForwardDirection(float x, float y, float z) {
moveDirection[0] = x;
moveDirection[1] = y;
moveDirection[2] = z;
}
//Muovo l'oggetto lungo il vettore "left"
void FrameActor::moveRight(float delta) {
setOrigin(origin[0] + delta, origin[1], origin[2]);
}
//Imposto l'origine dell'oggetto
void FrameActor::setOrigin(float x, float y, float z) {
origin[0] = x;
origin[1] = y;
origin[2] = z;
}
//Aggiungo una rotazione lungo l'asse Y
void FrameActor::rotateY(float angle) {
rotate(angle, 0, 1.0, 0);
}
//Aggiungo una rotazione lungo l'asse Z
void FrameActor::rotateZ(float angle) {
rotate(angle, 0, 0, 1.0);
}
//Aggiungo una rotazione lungo l'asse X
void FrameActor::rotateX(float angle) {
rotate(angle, 1.0, 0, 0);
}
//Ritorna la coordinata Y dell'origine
float FrameActor::getOriginY() {
return origin[1];
}
//Ritorna la coordinata Z dell'origine
float FrameActor::getOriginZ() {
return origin[2];
}
//Ritorna le coordinate dell'origine
M3DVector3f* FrameActor::getOrigin() {
return &origin;
}
//Ritorna la coordinata X dell'origine
float FrameActor::getOriginX() {
return origin[0];
}
//Imposta la coordinata Y dell'origine
void FrameActor::setOriginY(float value) {
origin[1] = value;
}
//Imposta la coordinata Z dell'origine
void FrameActor::setOriginZ(float value) {
origin[2] = value;
}
//Imposta la coordinata X dell'origine
void FrameActor::setOriginX(float value) {
origin[0] = value;
}