ДР 2013/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.retrace закоментирате втория 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
}
то трябва да получите нещо подобно: пример.

Comments
компиплация
Здравейте,
Искам да попитам, при компилация на кода от домашно 10, защо след като се компилира просто връща -1, и не изкарва никаква сцена. Пробвах го и с други файлове, но пак връща същото.
Би следвало да издава някаква
Би следвало да издава някаква грешка, ако не може да парсне сцената. Можеш да провериш като компилираш в Debug и дебъгваш - къде се чупи. Иначе сега тествах отново под Windows - кодът към таг homework10 си се компилира и ренди (boxed.trinity е сцената по подразбиране).