Курсовая работа: Отрисовка сцены "Отражающиеся дорожки" алгоритмом обратной трассировки лучей
WorkVector poffset = p.add (luch.mul(TINY)); // к основанию нового луча добавляется очень мальенький вектор luch чтобы при проверке не пересечь сам себя
Ray shadowRay = new Ray (poffset, luch); // создание луча проверки на затененность
if (shadowRay.trace(objects)) // в случае пеоесечения какого либо обьекта
continue; // переходим к следующему источнику освещения
float lambert = WorkVector.dot (n, luch); // нахождение коэффициента освещенности в зависимости от нормали обьекта в данной точке и напраления источника света
if (lambert > 0) {
if (kRasseivania > 0) {
float diffuse = kRasseivania*lambert;
r += diffuse*ir*light.lightred;
g += diffuse*ig*light.lightgreen;
b += diffuse*ib*light.lightblue;
}
if (kOtragenia > 0) {
lambert *= 2;
float spec = v.dot (lambert*n.x – luch.x, lambert*n.y – luch.y, lambert*n.z – luch.z);
if (spec > 0) {
spec = kOtragenia*((float) Math.pow((double) spec, (double) ns));
r += spec*light.lightred;
g += spec*light.lightgreen;
b += spec*light.lightblue;
}
}
}
}
// ОТРАЖЕНИЕ
if (kr > 0) { // если коэффициент отражения больше нуля, то обьект может отражать
float t = v.dot(n); // получение результата скалярного произведения вектора направленного к началу источника луча и нормали поверхности в данной точке
if (t > 0) {
t *= 2;