Комментарии 29
К сожалению, большинство студентов выбирает простые игры типа 2Д платформеров. Я пишу эту статью для того, чтобы показать, что создание иллюзии трёхмерного мира ничуть не сложнее клонирования марио броз.
Может, потому что 3d мир требует априори большей детализации, 3d моделирования. В отличие от 2d/
На русском языке все эти статьи (и даже немного больше) вы легко найдёте, кликнув на мой профиль на хабре :)
Приятного чтения!
Я не вылизывал свой код, намеренно вывалив грязное бельё. Да, я так пишу (и не я один). Одним субботним утром я просто сел и написал вот это :)+ Плюсую :)
А. Ла Мот, Д. Ратклифф, М. Семинаторе, Д. Тайлер
Секреты программирования игр
Оригинал 1994, издание на русском 1995
там правда это был Си с вкравлениями ассемблера под DOS
Точнее, дискет к той книге мне так и не продали, и в детстве я страшно по этому поводу страдал. Ну а двадцать пять лет спустя я вдруг подумал, что интернет помнит всё. Оказывается, оригинальная книга шла с компакт-диском:
8,787 ++ 7,972 --
. На самом деле вы написали 8787 строк, а это уже совсем другой уровень сложности.Да, тогда получается
1325 ++ 510 --
. Всё ещё в три раза больше работы, чем 486 строк.Количество изменений строк кода — очень странная мера сложности проекта, особенно на таких маленьких базах кода.
Спасибо за хинт. Разные операционки — мой каждодневный кошмар.
А вообще, если есть желание перейти к движку DooM и Duke Nuker (который Build), то у меня была статья про такие движки.
Сам в январе захотел сделать что-то подобное, но в случае с трассировкой, производительность слишком сильно зависит от разрешения.
В итоге за ночь накидал 2d ячейки с трассировкой видимости ячеек(лучи до клеток периметра максимального обзора от краев клетки где стоит игрок на 90 градусов в обе стороны, дают полный обзор без провалов по ячейкам), и отрисовкой видимых ячеек(карта в виде Uint8Array(cols*rows)) пола/потолка и стен.
Это решение показало себя очень хорошо даже на компьютере 10+ летней давности. На картах размерами 4096x4096 ячеек, с текстурами 128x128 и дальностью трассировки 20 блоков.
По итогу скажу что это самая простая часть "игры".
Правда я для рендера использовал webgl, с библиотекой regl (удобная stateless обертка).
Считаю webgl очень удобным для такого рода вещей, так как позволяет легко скинуть друзьям. (И уговорить потестить твою игру куда проще когда человеку не нужно ничего ставить)
Введение в программирование: простой 3D-шутер с нуля за выходные, часть 2