User Tag List

Показано с 1 по 10 из 121

Тема: ЗD-движки

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11

    Регистрация
    03.01.2006
    Адрес
    Рязань
    Сообщений
    2,935
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Давай это будешь ты

    ---------- Post added at 16:42 ---------- Previous post was at 16:34 ----------

    Кстати, есть смысл подумать над ускорением flat shading в пиксельном разрешении. В Iris Ultrademo обвязка сканлайна порядка 350 тактов, хотя отрисовка 11 тактов на байт (причём обычно рисуется как раз один байт ).

    Быстрый сканлайн мог бы выглядеть примерно так:

    scanline1/2
    ld c,n1/n2 ;текстура
    exx
    add hl,bc ;-Xl ;или +Xl
    add ix,de ;-Xr ;или +Xr
    ld a,h
    exx
    ld h,a
    ld l,b ;#e0 ;или #1f
    jp (hl) ;переход на ветку нужного Xl
    :57

    sub hx ;scan_width
    add a,a ;или ld l,a,l,(hl) (-1t)
    add a,a ;
    ld l,a ;
    ld a,e
    and b ;#e0 ;или or b ;#1f
    add a,N ;Xl/8+scrx ;или 31-(Xl/8+scrx)
    jp (hl) ;переход на ветку нужной ширины в этом сегменте
    :39 (-1)

    ld e,a
    jp ... ;переход на нужную рисовалку
    для нулевой ширины:
    inc d
    ret ;выход без отрисовки
    :14

    рисовалка:
    [ld a,(de)
    xor c
    and N ;scrmask
    xor c
    ld (de),a
    inc e]
    [ld a,c
    dup N
    ld (de),a
    inc e
    edup]
    [ld a,(de)
    xor c
    and N ;scrmask
    xor c
    ld (de),a]
    inc d
    ret
    :N+14

    итого обвязка 114..128t (-1), включая inc d, ddeblock и 4(5) переходов

    ddeblock
    ld a,e
    sub b ;#e0
    ld e,a
    jp nc,scanline1 ;или jr
    ld a,d
    sub 8
    ld d,a
    jp scanline1 ;или приклеить
    :1/8*(47-25/8)=5.5 ;или 1/8*(37-15/8)=4.4

    или:
    ld a,e
    add a,b ;#1f ;всё равно перейдёт на следующий сканлайн, а нам только это и надо
    ld e,a
    sbc a,a
    and -8
    add a,d
    ld d,a
    :1/8*31=3.9

    стек (перед впрыгом надо вставить ловушку - quit):
    scanline1
    scanline2
    scanline1
    scanline2
    scanline1
    scanline2
    scanline1
    scanline2
    ddeblock ;там jp scanline1
    scanline2
    scanline1
    scanline2
    ...
    quit

    размер рисовалок:
    для width=1..8: 4..15 байт ~9 (64 шт)
    для width=9..16: 7..18 байт ~13 (64 шт)
    для width=17..24: 9..20 байт ~15 (64 шт)
    для width=25..32: 11..22 байт ~17 (64 шт) - итого ~3500 байт
    ...
    дальше можно использовать 8*8 процедур с циклом от h,hx (l свободен):
    [ld a,(de)
    xor c
    and N ;scrmask
    xor c
    ld (de),a
    inc e]
    ld a,hx ;-Xr
    and #f8
    ld l,a
    ld a,h ;-Xl
    and #f8
    sub l
    rra
    srl a
    srl a
    dec a
    ld l,a
    ;или dec l:ld l,(hl) (тогда inc e в рисовалках, и это выгодно)
    ;или ld l, в джампе на длинные линии (тогда в Xl-ветке ld l,a:ld l,(hl), и это выгодно)
    ld a,c
    ld (de),a
    inc e
    dec l
    jnz $-3
    [ld a,(de)
    xor c
    and N ;scrmask
    xor c
    ld (de),a]
    inc d
    ret
    размер 24(10)..37(23) байт ~34(20) (64 шт) - итого 2176(1280)

    По сравнению с размером сканлайнов (которые займут столько сегментов, сколько есть разных значений Xl, то есть порядка сотни) это - мелочь.
    Последний раз редактировалось alone; 24.06.2011 в 16:57.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. 2D движки на спектруме.
    от moroz1999 в разделе Программирование
    Ответов: 56
    Последнее: 08.09.2009, 12:59
  2. Трудно ли программировать спрайтовые движки?
    от Romanich в разделе Программирование
    Ответов: 29
    Последнее: 22.12.2006, 08:20

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •