Visual Servoing Platform  version 3.6.1 under development (2024-11-15)
vpView.h
1 /****************************************************************************
2  *
3  * ViSP, open source Visual Servoing Platform software.
4  * Copyright (C) 2005 - 2023 by Inria. All rights reserved.
5  *
6  * This software is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  * See the file LICENSE.txt at the root directory of this source
11  * distribution for additional information about the GNU GPL.
12  *
13  * For using ViSP with software that can not be combined with the GNU
14  * GPL, please contact Inria about acquiring a ViSP Professional
15  * Edition License.
16  *
17  * See https://visp.inria.fr for more information.
18  *
19  * This software was developed at:
20  * Inria Rennes - Bretagne Atlantique
21  * Campus Universitaire de Beaulieu
22  * 35042 Rennes Cedex
23  * France
24  *
25  * If you have questions regarding the use of this file, please contact
26  * Inria at visp@inria.fr
27  *
28  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
29  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
30  *
31  * Description:
32  * Le module "view.h" contient les Macros et les types
33  * des parametres de visualisation et de transformation 3D.
34  *
35  * Authors:
36  * Jean-Luc CORRE
37  *
38 *****************************************************************************/
39 
40 #ifndef vpView_H
41 #define vpView_H
42 
43 #include <visp3/core/vpConfig.h>
44 
45 #ifndef DOXYGEN_SHOULD_SKIP_THIS
46 
47 #include "vpArit.h"
48 #include "vpMy.h"
49 
50 /*
51  * Macros de numerotation des 6 plans de decoupage :
52  * - Les 6 plans de clipping definissent le volume canonique
53  * de la pyramide de vision dans lequel la scene est visible.
54  * - les 6 plans ont pour equations :
55  * Plan dessus : W = Y
56  * Plan dessous : -W = Y
57  * Plan droit : W = X
58  * Plan gauche : -W = X
59  * Plan arriere : W = Z
60  * Plan avant : W = 0
61  */
62 #define PLANE_ABOVE 0
63 #define PLANE_BELOW 1
64 #define PLANE_RIGHT 2
65 #define PLANE_LEFT 3
66 #define PLANE_BACK 4
67 #define PLANE_FRONT 5
68 #define PLANE_NBR 6
69 
70 /*
71  * Macros de positionnement des points 4D :
72  * Le positionnement d'un point 4D dans l'espace de l'observateur virtuel
73  * se fait par rapport aux 6 plans de decoupage.
74  * A chaque point 4D on associe 6 bits, un par plan de decoupage.
75  */
76 #define IS_INSIDE 0x00
77 #define IS_ABOVE 0x01
78 #define IS_BELOW 0x02
79 #define IS_RIGHT 0x04
80 #define IS_LEFT 0x08
81 #define IS_BACK 0x10
82 #define IS_FRONT 0x20
83 
84 #define vpDEFAULT_REMOVE IS_INSIDE
85 
86 #define PARALLEL 0
87 #define PERSPECTIVE 1
88 
89 #define vpDEFAULT_EYE \
90  { \
91  0.0, 0.0, 1.0 \
92  }
93 #define vpDEFAULT_TARGET \
94  { \
95  0.0, 0.0, 0.0 \
96  }
97 #define vpDEFAULT_FOCAL 1.0
98 #define vpDEFAULT_ANGLE 45.0
99 #define vpDEFAULT_TWIST 0.0
100 #define vpDEFAULT_SPEED 0.0
101 #define vpDEFAULT_CAMERA \
102  { \
103  vpDEFAULT_EYE, vpDEFAULT_TARGET, vpDEFAULT_FOCAL, vpDEFAULT_ANGLE, vpDEFAULT_TWIST, vpDEFAULT_SPEED \
104  }
105 
106 #define vpDEFAULT_COP \
107  { \
108  0.0, 0.0, 1.0 \
109  }
110 #define vpDEFAULT_VRP \
111  { \
112  0.0, 0.0, 0.0 \
113  }
114 #define vpDEFAULT_VPN \
115  { \
116  0.0, 0.0, -1.0 \
117  }
118 #define vpDEFAULT_VUP \
119  { \
120  0.0, 1.0, 0.0 \
121  }
122 #define vpDEFAULT_VWD \
123  { \
124  -1.0, 1.0, -1.0, 1.0 \
125  }
126 #define vpDEFAULT_DEPTH \
127  { \
128  0.0, 1.0 \
129  }
130 #define vpDEFAULT_TYPE PERSPECTIVE
131 
132 #define vpDEFAULT_VIEW \
133  { \
134  vpDEFAULT_TYPE, vpDEFAULT_COP, vpDEFAULT_VRP, vpDEFAULT_VPN, vpDEFAULT_VUP, vpDEFAULT_VWD, vpDEFAULT_DEPTH \
135  }
136 
137 #define vpDEFAULT_WC \
138  { \
139  1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 \
140  }
141 
142 BEGIN_VISP_NAMESPACE
143 /*
144  * CAMERA PARAMETERS
145  * _________________
146  *
147  * La structure "Camera_parameters" definit les parametres de la camera.
148  * eye Position de l'oeil ou de la camera.
149  * target Position de la cible ou du point visee dans la scene.
150  * focal Distance eye-target
151  * angle Angle d'ouverture en degres.
152  * twist Angle de rotation sur l'axe de visee (eye,target) en degres.
153  * speed Vitesse sur l'axe de visee (eye,target).
154 */
155 typedef struct
156 {
157  Point3f eye; /* position de l'observateur */
158  Point3f target; /* point vise */
159  float focal; /* focale de la camera */
160  float angle; /* angle d'ouverture */
161  float twist; /* rotation sur l'axe de visee */
162  float speed; /* vitesse sur l'axe de visee */
163 } Camera_parameters;
164 
165 typedef struct
166 {
167  float umin, umax; /* bords gauche et droit */
168  float vmin, vmax; /* bords inferieur et superieur */
169 } View_window;
170 
171 typedef struct
172 {
173  float front; /* plan avant ("hither") */
174  float back; /* plan arriere ("yon") */
175 } View_depth;
176 
177 typedef struct
178 {
179  Type type; /* type de la projection */
180  Point3f cop; /* centre de projection */
181  Point3f vrp; /* point de reference de visee */
182  Vector vpn; /* vecteur nomal au plan */
183  Vector vup; /* vecteur indiquant le "haut" */
184  View_window vwd; /* fenetre de projection */
185  View_depth depth; /* profondeurs de decoupages */
186 } View_parameters;
187 END_VISP_NAMESPACE
188 #endif
189 #endif