Генерация ShadowMap.
Значит решил я сделать шейдер динамических теней ShadowMapping, и столкнулся с такой проблемой. Суть алгоритма такова: вначале вся сцена отрисовывается в текстуру используя только оттенок серого (такая текстура называется shadowmap), т.е. цвет пикселя в текстуре равен глубине пикселя. Затем отрисовываются все объекты, но координата Z текущего пикселя сравнивается с соответствующим значением пикселя на shadowmap. Но проблема состоит в том, что у текстуры не хватает точности для записи глубины, т.е. координаты 30 и 60 отображаются одним цветом. Подскажите, может как-то можно повторно использовать depth-buffer или какие-то алгоритмы для теней, более точные.
|
Так может не ограничивать себя оттенком серого (0-255), а "писать" глубину, используя три канала для хранения куда большего диапазона (0-16M)?
|
Как мне это сделать? Допустим, как мне записать получившееся значение глубины 0.29398240345 в 3 цвета?
|
Ты должен выяснить пределы. Когда тебе будут известны минимальное и максимальное значения глубины, записывай глубину как-то так:
Код AS3:
Код AS3:
Разумеется вот это вот (maxDepthValue - minDepthValue) лучше вычислить один раз и хранить в какой-то depthValueRange. |
Это как бы понятно. Но проблема в том, что в агал нет побитовых операций.
|
Битовым операциям есть альтернатива — целочисленное деление, поиск остатка от деления, вот это вот все. Погугли, как это делается в AGAL, бо я его совершенно забыл.
|
Не об этом ли речь идет?
Код AS3:
|
Да, об этом.
Alex Lexcuk А можешь объяснить очень подробно, что тут. Просто хочу, не просто скопировать, но и понимать всё происходящее. Комментарии к коду я конечно прочитал, но хотелось бы понимать. Добавлено через 15 минут И это как я понял генерация шадовмапа, а где шейдер считывания глубины, вот именно само преобразование. И еще, Код AS3:
|
Тут разжевано
http://www.kirupa.com/forum/showthre...l-thread/page9 Код AS3:
div деление mul умножение frc похоже на как-бы остаток деления (не может быть больше 1 естественно) sub вычитание итого глубина кодируется в серо-синий с преобладанием все-же серого цвет, а потом достается снова как-то так Код AS3:
|
А нормали ваще нужны?
|
Часовой пояс GMT +4, время: 15:36. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.