ДР/2015/Л10/Група 0
- Forums:
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 }
то трябва да получите нещо подобно: пример.