[Bf-blender-cvs] [260b786d072] master: Fix T60558: Cycles viewport render mismatch when the camera is a light.

Brecht Van Lommel noreply at git.blender.org
Thu Jan 17 16:40:36 CET 2019


Commit: 260b786d0724fc115c1b9920acbbfb04a5fc6cf8
Author: Brecht Van Lommel
Date:   Thu Jan 17 16:28:43 2019 +0100
Branches: master
https://developer.blender.org/rB260b786d0724fc115c1b9920acbbfb04a5fc6cf8

Fix T60558: Cycles viewport render mismatch when the camera is a light.

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

M	intern/cycles/blender/blender_camera.cpp
M	source/blender/blenkernel/intern/camera.c

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

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;



More information about the Bf-blender-cvs mailing list