ДР/2015/Л10/Група 0

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.qdmg закоментирате втория RectLight и замените първия със следния блок:

SpotLight mylight {
	color   (1, 1, 1)
	power   7000
	pos     (50, 50, -20)
	dir     (-0.727, -0.582, 0.364)
	innerAngle 13.8
	outerAngle 15.5
}

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