diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-01-17 18:28:43 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-01-17 18:36:05 +0300 |
commit | 260b786d0724fc115c1b9920acbbfb04a5fc6cf8 (patch) | |
tree | 13e13738fd4dee619a4f82258be04257df076d8e | |
parent | 1a3abc7f79aa8f4550addfb5925fc8c3786b4753 (diff) |
Fix T60558: Cycles viewport render mismatch when the camera is a light.
-rw-r--r-- | intern/cycles/blender/blender_camera.cpp | 13 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/camera.c | 5 |
2 files changed, 10 insertions, 8 deletions
diff --git a/intern/cycles/blender/blender_camera.cpp b/intern/cycles/blender/blender_camera.cpp index fc86094949f..b41749a7f81 100644 --- a/intern/cycles/blender/blender_camera.cpp +++ b/intern/cycles/blender/blender_camera.cpp @@ -228,12 +228,17 @@ static void blender_camera_from_object(BlenderCamera *bcam, bcam->sensor_fit = BlenderCamera::HORIZONTAL; else bcam->sensor_fit = BlenderCamera::VERTICAL; - - bcam->motion_steps = object_motion_steps(b_ob, b_ob); } - else { - /* from light not implemented yet */ + else if(b_ob_data.is_a(&RNA_Light)) { + /* Can also look through spot light. */ + BL::SpotLight b_light(b_ob_data); + float lens = 16.0f / tanf(b_light.spot_size() * 0.5f); + if (lens > 0.0f) { + bcam->lens = lens; + } } + + bcam->motion_steps = object_motion_steps(b_ob, b_ob); } static Transform blender_camera_matrix(const Transform& tfm, diff --git a/source/blender/blenkernel/intern/camera.c b/source/blender/blenkernel/intern/camera.c index d791ab01482..7cf16b2b772 100644 --- a/source/blender/blenkernel/intern/camera.c +++ b/source/blender/blenkernel/intern/camera.c @@ -213,10 +213,7 @@ void BKE_camera_params_from_object(CameraParams *params, const Object *ob) else if (ob->type == OB_LAMP) { /* lamp object */ Lamp *la = ob->data; - float fac = cosf(la->spotsize * 0.5f); - float phi = acosf(fac); - - params->lens = 16.0f * fac / sinf(phi); + params->lens = 16.0f / tanf(la->spotsize * 0.5f); if (params->lens == 0.0f) params->lens = 35.0f; |