Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2019-01-17 18:28:43 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2019-01-17 18:36:05 +0300
commit260b786d0724fc115c1b9920acbbfb04a5fc6cf8 (patch)
tree13e13738fd4dee619a4f82258be04257df076d8e
parent1a3abc7f79aa8f4550addfb5925fc8c3786b4753 (diff)
Fix T60558: Cycles viewport render mismatch when the camera is a light.
-rw-r--r--intern/cycles/blender/blender_camera.cpp13
-rw-r--r--source/blender/blenkernel/intern/camera.c5
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;