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
path: root/intern
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2011-12-30 03:34:25 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2011-12-30 03:34:25 +0400
commite32a117c8be10cb48805a9c438750c04068b7fa2 (patch)
tree3961565a0f0d66429d48c9fe5d6e07f79a087bb3 /intern
parente61ffcffe9815b1373dc35af17958ca2c41c6184 (diff)
Fix: cycles camera dof object with non-uniform scale gave incorrect distance.
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/blender/blender_camera.cpp13
1 files changed, 4 insertions, 9 deletions
diff --git a/intern/cycles/blender/blender_camera.cpp b/intern/cycles/blender/blender_camera.cpp
index 9777de14b1e..cbc430d9240 100644
--- a/intern/cycles/blender/blender_camera.cpp
+++ b/intern/cycles/blender/blender_camera.cpp
@@ -72,17 +72,12 @@ static float blender_camera_focal_distance(BL::Object b_ob, BL::Camera b_camera)
if(!b_dof_object)
return b_camera.dof_distance();
- /* for dof object, return distance along camera direction. this is
- * compatible with blender, but does it fit our dof model? */
- Transform obmat = get_transform(b_ob.matrix_world());
+ /* for dof object, return distance along camera Z direction */
+ Transform obmat = transform_clear_scale(get_transform(b_ob.matrix_world()));
Transform dofmat = get_transform(b_dof_object.matrix_world());
+ Transform mat = transform_inverse(obmat) * dofmat;
- float3 cam_p = transform_get_column(&obmat, 3);
- float3 cam_dir = normalize(transform_get_column(&obmat, 2));
- float3 dof_p = transform_get_column(&dofmat, 3);
- float3 proj_p = dot(dof_p, cam_dir) * cam_dir;
-
- return len(proj_p - cam_p);
+ return fabsf(transform_get_column(&mat, 3).z);
}
static void blender_camera_from_object(BlenderCamera *bcam, BL::Object b_ob)