Miracle
#03
16 июля 1999 |
|
Кто там кодит? - Attribute bump mapping: bump mapping для тех кто не въехал.
(c) Crite/Triumph (i) Blade/Triumph ------------------ Как то раз скучая, я решил написать эффект освещения объемной поверхности, умнее говоря bump mapping. Конечно мно- жество таких эффектов вы видели в разных демах, но мой эффект более прост и укладывается во фрэйм, точнее около 40000 тактов. Я долго думал каким методом отобра- жать свет на экране и грипп мне подска- зал, в итоге получился атрибутный вари- ант ;) Сразу же оговорюсь, что все ниже изложенное ничто иное, как просто алго- ритм bump mapping'а и предназначен для развития идеи начинающим кодерам. Итак мой метод заключается в том, что вы задаете объ- ект в виде набора пласти- нок с разным углом накло- на. Вот номера пластинок, принятые в моем исходнике: 4,3,2,1 - изменяют яркость света; 5,0 - не изменяют. Теперь о том как я определяю яркость наклонной пластинки. Для этого мне нужно задать координаты центра и текущего кусочка пучка света. По идее это делает- ся следующим образом: запоминаем коорди- наты левого верхнего угла пучка, связан- ные с левым верхним углом экрана, затем прибавляем числа для определения центра этого пучка и сравниваем полученные значения с координатами текущего кусоч- ка. Все это пожирает очень много времени и я поступил другим способом: связываю систему координат с левым верхним углом, но не экрана, а пучка света. Координаты центра относительно этой системы коорди- нат - константа, т.е. не изменяющееся число. Константу сравниваем с текущей координатой, и в зависимости от типа текущей площадки, вызываем разные проце- дуры (о них немного ниже). Координату левого верхнего угла пучка света относи- тельно левого верхнего угла экрана я использую всего один раз за один шаг эффекта, для вычисления начального адре- са в атрибутах. Процедуры вычисления яркости рабо- тают так: возьмем к примеру пластинку 1, если она расположена левее чем центр источника, то назовем это положение #1, а если правее (т.е. ее освещает под углом более близким к 90 градусов, чем в положении #1), то назовем соответственно положение #2. В таблице Light задан вид пучка света, где числа это цвет и радиус кольца одной яркости. Яркость я не стал вычислять сложными методами, а задал две таблицы TABL1 и TABL2 (для #1 и #2 положения). Формат таблицы: 1 - для 0-ой, 2 - для 1-ой и так далее до 8 яркости. Координаты задаются в отдельном фай- ле. Сначала идет координата x, потом y. Но вы должны учитывать то, что пучок света не должен вылетать за края экрана. Я не стал делать на это проверку, потому что она занимает много времени. Кстати координаты вы сможете задавать програм- мой COORD (находится в приложении), она задает 100 координат фигуры лиссажу. Для того чтобы узнать скорость прог- раммы - удалите точку с запятой в стро- ках со знаком "@". Исходник вы найдете также в приложении, называется он "LIG- HT.H" (естественно в формате рулезного ассемблера ALASM). That's all folx!
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября