Представлен открытый проект raycaster in bash
Разработчик под ником Isabella Bosia представила открытый проект под названием raycaster in bash. Исходный код решения опубликован на GitHub.
Raycasting — это метод рендеринга для создания 3D-перспективы на 2D-карте. Когда компьютеры были медленнее, было невозможно запускать настоящие 3D-движки в реальном времени, и raycasting был первым решением. Raycasting может работать очень быстро, потому что для каждой вертикальной линии экрана нужно выполнить только расчет. Самая известная игра, использующая этот метод, — это, конечно, Wolfenstein 3D.
Полное техническое описание разработки проекта raycaster in bash, включая скриншоты, проблемы и решения, опубликовано на этой странице разработчика.
Isabella Bosia пояснила, почему это было немного сложно.
bash медленный. Это, безусловно, самая большая проблема. Он настолько медленный, что вы не сможете достичь приемлемой частоты кадров, если вам придется выполнять хотя бы одну команду на пиксель. Это означает, что вы также не сможете хранить состояние экрана в памяти ни как массив цветов (вы знали, что доступ к случайному элементу в массиве занимает линейное время?), ни как одну длинную строку (вы знали, что доступ к n-му символу в строке занимает линейное время даже в LANG=C?), потому что буквально простое чтение этого представления для его выгрузки на экран займет больше времени, чем кадр.
bash не поддерживает числа с плавающей точкой и не имеет доступа к библиотеке математических функций. Вся математика выполняется с целыми числами, масштабированными в 100000 раз.
Терминалы уродливы, если вы используете полный символ для представления каждого пикселя, поэтому здесь используются полублоки unicode с разными цветами переднего плана и фона, что фактически удваивает вертикальное
Читать на habr.com