[Bf-blender-cvs] [d652833] master: Cycles: Support parallel convergence mode for spherical stereo

Sergey Sharybin noreply at git.blender.org
Sat Mar 12 11:15:57 CET 2016


Commit: d652833a1767500653fcfea5e83ad4e31a0a1c14
Author: Sergey Sharybin
Date:   Fri Mar 11 21:58:47 2016 +0500
Branches: master
https://developer.blender.org/rBd652833a1767500653fcfea5e83ad4e31a0a1c14

Cycles: Support parallel convergence mode for spherical stereo

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

M	intern/cycles/blender/blender_camera.cpp
M	intern/cycles/kernel/kernel_projection.h

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

diff --git a/intern/cycles/blender/blender_camera.cpp b/intern/cycles/blender/blender_camera.cpp
index 2a7c1d3..5bc9dfc 100644
--- a/intern/cycles/blender/blender_camera.cpp
+++ b/intern/cycles/blender/blender_camera.cpp
@@ -175,7 +175,12 @@ static void blender_camera_from_object(BlenderCamera *bcam,
 		bcam->longitude_max = RNA_float_get(&ccamera, "longitude_max");
 
 		bcam->interocular_distance = b_camera.stereo().interocular_distance();
-		bcam->convergence_distance = b_camera.stereo().convergence_distance();
+		if(b_camera.stereo().convergence_mode() == BL::CameraStereoData::convergence_mode_PARALLEL) {
+			bcam->convergence_distance = FLT_MAX;
+		}
+		else {
+			bcam->convergence_distance = b_camera.stereo().convergence_distance();
+		}
 		bcam->use_spherical_stereo = b_engine.use_spherical_stereo(b_ob);
 
 		bcam->ortho_scale = b_camera.ortho_scale();
diff --git a/intern/cycles/kernel/kernel_projection.h b/intern/cycles/kernel/kernel_projection.h
index e561cfa..d042acc 100644
--- a/intern/cycles/kernel/kernel_projection.h
+++ b/intern/cycles/kernel/kernel_projection.h
@@ -247,15 +247,20 @@ ccl_device float3 spherical_stereo_direction(KernelGlobals *kg,
                                              float3 pos,
                                              float3 newpos)
 {
+	const float convergence_distance = kernel_data.cam.convergence_distance;
 	const float3 normalized_dir = normalize(dir);
 	/* Interocular offset of zero means either no stereo, or stereo without
 	 * spherical stereo.
+	 * Convergence distance is FLT_MAX in the case of parallel convergence mode,
+	 * no need to mdify direction in this case either.
 	 */
-	if(kernel_data.cam.interocular_offset == 0.0f) {
+	if(kernel_data.cam.interocular_offset == 0.0f ||
+	   convergence_distance == FLT_MAX)
+	{
 		return normalized_dir;
 	}
 
-	float3 screenpos = pos + (normalized_dir * kernel_data.cam.convergence_distance);
+	float3 screenpos = pos + (normalized_dir * convergence_distance);
 	return normalize(screenpos - newpos);
 }




More information about the Bf-blender-cvs mailing list