@!!ex
> от направленного источника света нужно строить бокс
А зачем?
SNVampyre
Неправильнъй у тебя сорс какой-то - а вдруг множество плоскостей, в которъх внутри свет преръвается?
Потом - зачем делать специальнъй класс для такого фрустума - ето опять фрустум, только там больше плоскостей.
Z
Это просто пример.
У меня например есть просто класс Slicer, которых хранит плоскости и умеет рубить примитивы.
Вообще не стоит обсуждать код, его же всегда можно рефакторить...
А на счёт прерывающегося плоскостями источника света - я бы не стал такое учитывать.
Вычислений станет больше, а толку никакого.
SNVampyre
> Вообще не стоит обсуждать код, его же всегда можно рефакторить...
Ну, какбе форум для етого, не?
SNVampyre
> Вычислений станет больше, а толку никакого.
Ето однократное въчисление на кадр... :)
При том, оно будет работать железно, в отличии от магического кода, полного предположений о том как лежат и сколько плоскостей в фрустуме.
Которъй перестанет работать сразу же, как решиш те плоскости поменять местами (для оптимизации примерно).
Z
> Ето однократное въчисление на кадр... :)
А если лампочек у тебя несколько сотен и между ними тысячи перегородок?
> в отличии от магического кода
Ну если ты не понял суть алгоритма, то это уже твои проблемы.
Я кстати, уже изменил код и теперь в нём дыр нет никаких (там не учитывались ещё пара плоскостей).
Z
Если у меня плохой код, напиши свой.
Пусть он будет более оптимальным и понятным, и учитывает большее количество нюансов.
SNVampyre
> А если лампочек у тебя несколько сотен и между ними тысячи перегородок?
Тогда ето другая задача, чем у топикстартера вроде.
SNVampyre
> Ну если ты не понял суть алгоритма, то это уже твои проблемы.
Я понял, отсюда и комент что магический.
Тъ спокойней относись к критике, ето полезно.
Elec3C
> А как вычислять длину тени, чтобы правильно построить бокс/фрустум?
по теоореме пифагора.
вообще смари сюда: http://developer.download.nvidia.com/SDK/10.5/opengl/samples.html а конкретно пример с Cascaded Shadow Maps. там есть структура баундингсферы и цикл, который ставит камеру ис так тоб все баундинг сферы нужные были видны.
а вот понять какие нужны а какие нет тут уже надо хитростью :) моя идея в следущем: переводишь луч границы тени из глоб системы координат(он задан скажем как вершина баундинг сферы и вектор направления лучей света) в экранную систему координат и если вдруг он пересекает хоть одну из сторон экрана(монитора) (луч-проекция луча света и 4 отрезка- стороны монитора левая правая верхняя и нижняя ) то надо этот объект рисовать в шадовмапу
может так даже прощще будет чем ковыряния с вашими боксами. тут всего 2(модельвью для перехода в айспейс и прожекшн(а их произведение можно пощитать заранее тогда по 1!)) домножения матриц на объект и от 1й до 4х проверок на пересечение отрезков с лучом.
космическая смекалка :)))))))
Тема в архиве.