Пока писал свой движок с незамысловатым названием AntoshkaEngine, я многократно сталкивался с ситуациями, когда я по сути копипастил чужой код и не понимал, что в нем вообще происходит. В основном это касалось каких-то математических фокусов. Честно скажу, с математикой у меня туго было в школе. Я думал "да нафиг она мне нужна!" и вообще даже не пытался понимать то, что нам рассказывали. Вот если бы я мог вернуться в прошлое и сказать самому себе: "эй, питух, она тебе нужна, чтобы писать игры!", то я бы непременно всё исправил... В универе потом высшая математика мне почему-то понравилась. Но это было всего лишь решение задачек под шаблон без понимания основ.
Смекнув, что у меня есть серьёзные пробелы в знаниях, я принял решение на некоторое время отвлечься от OpenGL и заняться программным рендерингом. Попутно я читал различные статьи по линейной алгебре, смотрел лекции на ютубе с универов по теории компьютерной графики, освежал воспоминания об операциях с матрицами.
Начал с растеризации линий (написал 3 варианта - алгоритм DDA, алгоритм Брезенхэма в двух исполнениях), многоугольников. Пытался писать всё САМ по описанию с википедии или каких-то статей. Очевидно, что мои реализации были медленными, но зато понятными для меня.
Один из результатов запечатлен на следующем видео:
Все основы математики я выводил в отдельно заведенной тетради, писал выводы и комментарии о том, что из чего следует и почему так, а не иначе. Если я захочу освежить память, я просто перечитаю свои записи, т.к. это проще, чем опять гуглить и читать всякий хлам.
Также я попробовал силы в написании рейкаст-рендеринга. Первый вариант был "классическим" в том плане, что именно так и писался wolf3d:
Какой же простой, но оригинальный алгоритм оказывается! Я бы в жизни до такого не додумался, наверное...
Далее я попытался рейкастинг немного "прокачать": во-первых ускорил бросание лучей, а во-вторых стал проверять не перечение его с элементами массива-карты, а с отрезками. Получилось на мой взгляд очень любопытно:
Ссылки на статьи/видео, которыми я пользовался, оставлять не буду, т.к. думаю, что это не такая уж сложная задачка - найти их в интернете.
Оставлю напоследок видео, где я пишу "по-быстренькому" рейкастинг на FreePascal. С комментариями:
Комментарии
Отправить комментарий