Отрисовка спрайтов в Wolf3D-подобном движке

Есть наброски псевдо-3d движка на голом си, карта-основа представляет собой двумерный массив из единиц и нулей. Единицы – стены, нули – свободное для "ходьбы" пространство. Так же есть двоечки, которые должны быть спрайтами.

В качестве алгоритма рейкастинга используется пошаговый на косинусах и синусах. Псевдокод (т.к. задаю вопрос с телефона):

Start = pov - 30°
End = start + fov
while (start <= end)
   rayx = playerx
   rayy = playery
   while !wall
      rayx += cos(start)
      rayy += sin(start)
   start += fov/screen_weight

вот этим циклом кастуются лучики, дальше отрисовываются (не суть важно как, метод один).

Вопрос: гайды от индусов на ютубчике и прочих ресурсах предлагают отрисовывать спрайты после отрисовки кадра-сцены, запоминая предварительно координаты спрайта на карте и запоминая (в дополнительный массив) длину каждого из брошеных ранее лучей, как например в этом гайде: https://proglib.io/p/raycasting-for-the-smallest . Есть ли возможность отрисовать и стены и спрайты за один проход лучей? То есть бросил луч, встретил спрайт, записал координаты, луч прошел дальше до стены. Отрисовал вертикальный столбец и сразу же отрисовал столбец спрайта ближе к игроку. Шаг луча дальше по FOV и так далее. Если есть, то как лучше это реализовать?

Если будет нужна дополнительная информация или код, то сообщите, докину в тред. Прошу извинить за псевдокод в вопросе.


Ответы (0 шт):