2.5D Renderer

Stage 3: Binary Space Partition

Разные высоты секторов: проблема

Теперь зададим соседним секторам разные уровни пола. Портал между ними уже не является полностью открытым проемом: разница высот должна образовать нижнюю стенку ступени. Аналогично разница потолков должна создавать верхнюю стенку.

2.5D Renderer

2D Renderer

Управление камерой WASD и ZX

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

Немного кода

В примере внутренний сектор поднят относительно внешнего. На следующем шаге портал будет сравнивать высоты обоих секторов и рисовать только недостающие верхнюю и нижнюю части стены.


  const outsideSector: Sector = {
    // ..
    floorHeight: 0,
    ceilHeight: 10_000,
  };

  const insideSector: Sector = {
    // ..
    floorHeight: 2_000,
    ceilHeight: 10_000,
  };