1 /****************************************************************************
2  *
3  * ViSP, open source Visual Servoing Platform software.
4  * Copyright (C) 2005 - 2019 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 http://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 /*
143  *			CAMERA PARAMETERS
144  *			_________________
145  *
146  * La structure "Camera_parameters" definit les parametres de la camera.
147  * eye		Position de l'oeil ou de la camera.
148  * target	Position de la cible ou du point visee dans la scene.
149  * focal	Distance eye-target
150  * angle	Angle d'ouverture en degres.
151  * twist	Angle de rotation sur l'axe de visee (eye,target) en degres.
152  * speed	Vitesse sur l'axe de visee (eye,target).
153  */
154 typedef struct {
155   Point3f eye;    /* position de l'observateur	*/
156   Point3f target; /* point vise			*/
157   float focal;    /* focale de la camera		*/
158   float angle;    /* angle d'ouverture		*/
159   float twist;    /* rotation sur l'axe de visee	*/
160   float speed;    /* vitesse  sur l'axe de visee	*/
161 } Camera_parameters;
162 
163 typedef struct {
164   float umin, umax; /* bords gauche et droit	*/
165   float vmin, vmax; /* bords inferieur et superieur */
166 } View_window;
167 
168 typedef struct {
169   float front; /* plan avant ("hither")	*/
170   float back;  /* plan arriere ("yon")		*/
171 } View_depth;
172 
173 typedef struct {
174   Type type;        /* type de la  projection	*/
175   Point3f cop;      /* centre de projection		*/
176   Point3f vrp;      /* point de reference de visee	*/
177   Vector vpn;       /* vecteur nomal au plan	*/
178   Vector vup;       /* vecteur indiquant le "haut"	*/
179   View_window vwd;  /* fenetre de projection	*/
180   View_depth depth; /* profondeurs de decoupages	*/
181 } View_parameters;
182 
183 #endif
184 #endif
185