-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCamara.hpp
102 lines (81 loc) · 3.6 KB
/
Camara.hpp
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
// *********************************************************************
// **
// ** Gestion de las matrices de vista y proyección, y el viewport
// ** (clase "Camara").
// ** Declaraciones.
// **
// ** Copyright (C) 2017 Carlos Ureña - obtenido de las transparencias del tema 3
// **
#ifndef CAMARA_HPP
#define CAMARA_HPP
#include "tuplasg.hpp"
#include "matrices-tr.hpp"
// *********************************************************************
// clase: MarcoCoorVista
class MarcoCoorVista // marco de coordenadas ({\bf cartesiano}) de la vista
{
public:
Tupla3f org, // origen del marco de coordenadas
eje[3] ; // ejes (0=X, 1=Y, 2=Z) del marco de cc. (ortonormales)
// APUNTES: deberían llamarse: matriz_MaL (mundo a locales) (matriz de Vista)
// matriz_LaM (locales-->mundo)
Matriz4f matrizVistaInv, // matriz marco de vista --> mundo
matrizVista; // matriz de vista: coords. mundo --> coords. marco de vista
// foco en origen, mirando hacia Z-, vup = Y+
MarcoCoorVista() ;
// constructor: mismos parámetros que {\ttbf gluLookAt} )
MarcoCoorVista( const Tupla3f & pfoco, const Tupla3f & paten,
const Tupla3f & pvup );
} ;
// *********************************************************************
// clase: ViewFrustum
class ViewFrustum
{
public:
bool persp ; // {\ttbf true} para perspectiva, {\ttbf false} para ortográfica
float left, right, // extension en X ({\ttbf left} < {\ttbf right})
bottom, top, // extension en Y ({\ttbf bottom} < {\ttbf top})
near, far ; // extension en Z (rama negativa) ($0$ < {\ttbf near} < {\ttbf far})
Matriz4f matrizProy ; // matriz de proyección $P$: cc. cámara ==> cc. recortado
ViewFrustum() ; // view-frustum ortográfico, de lado 2, centro en (0,0,0)
// crea view-frustum perspectiva, mismos parámetros que {\ttbf gluPerspective}
ViewFrustum( float hfovy_grad, float aspect, float zNear, float zFar );
} ;
// *********************************************************************
// clase: Camara
class Camara
{
public:
MarcoCoorVista mcv ; // marco de coordenadas de la vista
ViewFrustum vf ; // parámetros de la proyección
Camara() ; // usa constructores por defecto para {\ttbf mc} y {\ttbf vf}
void activar() ; // fijar matrices {\ttbf MODELVIEW} y {\ttbf PROJECTION} de OpenGL
} ;
// *********************************************************************
// clase: Viewport
class Viewport
{
public:
int org_x, org_y, // origen en pixels (esquina inferior izquierda)
ancho, alto ; // dimensiones en pixels (núm. columnas, núm. filas)
float ratio_yx ; // == alto/ancho (relación de aspecto)
Matriz4f matrizVp , // matriz de viewport ( pasa: NDC ==> DC )
matrizVpInv ; // matriz inversa ( pasa: DC ==> NDC )
// constructor
Viewport() ; // crea viewport de 512 x 512 con origen en (0,0)
Viewport( int p_org_x, int p_org_y, int p_ancho, int p_alto );
// actualizar
void actualizar(int vp_ancho, int vp_alto);
// fijar viewport
void fijarViewport();
} ;
// *********************************************************************
// clase ParTransf
class ParTransf
{
public:
Camara cam ; // Cámara activa actualmente para la visualización
Viewport vp ; // {\it viewport} actualmente en uso
ParTransf() {} ; // usa constructores por defecto (no hace nada)
} ;
#endif