diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2011-12-30 03:34:25 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2011-12-30 03:34:25 +0400 |
commit | e32a117c8be10cb48805a9c438750c04068b7fa2 (patch) | |
tree | 3961565a0f0d66429d48c9fe5d6e07f79a087bb3 | |
parent | e61ffcffe9815b1373dc35af17958ca2c41c6184 (diff) |
Fix: cycles camera dof object with non-uniform scale gave incorrect distance.
-rw-r--r-- | intern/cycles/blender/blender_camera.cpp | 13 |
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) |