ДР 2013/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.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 е сцената по подразбиране).