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