Важная информация

User Tag List

Показано с 1 по 2 из 2

Тема: Помогите с координатами и интерполяцией

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Activist Аватар для Soplik
    Регистрация
    02.04.2005
    Адрес
    Минск
    Сообщений
    378
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Помогите с координатами и интерполяцией

    Имеем комнату из 3D шутера. Она задана координатами и высотами стен по углам, координатами-высотами прорезей в стенах (порталов), спрайтами, которые есть в комнате, и некоторыми другими штуками, которые пока не важны.

    Имеем ультраскоростную процедуру отрисовки стен в столбцовый буфер:

    LD SP, конец буфера
    LD BC, 0
    LD DE, чанк 8х2, показывающий степень затенения
    LD HL, $+6
    JP кусок процедуры PushEmpty
    LD HL, $+6
    JP кусок процедуры PushWall
    LD HL, $+6
    JP кусок процедуры PushEmpty
    LD DE, новое значение затенения
    ; выше портала стена может быть затенена по-одному, ниже -- по-другому.
    LD HL, $+6
    JP кусок процедуры PushWall
    LD HL, $+6
    JP кусок процедуры PushEmpty
    ; Далее повторяем этот кусок еще 31 раз. SP можно не перезагружать.

    PushEmpty:
    DUP 32
    PUSH BC
    EDUP
    JP (HL)

    PushWall:
    DUP 32
    PUSH DE
    EDUP
    JP (HL)

    Итого что-то около двадцати тысяч тактов на грубую отрисовку стен с окнами, причем самой процедуре пофиг форма краев -- хоть по синусоиде выгибай. Но мы пока ограничимся линейной интерполяцией.
    После отрисовки стен и спрайтов этот буфер за фрейм (точнее, за два полуфрейма) можно перебросить на экран с растяжением в 2 раза по вертикали. По грубым прикидкам, на вейтовых машинах честное 32х16 либо повиснет, либо будет tear-ить по диагонали, но можно сделать 28х14.

    Таким образом, стенная часть движка упирается в три вещи:
    1) как по-быстрому перевести координаты и высОты углов в экранные координаты.
    2) как по-быстрому линейно интерполировать высоты и освещенности
    и 3) как эти данные непосредственно раскидать по младшим байтам адресов вызова PushEmpty и PushWall.
    Прошу помощь клуба по этим вопросам!

    Стены должны получиться примерно такими (рисовал для наглядности на шахматке)

    ---------- Post added at 21:31 ---------- Previous post was at 21:25 ----------

    Последний раз редактировалось Soplik; 21.09.2013 в 00:34.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Veteran
    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,858
    Спасибо Благодарностей отдано 
    131
    Спасибо Благодарностей получено 
    104
    Поблагодарили
    62 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Книга "Графика ZX Spectrum" издательства Солон. Там все формулы и примеры на Бейсике. Переведи их в ассемблер и оптимизируй.

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

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

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

Ваши права

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