[Bf-blender-cvs] [0451672] multiview: Cleanup: de-duplicate some logic

Campbell Barton noreply at git.blender.org
Thu Sep 18 11:06:11 CEST 2014


Commit: 04516721a0f411bb6b5ff0ec73aa6a2732df97b1
Author: Campbell Barton
Date:   Thu Sep 18 19:05:42 2014 +1000
Branches: multiview
https://developer.blender.org/rB04516721a0f411bb6b5ff0ec73aa6a2732df97b1

Cleanup: de-duplicate some logic

===================================================================

M	source/blender/blenkernel/intern/camera.c

===================================================================

diff --git a/source/blender/blenkernel/intern/camera.c b/source/blender/blenkernel/intern/camera.c
index 4c8d0f5..1f55eed 100644
--- a/source/blender/blenkernel/intern/camera.c
+++ b/source/blender/blenkernel/intern/camera.c
@@ -614,6 +614,7 @@ void BKE_camera_multiview_basic(Object *camera, const bool left)
 
 	float rotmat[3][3];
 	float fac = 1.0f;
+	float fac_signed;
 
 	unit_m3(rotmat);
 
@@ -631,41 +632,30 @@ void BKE_camera_multiview_basic(Object *camera, const bool left)
 	if (pivot == CAM_S3D_PIVOT_CENTER)
 		fac = 0.5f;
 
+	fac_signed = left ? fac : -fac;
+
 	/* rotation */
 	if (convergence_mode == CAM_S3D_TOE) {
 		angle = -atanf((interocular_distance * 0.5f) / convergence_distance);
 
-		if (left)
-			angle = -angle;
-
-		rotmat[0][0] =  cosf(angle * 2.0f * fac);
-		rotmat[2][0] = -sinf(angle * 2.0f * fac);
-		rotmat[0][2] =  sinf(angle * 2.0f * fac);
-		rotmat[2][2] =  cosf(angle * 2.0f * fac);
+		rotmat[0][0] =  cosf(angle * 2.0f * fac_signed);
+		rotmat[2][0] = -sinf(angle * 2.0f * fac_signed);
+		rotmat[0][2] =  sinf(angle * 2.0f * fac_signed);
+		rotmat[2][2] =  cosf(angle * 2.0f * fac_signed);
 	}
 
 	copy_m4_m4(tmpmat, camera->obmat);
 	mul_m4_m4m3(camera->obmat, tmpmat, rotmat);
 
 	/* translation */
-	if (left) {
-		translate_m4(camera->obmat,
-		             -interocular_distance * cosf(angle) * fac, 0.0f,
-		             interocular_distance * sinf(angle) * fac);
-	}
-	else {
-		translate_m4(camera->obmat,
-		             interocular_distance * cosf(angle) * fac, 0.0f,
-		             -interocular_distance * sinf(angle) * fac);
-	}
+	translate_m4(camera->obmat,
+	             -interocular_distance * cosf(angle) * fac_signed, 0.0f,
+	             interocular_distance  * sinf(angle) * fac_signed);
 
 	/* prepare the camera shift for the projection matrix */
 	/* Note: in viewport, parallel renders as offaxis, but in render it does parallel */
 	if (convergence_mode == CAM_S3D_OFFAXIS) {
-		if (left)
-			*r_shift += ((interocular_distance / data->sensor_x) * (data->lens / convergence_distance)) * fac;
-		else
-			*r_shift -= ((interocular_distance / data->sensor_x) * (data->lens / convergence_distance)) * fac;
+		*r_shift += ((interocular_distance / data->sensor_x) * (data->lens / convergence_distance)) * fac_signed;
 	}
 }




More information about the Bf-blender-cvs mailing list