[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