forked from bartvdbraak/blender
Cycles: Support parallel convergence mode for spherical stereo
This commit is contained in:
parent
7d82de9e84
commit
d652833a17
@ -175,7 +175,12 @@ static void blender_camera_from_object(BlenderCamera *bcam,
|
|||||||
bcam->longitude_max = RNA_float_get(&ccamera, "longitude_max");
|
bcam->longitude_max = RNA_float_get(&ccamera, "longitude_max");
|
||||||
|
|
||||||
bcam->interocular_distance = b_camera.stereo().interocular_distance();
|
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->use_spherical_stereo = b_engine.use_spherical_stereo(b_ob);
|
||||||
|
|
||||||
bcam->ortho_scale = b_camera.ortho_scale();
|
bcam->ortho_scale = b_camera.ortho_scale();
|
||||||
|
@ -247,15 +247,20 @@ ccl_device float3 spherical_stereo_direction(KernelGlobals *kg,
|
|||||||
float3 pos,
|
float3 pos,
|
||||||
float3 newpos)
|
float3 newpos)
|
||||||
{
|
{
|
||||||
|
const float convergence_distance = kernel_data.cam.convergence_distance;
|
||||||
const float3 normalized_dir = normalize(dir);
|
const float3 normalized_dir = normalize(dir);
|
||||||
/* Interocular offset of zero means either no stereo, or stereo without
|
/* Interocular offset of zero means either no stereo, or stereo without
|
||||||
* spherical stereo.
|
* 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;
|
return normalized_dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
float3 screenpos = pos + (normalized_dir * kernel_data.cam.convergence_distance);
|
float3 screenpos = pos + (normalized_dir * convergence_distance);
|
||||||
return normalize(screenpos - newpos);
|
return normalize(screenpos - newpos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user