[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