1 /*******************************************************************************
2  * camera.h
3  *
4  * This module contains all defines, typedefs, and prototypes for CAMERA.CPP.
5  *
6  * ---------------------------------------------------------------------------
7  * Persistence of Vision Ray Tracer ('POV-Ray') version 3.7.
8  * Copyright 1991-2013 Persistence of Vision Raytracer Pty. Ltd.
9  *
10  * POV-Ray is free software: you can redistribute it and/or modify
11  * it under the terms of the GNU Affero General Public License as
12  * published by the Free Software Foundation, either version 3 of the
13  * License, or (at your option) any later version.
14  *
15  * POV-Ray is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Affero General Public License for more details.
19  *
20  * You should have received a copy of the GNU Affero General Public License
21  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
22  * ---------------------------------------------------------------------------
23  * POV-Ray is based on the popular DKB raytracer version 2.12.
24  * DKBTrace was originally written by David K. Buck.
25  * DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
26  * ---------------------------------------------------------------------------
27  * $File: //depot/public/povray/3.x/source/backend/scene/camera.h $
28  * $Revision: #1 $
29  * $Change: 6069 $
30  * $DateTime: 2013/11/06 11:59:40 $
31  * $Author: chrisc $
32  *******************************************************************************/
33 
34 #ifndef CAMERA_H
35 #define CAMERA_H
36 
37 namespace pov
38 {
39 
40 /*****************************************************************************
41 * Global preprocessor defines
42 ******************************************************************************/
43 
44 // Available camera types. [DB 8/94]
45 
46 #define PERSPECTIVE_CAMERA      1
47 #define ORTHOGRAPHIC_CAMERA     2
48 #define FISHEYE_CAMERA          3
49 #define ULTRA_WIDE_ANGLE_CAMERA 4
50 #define OMNIMAX_CAMERA          5
51 #define PANORAMIC_CAMERA        6
52 #define CYL_1_CAMERA            7
53 #define CYL_2_CAMERA            8
54 #define CYL_3_CAMERA            9
55 #define CYL_4_CAMERA           10
56 #define SPHERICAL_CAMERA       11
57 #define MESH_CAMERA            12
58 
59 /*****************************************************************************
60 * Global typedefs
61 ******************************************************************************/
62 
63 class Camera
64 {
65 public:
66 	VECTOR Location;
67 	VECTOR Direction;
68 	VECTOR Up;
69 	VECTOR Right;
70 	VECTOR Sky;
71 	VECTOR Look_At;                 // Used only to record the user's preference
72 	VECTOR Focal_Point;             // Used only to record the user's preference
73 	DBL Focal_Distance, Aperture;   // ARE 9/92 for focal blur.
74 	int Blur_Samples;               // ARE 9/92 for focal blur.
75 	int Blur_Samples_Min;           // Minimum number of blur samples to take regardless of confidence settings.
76 	DBL Confidence;                 // Probability for confidence test.
77 	DBL Variance;                   // Max. variance for confidence test.
78 	int Type;                       // Camera type.
79 	DBL Angle;                      // Viewing angle.
80 	DBL H_Angle;                    // Spherical horizontal viewing angle
81 	DBL V_Angle;                    // Spherical verticle viewing angle
82 	TNORMAL *Tnormal;               // Primary ray pertubation.
83 	TRANSFORM *Trans;               // Used only to record the user's input
84 	PIGMENT *Bokeh;                 // Pigment to use for the bokeh
85 
86 	// the following declarations are used for the mesh camera
87 	unsigned int Face_Distribution_Method;  // how to associate a pixel to a face within a mesh
88 	unsigned int Rays_Per_Pixel;            // cast this many rays per pixel; never less than 1
89 	bool Smooth;                            // if true, interpolate normals for dist #3
90 	vector<ObjectPtr> Meshes;               // list of the meshes to be used as the camera
91 	vector<unsigned int> Mesh_Index;        // used with distribution #1 to keep track of accumulated meshes
92 	vector<unsigned int> U_Xref[10];        // used to speed up location of a matching face for distribution #3
93 	vector<unsigned int> V_Xref[10];        // used to speed up location of a matching face for distribution #3
94 	DBL Max_Ray_Distance;					// if not 0.0, then maximum distance to look along the ray for an intersection
95 	// end of mesh camera declarations
96 
97 	Camera();
98 	Camera(const Camera& src);
99 	~Camera();
100 	Camera& operator=(const Camera& rhs);
101 	void Transform(const TRANSFORM *Trans);
102 	void Scale(const VECTOR Vector);
103 	void Rotate(const VECTOR Vector);
104 	void Translate(const VECTOR Vector);
105 
106 private:
107 	void Init();
108 };
109 
110 }
111 
112 #endif
113