[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42983] trunk/blender/intern/cycles/ blender/blender_camera.cpp: Fix: cycles camera dof object with non-uniform scale gave incorrect distance.
Brecht Van Lommel
brechtvanlommel at pandora.be
Fri Dec 30 00:34:37 CET 2011
Revision: 42983
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42983
Author: blendix
Date: 2011-12-29 23:34:25 +0000 (Thu, 29 Dec 2011)
Log Message:
-----------
Fix: cycles camera dof object with non-uniform scale gave incorrect distance.
Modified Paths:
--------------
trunk/blender/intern/cycles/blender/blender_camera.cpp
Modified: trunk/blender/intern/cycles/blender/blender_camera.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_camera.cpp 2011-12-29 22:21:44 UTC (rev 42982)
+++ trunk/blender/intern/cycles/blender/blender_camera.cpp 2011-12-29 23:34:25 UTC (rev 42983)
@@ -72,17 +72,12 @@
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)
More information about the Bf-blender-cvs
mailing list