Все несложно. У нас стена, это квадрат на карте, у которого есть только координаты левого верхнего угла, допустим (100, 100) и размер стороны квадрата 100. И, например, у нашего луча сейчас координаты (113, 159). Так вот, чтобы определить в каком квадрате наш луч, необходимо целочисленно поделить координаты луча и затем умножить их на размер квадрата. ( (113 // 100) * 100, (159 // 100) * 100 ) = (100, 100). То есть, мы попали в квадрат, и проверку на этом завершаем.
@@StandaloneCoder спасибо! Теперь всё ясно. Я просто упустил тот момент, что мы как бы рисуем луч не сразу целиком, а постепенно, и на каждом шаге проверяем находится ли он в квадрате. Я просто думал, что мы сразу целиком рисуем луч) И ещё раз прошу продолжать делать видео. Не забрасывайте это дело))
@@StandaloneCoder Здравствуйте, спасибо за урок, отлично объясняете, но у меня проблема такая вот,у меня все получилось отлично только вот лучи на экране остаются и когда я двигаюсь они тоже показывают направление, я про лучи которые показывают обзор, когда вы сделали графику от 2д до 3д то у вас они исчезли а у меня нет:(
Спасибо ОГРОМЕЙНЕШЕЕ за столь изложенный гайд! Не ожидал от себя, что разберусь полностью в такой проекции. Функция enumerate() конечно неплохая, но когда о ней ничего не знаешь, ловишь себя на мысли, что непонятно, что вообще она вытворяет в программе. Положа руку на сердце напишу, что следующий алгоритм наверное более понятный и дружелюбный для такой цели, как граббинг всех координат квадратов: world_map = [] y=0 for line in text_map: x=0 for sign in line: if sign == 'w': world_map +=[(x*tilesize, y*tilesize)] x += 1 y += 1
Офигеть вы крутой программист-математик! Вот зря я науки не учил... Вообще крутой специалист! Удачи и хорошего вам будущего и побольше такие видео выкладывайте!!! Вам бы профессором в университете быть + науки преподавать разные, помимо программирования!
огромное спасибо за ваш труд! единственная серия роликов в которой подробно и понято рассказано про ray casting, по вашим видео сделал шутер на C++ и библиотеке sfml
@@sadboy8538 я хоть и не вовремя, но у меня такая проблема возникла, лучи, что должны сталкиваться со стенами и поворачивать вместе с игроком не поворачивается, сам игрок поворот делает спокойно, а лучи нет. Я, может быть, что-то пропустил, но я несколько раз перепроверил код, не могу найти причину.
Очень информативное видео, даже не думал, что случайно наткнусь на такой шедевр. За 1 присест посмотрел все части и прям очень понравилось. Однозначно лайк💪
Добрый день и спасибо большое за видео, недавно начал изучать питон и сделал 1 игру в виде галаги. На основе данных уроков сделаю 2 проект. Большое спасибо за ваш труд.
Пиздец! Да я бы в жизни сам не разобрался! И Тут даж бутылка бы не помогла... Теперь все понятно! Спасибо тебе огромное! Буду разбираться более конкретно что до как по твоему коду, а то с первого раза не все в голове уложилось. ))) Как сделаю игру обязательно скину тебе ;) P.S. Первый!))
По поводу момента поворота линии в 5:35 Перемещение точки осуществляется путём нажатия W, A. S, D. И у многих затем появляются вопросы на подобии: "У меня линия постоянно смотрит вправо". Изменение поворота линии осуществляется путём нажатия кнопок со стрелочками .
И наложение текстур интересно, и оптимизационная часть, сам бы 100 лайков поставил, если бы мог) Оптимизация, часом, не использованием формул нахождения персечения двух отрезков?
Мужик кайф. но делай просто угол направления = direction а вперед вбок и назад - это direction+90 direction-90 direction -180 имея угол - расчитай вектор горизонтальной скорости и вертикальной скорости - x += cos(direction) y += sin(direction) вроде так. и так ты и пулю кастовать можешь. не только шаг.. или ты об этом и сказал я хз) * что я имею ввиду -ОДНА формула для всех движений игрока :) зависящая от view_direction
Я вот бедолага-аналитик, изучал python для построения нейронных сетей и анализов, но всегда хотелось игры делать. Но не их готовых конструкторов, как юнити и анреал, а что бы самому понимать и прописывать физику и законы мироздания. Везде читаю - нужен только Си. питон - тормоз, игры на нем не лепят. И чо. мне язык что ли переучивать? Причем в ущерб математическим возможностям питона. нееее, я начал верить, что найдется спаситель - и покажет мне всю мощь математики и лучшего для нее языка программирования. ЧУВАК СПАСИБО, ТЫ ТОТ САМЫЙ СПАСИТЕЛЬ!!
не ну я подофигел кончено я не думал что в питоне хпхпхахаха это возможно))) респект. рендеринг конечно я понимаю что это основы основ но СУПЕРСКИ сделан ои подано
В следующий раз если делаете серию видосов, размещайте плиз на главной картинке номер серии (части), а то когда репостишь ваши видосы например в вк, то там приходится помучиться, чтобы понять где какая час обучающего ролика.
Ура ты сделал урок! Интересно будет узнать про текстурирование))) И у меня есть проблема. Что бы повернуть игрока мне каждый раз приходится тыкать на кнопку. Как сделать, что бы поворачивался если зажать, а не каждый раз тыкать?
на моменте отрисовки лучей начинает сильно лагать, не могу понять с чем это связано, ноутбук далеко не кирпич. А уроки в целом отличные, узнал очень много нового p. s. посмотрел следующий ролик про оптимизацию и все понял, спасибо)
Привет. Спасибо за видео, очень подробно. Один момент, я немного переработал принцип формирования карты и часть настроек перенес в json файл, после чего справа появилась черная полоса. От чего так могло произойти?
Хорош чувак, пришлось правда на 0,75 смотреть, ибо кодишь быстро, я не успевал. А так, мути еще уроки (: P.S. Я бы посоветовал начать с саааамого начала с установки python, где качать и как, совсем для нубов (для меня) Ы
Единственное что не понял, что за IDE ты используешь? (Да, я пока с ними не особо знаком, так как ранее сначала писал простые скрипты в Notepad++ а потом отдельно файлами, и то в linux (С IDE просто не приходилось сталкиваться), а сейчас изредко использую Visual studio с плагином на питон)
@Yeeloxxt Сначала писал простые скрипты в нотпаде, это было на Винде. Потом я переустановил операционку, и работал уже там, не меняя расширение с txt на py. Это уже было на Линуксе через запуск через терминал "... А потом отдельно файлами, и то в Linux..."
Классный получился проект, лайк! Только скажи пожалуйста, в каком редакторе ты делаешь код? Через cmd не получается открыть окно, а через IDLE не хочу. Буду премного благодарен))
Отличный туториал, сам по нему делал игру, но я тут понял, что рейкастинг немного тупая технология, я хочу сказать что мы знает координаты игрока и его угол поворота и мы знаем всю карту, более того, карта состоит из квадратов, значит мы можем провести вектор от точки игрока до вершины и получить сразу ее координаты, так делать для каждого элемента карты, что в поле зрения и что виден. Затем получив лишь нижнюю точку вершины уже на экране можно получить верхнюю просто отразив её относительно горизонта, затем получить второе ребро точно также, затем залить это полигоном.
Я реализовал это, но ещё карта - это набор вершин. Это было чуточку труднее рейкастинга, но оно того стоит! Суть такова: Перемещаем систему координат к камере, поворачиваем систему координат на угол поворота камеры. находим проекции векторов от вершин к камере с экраном. На основе расстояния вычитываем размер. там где была проекция - строим отрезок заданного размера. добавляем вершины в стек и рисуем полигон. Вуаля! У меня на карте с +-300 вершинами 400 фпс. Это получается какой-то полигональный рейкастинг, но без рейкастинга.
Мега топ, но у меня почему-то не убираются 2d обзор при переходе в 3d подскажите пожалуйста как это исправить, а ещё был бы очень рад если бы вы сказали какой монитор лутше всего взять для этих размеров (имеется в виду сколько дюймов)
Очень круто, но я немного не допёр по какому принципу ты определил пересечение со стенами)))
Все несложно. У нас стена, это квадрат на карте, у которого есть только координаты левого верхнего угла, допустим (100, 100) и размер стороны квадрата 100. И, например, у нашего луча сейчас координаты (113, 159). Так вот, чтобы определить в каком квадрате наш луч, необходимо целочисленно поделить координаты луча и затем умножить их на размер квадрата. ( (113 // 100) * 100, (159 // 100) * 100 ) = (100, 100). То есть, мы попали в квадрат, и проверку на этом завершаем.
@@StandaloneCoder спасибо! Теперь всё ясно. Я просто упустил тот момент, что мы как бы рисуем луч не сразу целиком, а постепенно, и на каждом шаге проверяем находится ли он в квадрате. Я просто думал, что мы сразу целиком рисуем луч) И ещё раз прошу продолжать делать видео. Не забрасывайте это дело))
@@StandaloneCoder Здравствуйте, спасибо за урок, отлично объясняете, но у меня проблема такая вот,у меня все получилось отлично только вот лучи на экране остаются и когда я двигаюсь они тоже показывают направление, я про лучи которые показывают обзор, когда вы сделали графику от 2д до 3д то у вас они исчезли а у меня нет:(
@@StandaloneCoder привет, а какую среду программирования ты используешь?
@@guitaresstv6777 PyCharm
Спасибо ОГРОМЕЙНЕШЕЕ за столь изложенный гайд! Не ожидал от себя, что разберусь полностью в такой проекции.
Функция enumerate() конечно неплохая, но когда о ней ничего не знаешь, ловишь себя на мысли, что непонятно, что вообще она вытворяет в программе. Положа руку на сердце напишу, что следующий алгоритм наверное более понятный и дружелюбный для такой цели, как граббинг всех координат квадратов:
world_map = []
y=0
for line in text_map:
x=0
for sign in line:
if sign == 'w':
world_map +=[(x*tilesize, y*tilesize)]
x += 1
y += 1
Ну, теперь у меня есть стимул учить математику с синусами и косинусами. Ты лучший)
а што делать есле нехочет поворачивать я все проверил
@@ronews4723 учить русский язык
@@Yan_Yagellon и зач он мне
@@ronews4723 ахвхахх логично))
Тригонометрия называется
Ля, видео новое, всё понятно объясняется, как же я рад что нашёл это видео
You know this is good content when you don't understand Russian but still get entertained. Keep up the good work!
Офигеть вы крутой программист-математик! Вот зря я науки не учил... Вообще крутой специалист! Удачи и хорошего вам будущего и побольше такие видео выкладывайте!!! Вам бы профессором в университете быть + науки преподавать разные, помимо программирования!
огромное спасибо за ваш труд! единственная серия роликов в которой подробно и понято рассказано про ray casting, по вашим видео сделал шутер на C++ и библиотеке sfml
Спасибо огромное! Лучшее объяснение алгоритма рэйкастинга из тех, что мне удалось найти, в том числе и на английском языке!
Несколько раз пересматривал видосик, очень помогло написать свою игру. Эта озвучка такая клёвая, жаль новые видео не с ней. Спасибо за контент.
лучшее видео что я видел по играм, столько новой и полезной информации, а главное - кратко и понятно.
Не везло вам, видать, с рекоммендациями от ютуба.
Вот спасибо, ну хоть один нормальный человек!!!
а што делать есле нехочет поворачивать я все проверил
@@ronews4723 if keys[pygame.K_LEFT]:
self.angle -= 0.02
if keys[pygame.K_RIGHT]:
self.angle += 0.02
@@sadboy8538 я хоть и не вовремя, но у меня такая проблема возникла, лучи, что должны сталкиваться со стенами и поворачивать вместе с игроком не поворачивается, сам игрок поворот делает спокойно, а лучи нет. Я, может быть, что-то пропустил, но я несколько раз перепроверил код, не могу найти причину.
@@shangtsung9935 даже не знаю что нужно сделать :(
@@sadboy8538 печально, но все равно спасибо.
Очень информативное видео, даже не думал, что случайно наткнусь на такой шедевр. За 1 присест посмотрел все части и прям очень понравилось. Однозначно лайк💪
Enjoyed reading through the code!
Very didactic!
Thanks man!
афигеть, в 15мин пояснить как делать 3д лабирин с ходьбой, это круто.
Ага, был бы другой автор, растянул бы видео на час
а што делать есле нехочет поворачивать я все проверил
@@ronews4723 Решил?
16 минут 14 секунд)
@@ronews4723 решил?
Вы лучший! было бы не плохо, если вы посвятите несколько видео уроков, нейронным сетям, с нуля естественно)
Я никогда раньше не думал, что математика может когда-то пригодиться в таком масштабе. Я просто охренел от твоих знаний. Лайк и подписка однозначно!
Это же Hovertank 3D! Просто история жанра FPS перед глазами) Просто нереальное спасибо!
Лучший .Очень и очень интересно, а главное круто.
Добрый день и спасибо большое за видео, недавно начал изучать питон и сделал 1 игру в виде галаги. На основе данных уроков сделаю 2 проект. Большое спасибо за ваш труд.
Бро ты легенда только благодаря тебе смог понять принцип работы "простых" Игр и делать их зная базу питона
молоца ❤ 😊
Почему я никогда не знал об этом канале! Вау!
Большое спасибо за видео. Честно ,удивился , когда узнал что можно делать 3д игры в Python с помощью математики
Подписка и лайк с меня
Спасибо большое, ты заслуживаешь больше подписчиков!
Ваууууууууууууууууу, никогда не думал что 3d игру создавать очень просто, а то создавал раньше только 2d, думал другое сложно
Я также смотрел ваш урок по деланью змейки. Тоже классно!
Дядя ты гений. Так все быстро сделал. Браво.
Я только начал смотреть но уже очень круто, возможно такими темпами на день рождения брата сделаю ему рейкастинг одной игры которую он любит ещё с ps1
Надеюсь выйдет 2ая часть урока!👍👍
Да, стал работать над второй частью
Топ, хоть и голосом робота но это ничуть не мешат
У него микрафона нету
голосом робота даже круче
Пиздец! Да я бы в жизни сам не разобрался! И Тут даж бутылка бы не помогла... Теперь все понятно! Спасибо тебе огромное! Буду разбираться более конкретно что до как по твоему коду, а то с первого раза не все в голове уложилось. ))) Как сделаю игру обязательно скину тебе ;)
P.S. Первый!))
Не первый) он первее о моей узнал
Делаю 3д игру на JavaScript + CanvasAPI по вашим урокам)
Очень интересно, я понял как всё работает, уже до конца. Спасибо
Рад слышать!
По поводу момента поворота линии в 5:35
Перемещение точки осуществляется путём нажатия W, A. S, D. И у многих затем появляются вопросы на подобии: "У меня линия постоянно смотрит вправо".
Изменение поворота линии осуществляется путём нажатия кнопок со стрелочками .
У меня линия постоянно смотрит вправо, при этом не реагирует на стрелочки или еще что то что могло их напоминать. что делать?
@@SteelNoodles29 тоже самое, я хз что делать
Что делать если вообще не двигается? В 3D не работает, а в 2D спокойно?
Что делать если линия не ходит за игроком
Бля чел, ты лучший
Реально развивающая тема а не питон за час у Хауди хо
Типичный Хауди Хо: Ого! Ты умеешь писать команду print()! Теперь напиши 4Д игру с шейдерами и HD персонажами на Python только с модулем pygame!
Ты лучший челлл, продолжай дальше
это очень хороший урок!!! лайк, подписка, колокольчик этому человеку :-)
Don't understand a word of russian but it's really cool !
Ура, спасибо! Ты услышал меня
Интересно и прикольно, конечно много вещей тут мне пока не понятны но многое от сюда тоже можно взять
И наложение текстур интересно, и оптимизационная часть, сам бы 100 лайков поставил, если бы мог) Оптимизация, часом, не использованием формул нахождения персечения двух отрезков?
нет, я предложу использование своей версии DDA алгоритма
@@StandaloneCoder Интересно
лайк и подписка! Продолжай, дружище.
Ты молодец продолжай
Будь здоров
Крутой гайд. Спасибо!
Это магия какая-то!)
Спасибо! Очень классное видио!
Поздравляю с сотней подписчиков!
Спасибо!
как человеку, с бухты барахты поставленному на должность техартиста, удивительно было узнать, что под капотом.
Очень круто спасибо большое)))
Ты очень крутой, спасибо тебе.
Мужик кайф.
но делай просто угол направления = direction
а вперед вбок и назад - это direction+90 direction-90 direction -180
имея угол - расчитай вектор горизонтальной скорости и вертикальной скорости -
x += cos(direction)
y += sin(direction)
вроде так.
и так ты и пулю кастовать можешь. не только шаг..
или ты об этом и сказал я хз)
* что я имею ввиду -ОДНА формула для всех движений игрока :)
зависящая от view_direction
Просто топ, я всё понял сразу же)))
hi, i just want to say that I REALLY appreciate the english subtitles!
Супер!!! Спасибо, дружище!!!
Спасибо огромное, сильно помог, очень интересно
Я вот бедолага-аналитик, изучал python для построения нейронных сетей и анализов, но всегда хотелось игры делать. Но не их готовых конструкторов, как юнити и анреал, а что бы самому понимать и прописывать физику и законы мироздания. Везде читаю - нужен только Си. питон - тормоз, игры на нем не лепят. И чо. мне язык что ли переучивать? Причем в ущерб математическим возможностям питона. нееее, я начал верить, что найдется спаситель - и покажет мне всю мощь математики и лучшего для нее языка программирования. ЧУВАК СПАСИБО, ТЫ ТОТ САМЫЙ СПАСИТЕЛЬ!!
Спасибо автору и конечно Джону Кармаку! Автор где ты этому научился ???? скажи ??? ресурс про математику??
Спасибо папаша за это видео 3 питона хорошого обяснения
Спасибо огромное помог выручил лайк!!!!
не ну я подофигел кончено я не думал что в питоне хпхпхахаха это возможно)))
респект.
рендеринг конечно я понимаю что это основы основ но СУПЕРСКИ сделан ои подано
запомни, в любом языке программирования возможно всё, кроме того, что нарушает законы физики
Завтра попробую есле время будет, а так все прикольно
Все: Нужна математика, говорили они!
Я: Не нужна математика, говорили они!
годная инцтрукция. спасибо
сегодня буду пробовать
Спасибо тебе большое. Помог при вызове других файлов.
Спасибо,продолжай !!
I don't understand any word but this man is a genius
Yeah but as far as understood
Спасибо за видео!
Круто!
Многие моменты не понял. Но узнал много полезного.
Ты крутой, а сколько лет занимаешься программированием?
Классно! Спасибо! ))
ТОП ТОП ТОП!!!!! Очень круто
Оч круто!!! Расскажи про натягивание текстур на такие стены
В следующий раз если делаете серию видосов, размещайте плиз на главной картинке номер серии (части), а то когда репостишь ваши видосы например в вк, то там приходится помучиться, чтобы понять где какая час обучающего ролика.
ты профессионал который может сделать все что угодно?
Ура ты сделал урок! Интересно будет узнать про текстурирование))) И у меня есть проблема. Что бы повернуть игрока мне каждый раз приходится тыкать на кнопку. Как сделать, что бы поворачивался если зажать, а не каждый раз тыкать?
Возьми принцип управления из этого видео и тыкать больше не придется
на моменте отрисовки лучей начинает сильно лагать, не могу понять с чем это связано, ноутбук далеко не кирпич. А уроки в целом отличные, узнал очень много нового
p. s. посмотрел следующий ролик про оптимизацию и все понял, спасибо)
@SEMKI TV у меня сильно лагает, как решить?
Ты просто гений!
по моему бро слишком крут
Отличные ролики. Вопрос, как такой голос повествователя генерируется? )
Привет! Как ты сделал луч на 5:25 ? просто сижу минут 20 и не могу понять как ты это сделал. Думаю заметишь
Учу питон неделю)) но походу зайду сюда позже))))
EXCELLENT!!!
Ты молодец продолжай. молодец
Привет. Спасибо за видео, очень подробно. Один момент, я немного переработал принцип формирования карты и часть настроек перенес в json файл, после чего справа появилась черная полоса. От чего так могло произойти?
за такое грех лайк не поставить
Хорош чувак, пришлось правда на 0,75 смотреть, ибо кодишь быстро, я не успевал. А так, мути еще уроки (:
P.S. Я бы посоветовал начать с саааамого начала с установки python, где качать и как, совсем для нубов (для меня)
Ы
с самого начала поройся на ютубе и в гугле, контента хватает, зачем человеку время тратить на совсем уж простые вещи!?
@@Vitaliy-ct2wv ты не представляешь на сколько люди могут быть тупыми..
@@truenickname2015 если хочешь сделать игру с нуля - ИЗУЧИ ЯЗЫК
хотя-бы не полностью, но ИЗУЧИ
Брат ты крут
Спасибо огромнейшее
спасибо за урок
Спасибо за урок! Как раз 3д игру делаю )
Thanks for the eng subtitles
Единственное что не понял, что за IDE ты используешь?
(Да, я пока с ними не особо знаком, так как ранее сначала писал простые скрипты в Notepad++ а потом отдельно файлами, и то в linux (С IDE просто не приходилось сталкиваться), а сейчас изредко использую Visual studio с плагином на питон)
Это pycharm
в линуксе нет Notepad++
@Yeeloxxt Сначала писал простые скрипты в нотпаде, это было на Винде.
Потом я переустановил операционку, и работал уже там, не меняя расширение с txt на py. Это уже было на Линуксе через запуск через терминал
"... А потом отдельно файлами, и то в Linux..."
Great video!!!!
А можешь, пожалуйста сказать, в каком редакторе файлов ты работаешь?
Просто я посмотрел и мне он понравился но не могу понять что это.
PyCharm
@@StandaloneCoder Спасибо!
Не уходи пж НЕЕЕЕЕЕЕЕЕЕЕТ!
This guy is a saviour
You did english
Классный получился проект, лайк! Только скажи пожалуйста, в каком редакторе ты делаешь код? Через cmd не получается открыть окно, а через IDLE не хочу. Буду премного благодарен))
Это PyCharm
@@coderlweer7060 Если хочешь могу научить всем фишкам
@@yuliyaparamonova5596 здравствуйте, у меня есть к вам пара вопросов про PyCharm
Отличный туториал, сам по нему делал игру, но я тут понял, что рейкастинг немного тупая технология, я хочу сказать что мы знает координаты игрока и его угол поворота и мы знаем всю карту, более того, карта состоит из квадратов, значит мы можем провести вектор от точки игрока до вершины и получить сразу ее координаты, так делать для каждого элемента карты, что в поле зрения и что виден. Затем получив лишь нижнюю точку вершины уже на экране можно получить верхнюю просто отразив её относительно горизонта, затем получить второе ребро точно также, затем залить это полигоном.
Я реализовал это, но ещё карта - это набор вершин.
Это было чуточку труднее рейкастинга, но оно того стоит!
Суть такова:
Перемещаем систему координат к камере,
поворачиваем систему координат на угол поворота камеры.
находим проекции векторов от вершин к камере с экраном.
На основе расстояния вычитываем размер.
там где была проекция - строим отрезок заданного размера.
добавляем вершины в стек и рисуем полигон.
Вуаля! У меня на карте с +-300 вершинами 400 фпс.
Это получается какой-то полигональный рейкастинг, но без рейкастинга.
Привет, спасибо за урок. можешь пожалуйста сказать как сделать так чтобы игрок сталкивался со стенами
Мега топ, но у меня почему-то не убираются 2d обзор при переходе в 3d подскажите пожалуйста как это исправить, а ещё был бы очень рад если бы вы сказали какой монитор лутше всего взять для этих размеров (имеется в виду сколько дюймов)
Кто лайк зажал? Раскошеливайтесь жмоты!
а што делать есле нехочет поворачивать я все проверил
да ты просто рукожоп, у меня лично все работает
@@ronews4723 да
@@doctor7628 токсик