add BLI_strcpy_rlen, replace strcat, which was used in misleading way.
[blender.git] / intern / cycles / render / camera.h
1 /*
2  * Copyright 2011, Blender Foundation.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  */
18
19 #ifndef __CAMERA_H__
20 #define __CAMERA_H__
21
22 #include "kernel_types.h"
23
24 #include "util_boundbox.h"
25 #include "util_transform.h"
26 #include "util_types.h"
27
28 CCL_NAMESPACE_BEGIN
29
30 class Device;
31 class DeviceScene;
32 class Scene;
33
34 /* Camera
35  *
36  * The camera parameters are quite standard, tested to be both compatible with
37  * Renderman, and Blender after remapping. */
38
39 class Camera {
40 public:
41         /* motion blur */
42         float shuttertime;
43
44         /* depth of field */
45         float focaldistance;
46         float aperturesize;
47         uint blades;
48         float bladesrotation;
49
50         /* type */
51         CameraType type;
52         float fov;
53
54         /* panorama */
55         PanoramaType panorama_type;
56         float fisheye_fov;
57         float fisheye_lens;
58
59         /* sensor */
60         float sensorwidth;
61         float sensorheight;
62
63         /* clipping */
64         float nearclip;
65         float farclip;
66
67         /* screen */
68         int width, height;
69         int resolution;
70         BoundBox2D viewplane;
71
72         /* border */
73         BoundBox2D border;
74
75         /* transformation */
76         Transform matrix;
77
78         /* motion */
79         MotionTransform motion;
80         bool use_motion;
81
82         /* computed camera parameters */
83         Transform screentoworld;
84         Transform rastertoworld;
85         Transform ndctoworld;
86         Transform cameratoworld;
87
88         Transform worldtoraster;
89         Transform worldtoscreen;
90         Transform worldtondc;
91         Transform worldtocamera;
92
93         Transform rastertocamera;
94         Transform cameratoraster;
95
96         float3 dx;
97         float3 dy;
98
99         /* update */
100         bool need_update;
101         bool need_device_update;
102         int previous_need_motion;
103
104         /* functions */
105         Camera();
106         ~Camera();
107
108         void update();
109
110         void device_update(Device *device, DeviceScene *dscene, Scene *scene);
111         void device_free(Device *device, DeviceScene *dscene);
112
113         bool modified(const Camera& cam);
114         bool motion_modified(const Camera& cam);
115         void tag_update();
116 };
117
118 CCL_NAMESPACE_END
119
120 #endif /* __CAMERA_H__ */
121