Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2011-11-05 15:11:06 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2011-11-05 15:11:06 +0400
commitfd83a3ede0009e3c0fc7a917582f3cbc8e392576 (patch)
tree2a5fe8c7712ea0050338f9c7b08c522091183f5a /intern/cycles/blender/blender_camera.cpp
parentf188bc3550958a81ebd99dda33f2088bb52127f8 (diff)
Cycles: make cycles work with new camera sensor size.
Diffstat (limited to 'intern/cycles/blender/blender_camera.cpp')
-rw-r--r--intern/cycles/blender/blender_camera.cpp38
1 files changed, 36 insertions, 2 deletions
diff --git a/intern/cycles/blender/blender_camera.cpp b/intern/cycles/blender/blender_camera.cpp
index e3b0fbd0a25..2a2c2a7c643 100644
--- a/intern/cycles/blender/blender_camera.cpp
+++ b/intern/cycles/blender/blender_camera.cpp
@@ -47,6 +47,10 @@ struct BlenderCamera {
float2 pixelaspect;
+ enum { AUTO, HORIZONTAL, VERTICAL } sensor_fit;
+ float sensor_width;
+ float sensor_height;
+
Transform matrix;
};
@@ -56,6 +60,9 @@ static void blender_camera_init(BlenderCamera *bcam)
bcam->zoom = 1.0f;
bcam->pixelaspect = make_float2(1.0f, 1.0f);
+ bcam->sensor_width = 32.0f;
+ bcam->sensor_height = 18.0f;
+ bcam->sensor_fit = BlenderCamera::AUTO;
}
static float blender_camera_focal_distance(BL::Object b_ob, BL::Camera b_camera)
@@ -100,6 +107,16 @@ static void blender_camera_from_object(BlenderCamera *bcam, BL::Object b_ob)
bcam->shift.x = b_camera.shift_x();
bcam->shift.y = b_camera.shift_y();
+
+ bcam->sensor_width = b_camera.sensor_width();
+ bcam->sensor_height = b_camera.sensor_height();
+
+ if(b_camera.sensor_fit() == BL::Camera::sensor_fit_AUTO)
+ bcam->sensor_fit = BlenderCamera::AUTO;
+ else if(b_camera.sensor_fit() == BL::Camera::sensor_fit_HORIZONTAL)
+ bcam->sensor_fit = BlenderCamera::HORIZONTAL;
+ else
+ bcam->sensor_fit = BlenderCamera::VERTICAL;
}
else {
/* from lamp not implemented yet */
@@ -118,7 +135,24 @@ static void blender_camera_sync(Camera *cam, BlenderCamera *bcam, int width, int
/* compute x/y aspect and ratio */
float aspectratio, xaspect, yaspect;
- if(xratio > yratio) {
+ /* sensor fitting */
+ bool horizontal_fit;
+ float sensor_size;
+
+ if(bcam->sensor_fit == BlenderCamera::AUTO) {
+ horizontal_fit = (xratio > yratio);
+ sensor_size = bcam->sensor_width;
+ }
+ else if(bcam->sensor_fit == BlenderCamera::HORIZONTAL) {
+ horizontal_fit = true;
+ sensor_size = bcam->sensor_width;
+ }
+ else {
+ horizontal_fit = false;
+ sensor_size = bcam->sensor_height;
+ }
+
+ if(horizontal_fit) {
aspectratio= xratio/yratio;
xaspect= aspectratio;
yaspect= 1.0f;
@@ -165,7 +199,7 @@ static void blender_camera_sync(Camera *cam, BlenderCamera *bcam, int width, int
cam->ortho = bcam->ortho;
/* perspective */
- cam->fov = 2.0f*atan(16.0f/bcam->lens/aspectratio);
+ cam->fov = 2.0f*atan((0.5f*sensor_size)/bcam->lens/aspectratio);
cam->focaldistance = bcam->focaldistance;
cam->aperturesize = bcam->aperturesize;
cam->blades = bcam->apertureblades;