-
Notifications
You must be signed in to change notification settings - Fork 0
/
cameraIDI.cpp
110 lines (83 loc) · 2.17 KB
/
cameraIDI.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
#include "cameraIDI.h"
#include <QtOpenGL/qgl.h>
#include <GL/glu.h>
void cameraIDI::computeDefaultCamera(double radi, const Point& centreEscena)
{
VRP = Point(centreEscena.x, centreEscena.y, centreEscena.z);
this->radi = radi;
dist = 2*radi;
anterior = 3.;
posterior = 150.;
//2*... perque agafem les 2 bandes
anglecam = 2* rad2angle(asin(this->radi/dist));
// inicialitzem els angles per a veure-ho des d'un cert punt de vista
angleX = 45;
angleY = 45;
angleZ = 0;
zoom=0;
}
void cameraIDI::setModelview()
{
glMatrixMode(GL_MODELVIEW); //Modifiquem matriu ModelView (Camera)
glLoadIdentity(); //Coloquem camera a l'origent (punt per defecte)
//gluLookAt(2*radi, 2*radi, 2*radi, centreEscena.x, centreEscena.y, centreEscena.z, 0, 1, 0);
trasllada(0.,0.,-dist);
rota (angleZ,0.,0.,1.);
rota (angleX, 1.,0.,0.);
rota (-angleY,0.,1.,0.);
trasllada (-VRP.x, -VRP.y, -VRP.z);
}
void cameraIDI::setProjection(int width, int height)
{
float aspect=float(width)/float(height); //relació d'aspecte = amplada / alçada
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(anglecam,aspect,anterior,posterior);
}
void cameraIDI::resetCam()
{
angleX = 45;
angleY = 45;
angleZ = 0;
anglecam = 2 * rad2angle(asin(this->radi/dist));
}
void cameraIDI::userRotate(double anglex, double angley) {
//distancia en x = rotacio sobre l'eix y, i a l'inreves
angleX = angleX + angley;
angleY = angleY + anglex;
this->setModelview();
}
void cameraIDI::userZoom(double zoom) {
anglecam = anglecam + zoom;
if(anglecam<1) anglecam = 1;
if(anglecam>100) anglecam = 100;
this->setModelview();
}
void cameraIDI::iniciTGModelat()
{
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
}
void cameraIDI::identitat()
{
glLoadIdentity();
}
void cameraIDI::fiTGModelat()
{
glPopMatrix();
}
void cameraIDI::trasllada(float tx, float ty, float tz)
{
glTranslatef(tx, ty, tz);
}
void cameraIDI::escala(float sx, float sy, float sz)
{
glScalef(sx, sy, sz);
}
void cameraIDI::rota(float graus, float rx, float ry, float rz)
{
glRotatef(graus, rx, ry, rz);
}
float cameraIDI::rad2angle(float angle) {
return (angle * 180 / M_PI);
}