Лекция 10::Задача 1

Spot лампа

Реализирайте SpotLight лампа ("фенерче"). За целта направете нов наследник SpotLight на Light и му сложете следните параметри

pos - позиция на светлината
dir - вектор, указващ посоката на фенерчето
innerAngle - ъгъл (в радиани), в който светлината ще е с максимална яркост
outerAngle - ъгъл, над който няма да има осветление.

Вижте следната схема за нагледен пример (alpha = innerAngle, beta = outerAngle. Лъчът по средата (синьо-зеленият) е dir).

Регистрирайте новосъздадения клас в DefaultSceneParser::newSceneElement.
Реализирайте SpotLight по подобие на PointLight (има само 1 семпъл). Във getNthSample намерете ъгъла между посоката на фенерчето и посоката към hitPoint-а. Ако ъгъла е под innerAngle - върнете пълна яркост в color (col). Ако е над outerAngle, върнете 0. Ако е между двете, интерполирайте между 0 и пълната яркост по подходящ начин.

Пример: ако в boxed.fmiray замените RectLight-а със следния блок:

SpotLight mylight {
	color   (7000, 7000, 7000)
	pos     (50, 50, -20)
	dir     (-0.727, -0.582, 0.364)
	innerAngle 0.24
	outerAngle 0.27
}

то трябва да получите нещо подобно: пример.