2.5D Renderer

Stage 2: Отрисовка секторов

Порталы: соединяем сектора

Интуиция подсказываем нам, что с общими стенами между секторами необходимо что-то сделать. Расширим понимание сегмента. Пусть теперь будут встречаться такие, которые мы не будем закрашивать, но через которые будет рисоваться оставшийся уровень. Назовем такие сегменты — порталами.

Сегменты, образующие порталы, будем помечать флагом и хранить в нем информацию о том, какие сектора они соединяют:


  interface Seg {
    // ..
    frontSector: Sector;
    backSector: Sector;
    isTwoSide: boolean;
  }

  function isPortal(seg: Seg): boolean {
    return Boolean(seg.isTwoSide && seg.backSector && seg.backSector !== seg.frontSector);
  }

Теперь отрисовка будет начинаться с сектора, в котором находится камера. Затем отрисовщик будет рекурсивно обрабатывать сектора, в которых будет перебирать сегменты и по итогу сформирует всю проекцию с учетом знаний о порталах.