Предполагая, что у вас есть нормализованный вектор n
, указывающий в направлении светового конуса, источник света на Pl
и контрольная точка на Pp
, а угол полуконуса theta
вы можететакой тест (независимо от размерности вашего пространства):
vector Vl = Pl + n
vector Vp = Pp - Pl
phi = acos(dot(Vl, Vp) / (||Vl|| * ||Vp||))
if phi <= theta
p in light cone
else
p not in light cone
Здесь точка (a, b) - это произведение двух векторов (a1 * b1 + ... + an * bn)) и || a ||является величиной вектора a, sqrt (a1 * a1 + ... + an * an).
Основная идея состоит в том, чтобы выяснить угол между осевой линией светового пучка и вектором светаисточник в точку интереса.Если этот угол больше, чем угол прожектора (наполовину), интересующий объект находится за пределами луча - в противном случае он находится внутри.
Обратите внимание, что настоящие источники света не так сильно срезаются, но этоначать.