Warning: session_start(): open(/home/zxpress/tmp/sess_jentrmb9q2u9b7gplqr8vt6f22, O_RDWR) failed: No space left on device (28) in /home/zxpress/web/zxpress.ru/public_html/init.inc on line 2
Texture mapping + Phong shading реализация от Senat/Eternity Industry.

Scenergy #02
31 декабря 1999

Coding - Texture mapping + Phong shading реализация от Senat/Eternity Industry.

<b>Coding</b> - Texture mapping + Phong shading реализация от Senat/Eternity Industry.
                           Warning!!!
 Убедительно  прошу  редакторов журнала Scenergy оставить статью
без изменений. Вся ответственность за сказанное беру на себя я
                                       (Senat/Eternity Industry)
@-


Texture mapping + Phong shading

(C) Eternity Industry

    В  этой  статье  я  попытаюсь обьяснить как реализовать этот
тормозной  эффект  на  ZX.  Eго вы можете увидеть в нашей демухе
"Napalm"  (та  часть,  где  мотается  полусфера, на ней натянута
текстура  глаза и по поверхности бегает световой блик), на Amiga
этот  эффект давно уже реализован в демо Ramses'a, Mellow Chips,
Floppy,   Еxploder'om,  и  др..  Сразу  предупрежу,  что  данная
статья  предназначена  для  кодера выше среднего уровня, поэтому
всяким там SerzhSoft'am и т.д. читать это просто запрещается !!!
;)  Если  вы  поняли  как  сделать  texture map и environment,то
закодить  ЭТО  не составит особого труда, обьяснять заново T_MAP
просто  лень.  Кстати,  таким  же  способом  можно реализовать и
T_MAP, заливка ускорится примерно процентов на 30.
    Уважаемые  кодеры  !  если  вы  сразу захотите закодить это,
советую  не  спешить,  сделайте  для  начала хотя бы Gouraud или
Т_MAP!

Начну с основного цикла :

         POP  HL     ; Снимаем со стека смещемие по текстуре
                     ; (в H - шаг по Y, в L - шаг по X ).
         ADD  HL,BC  ; Прибавляем его к координатам боковой
                     ; линии полигона (по текстуре), заранее
                     ; вычисленной и вытащенной из таблицы
                     ; в начале рисования сканлинии
         LD   A,(HL) ; Берем цвет из текстуры.
         EXX         ;
         POP  HL     ; Снимаем со стека смещение по текстуре
                     ; (световое пятно)
         ADD  HL,BC  ; Прибавляем его к координатам боковой
                     ; линии полигона (по текстуре светового
                     ; пятна)
         ADD  A,(HL) ; складываем с цветом пятна
         LD   E,A    ; т.к. при сложении возникают цвета больше
                     ; #10, то цвет должен быть максимальным,
                     ; т.е. #0F. Т.к на ZX нет команды, которая
                     ; при сложении делала это, то проходится
                     ; заниматься извращением и делать таблицы
                     ; сложенных цветов.
         LD   A,(DE) ; Берем результирующий цвет.
         EXX         ;
         LD   (DE),A ; пихаем его в буфер для вывода.
         INC  E      ;

Вот и усе!!!
Теперь по расположению текстур в памяти.
Они должны располагаться в одной из страниц (например в #11),
причем в 1-ой странице максимум влезает 4 текстуры (64 x 64)
первые #40 байта - первая текстура, вторые #40 байта - вторая,
третьи #40 байта третья ... и т.д., и через #0100 то же самое.
Например:
                  Общий размер по Х = #0100

|              |              |               |               |
|  Tекстура    |  Текстура    |   Текстура    |  Текстура     |
|  светогого   |  для Tmap    |   для заднего |   для чего-   |
|  пятна       |              |   фона        |   нить еще    |
|              |              |               |               |
|              |              |               |               |


    Буфер  для  вывода  должен  иметь  размеры  38  x 256 т.к. я
считаю,  что  размер  по  Y  = 38 является оптимальным, т.к. при
стандартном C2P экран успевает обновиться за 2 фрейма. Размер по
X  = 256 сделан для того чтобы отпала необходимость клипирования
полигона   по   Х.   Буфер  для  вывода,  естественно  ,  должен
располагаться до #C000 т.е. начиная с #9A00.

    Все precalc'и в начале основного цикла точно такие же, как и
в   обычном  T_MAP'е,  с  той  разницей,  что  вычислений  нужно
выполнять  в  2  раза  больше, чем в Т_MAP'е ( вычисления таблиц
шагов  по  текстуре,  таблиц  шагов по текстуре светового пятна,
интерполяцию вершин полигона по текстуре и по текстуре светового
пятна, и т. д. )
                          Warning !

    Данный   алгоритм   будет  работать  только  с  выключенными
прерываниями  !!!  Подумайте  немного  сами,  как  сделать  так,
чтобы не зависало при IM 2 ;)
    Ну вот вроде и все. Как видите для того, чтобы сделать T_MAP
+ PHONG сначала нужно понять как работает обычный T_MAP.

Если будет заинтересованность редакторов журнала, то Mы ( EI )
можем рассказать об реализации на ZX таких эффектов как:

3d-камера, Static Phong Shading or Environment Mapping,
Morphing Stretch-tables, Z-buffer, S-buffer, alpha-channel,
Mirroring rotation, Fast Scaling, 3d-Particles, 3D Spheres
3D Tunnels, Lens Flare, любой вид 3D-shading'а и многое другое.

Senat/Eternity Industry.                               18.09.999


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:

В этот день...   15 июня