@@cdapchier они никогда не отвечают ни через день ни через неделю ни через месяц ни через год ни через несколько лет никогда Что-то сильно для занятости
Сам делал такую подобную архитектуру с glfw и opengl не раз. Но твоя сиситема проверки нажатия клавиш это что-то гениальное, чертовски простое и удобное. Спасибо за видос и удачи с каналом. P.S. иногда возникает ощущение что аудиодорожка растянута, темп речи резко меняется
На самом деле очень хороший контент. Архитектура пока простая и намного проще разобраться как делать свой движок. Я как-то пробовал смотреть подобные видео, но зарубежные. Там обычно слишком усложняют вначале, делают что-то типа unreal engine, c внешней точкой входа, делают сразу супер-расширяемую архитектуру, и в итоге это гораздо сложнее для понимания
Приветствую! А можно, пожалуйста, ссылку на подобные видео? :) Или в какую сторону копать? Хотелось бы увидеть воочию эту "супер-расширяемую архитектуру" :) Заранее спасибо!
@@erebusrecollections1563Обойдёшься. Если сам не найдешь, то ты ничего не стоишь. Ожидать помощи от других, тоже самое, что иметь удочку и не рыбачить ею для пропитания.🤡
Кому интересно, куда серия уроков продвинулась на данный момент: th-cam.com/video/hWuM9pszT_U/w-d-xo.html Инструкция по сборке (кода текущего состояния проекта): th-cam.com/video/opu3qQA_-hM/w-d-xo.html Важная информация! В видео могут быть некоторые непонятные моменты. Если у вас возникнут вопросы, задавайте их в комментариях. В дальнейшем я буду улучшать качество уроков, создание этого видео заняло неделю, надеюсь на поддержку этой серии. Чтобы поддержать видео, вы можете поделиться им и оценить. Я же, буду готовить вторую часть про шейдеры, текстуры и VBO с VAO. Теперь у канала есть свой дискорд сервер: discord.gg/AaqJphm На нём вы можете задавать вопросы, в том числе "когда новая часть {серия_уроков}", указывать на возможные ошибки, предлагать темы видео, помогать другим, и получить помощь. Будут, естественно, публиковаться и новости канала. Не забывайте и про группу ВК (она не заброшена) В разработке и видео по ИИ в гоночной игре на BGE.
@@stepan2897 understand в настоящем. undesrtood 2-ая форма, в прошлом. Если бы он написал understood - то он ничего не понял. А он написал "Я ничего не понимаю, но хорошая работа!".
@@1play2fun Эммм... Если есть вспомогательное do или don't, то глагол, который с ним используеться, должен быть в первой форме. И кстати, сама форма глагола не означает время этого действия, наглядный тому пример - пассивный вид, где для настоящей простой формы используеться is/are/am и третья форма.
Классный видеоурок. Только осложнён нагромождённым обработчиком событий, непонятно, зачем оно нужно, если есть glfwSetKeyCallback и glfwGetKey Про глобальные объекты. ИМХО. В Java ещё можно обойтись чисто статическими полями и функциями, а в C++ статические поля реализованы крайне неудобно. Сам сталкивался с этим. Если с бесконечным дублированием сигнатуры функций из *.h в *.cpp ещё можно смириться, то с дублированием всех полей в *.cpp смириться нереально, это ещё больше нагружает и без того сложный код. Я использую синглетон Майерса. Оказалось удобная штука. Ещё и деструкторы сама вызывает при завершении программы. Буду ждать следующий выпуск)
Мне кажется, что уже писал комментарий, когда впервые это видно попалось, но не нахожу его.. Короче, это офигенно :D и юмор есть и визуал со стилем речи приятный и объяснения (но хотелось бы побольше). А ещё сам голос напоминает что среднее между Юзей/Гагатуном/Алфёдовом)
Про многие вещи говоришь слишком сложно, многие детали вообще упускаешь. Ты не сказал, что порядок подключения библиотек имеет значение. Ты не сказал, что такое двойная буферизация. glfwInit() возвращает false, если что-то пошло не по плану, и обязательно нужно ставить проверку, о которой ты не сказал ни слова и даже не сделал эту самую проверку. Также ты не сказал, зачем нужно ставить glfwExperimantal = GL_TRUE. Да и в целом очень много подобных вещей
Не стоит. Стандарт отстаёт немного от новых веяний и, например, не поддерживает трассировку лучей. Лучше иcпользовать Vulkan или DirectX (у последнего проблемы с кросс-платформенностью).
Зачем делать класс где всё static? Почему не сделать глобальные переменные? ООП ради ООП? Если потом захочется делать несколько экземпляров, можно ж будет легко реализовать
jPressed и jClicked реализованы не совсем удачно. Считать кадры не нужно. У тебя должен быть массив bool. В момент вызовы колбэка устанавливаешь соответствующий элемент в true, а при вызове jPressed его очищаешь. Вот тебе система, которая не только регистрирует факт нажатия клавиши, но еще считает, сколько раз она была нажата с момента последней проверки. void QEvent::keyboardCallback(GLFWwindow* window, int key, int scancode, int action, int mode) { QEvent* instance = QEvent::getInstance(); if (action == GLFW_PRESS) { instance->keyState[scancode] = true; } else if (action == GLFW_RELEASE) { instance->keyState[scancode] = false; } if (action == GLFW_PRESS) { instance->keyHits[scancode]++; } } unsigned int QEvent::keyHit(unsigned char scancode) { unsigned int hits = keyHits[scancode]; keyHits[scancode] = 0; return hits; }
То, что ты делаешь, очень круто. Ты многого добился, но. Попробуй встать на место новичка и пересмотри свои же ролики. То, что для тебя уже очевидно, для новичка темный лес и ему было бы полезно разобраться во всем в мельчайших деталях. Не галопом по европам, а подробное, методичное разъяснение всех моментов. Такой подход сможет привлечь к твоему каналу большее кол-во новичков. Пока что, лично я, увидел мелькающий код от которого рябит в глазах и информацию новую просто не успеваешь переварить - это обламывает, если честно. И тема то интересная, но как то все бегом, бегом..., а хотелось бы понять, повторить самому и желательно, чтобы все заработало. )))
Привет, где взять библиотеку GL? просто всё перерыл не нашёл её, нашёл только glew и glfw прости если вопрос тупой, просто до этого не работал с такими библиотеками.
Рофл конечно, всё работает, но только первый раз. При повторном запуске у меря просто вылетает ошибка что не может найти glew32d.dll. однако если вообще ничего не делать и просто сохранить, то есть ctrl+s и снова запусить то чудо все работает Интересная ситуация
"Ты не программист, если не создал свой майнкрафт на чистом directx / opengl" ps (я сделал это на winforms c#, сначала на Microsoft.DirectX 9 SDK, а потом на SharpDX 12)
Зачем создавать классы со статическими полями, когда можно задавать пространства имён? И какой тогда смысл в плюсах, писал бы на С. "не забываем у всех систем возвращать 0" зашибись, как насчёт использовать исключения? "используем memset для обнуления" про std::fill мы не слышали
а да вспомнил проблема может возникнуть еще иза не правильных библиотек названия вроде те же а по сути они разные. Часто с этим сталкивался. желательно бы прикрепить ссылку с нужными DLL
Короче кто найдет может нет пишу чтобы мир знал что если у вас что то не выходит то можете попробовать объявить glfw не только в windows cpp но и в windows h
Не хотите создать серию уроков "как писать на Пайтоне структуру файла 3D модели" для импорт/экспорта в Блендер? Я, как моделист, ищу такую информацию годами и безуспешно.
На данный момент начато три серии уроков, что много. Но по завершении одной из них я могу сделать уроки и по этой теме, т.к. сам на данный момент разрабатываю формат для своего движка (не этого).
Операционная система - выбор каждого, не вижу ничего плохого в Linux, сам на нём сижу, по функциональности практически не отличается от Windows, за исключением пакетов. А ещё, говоря о ПО, на линукс так же есть VScode и cmake тем более. А ещё, кряк Clion (получше, чем eclipse). Проблема в том, что под линукс ничего не делают, вот он и стоит на месте.
@@javaandpython4338 хоть Qt Creator сосредоточен для работы с Qt, но он не плохох и для работы с другими библиотеками. Хотя я не работал с eclipse - сом.
кому интересно создать клон этой игры скачиваем версию под виндовс 10 заходин в папку с игрой и там открываем папку data потом трассировка лучей (ray_tracing) и там есть файл под названием wibbly его можно использовать как шум перлина для создания клона игры а в папке structures хранятся все данные игры в папку definitions хранятся модельки игры
покажи как настроить Visual studio 2022 для этого. Библиотеки скачал, почти до конца подключил но гдето не установил ссылку на эти документы в настройках
3:30 как это сделать в Visual Studio? У меня в параметрах такого нету и похожего тоже, а ошибка всё ещё присутствует! Ладно, решил скачать Eclipse и на этом же моменте после применения, ошибки не пропали, теперь вот такие ошибки: /mingw32/bin/ld.exe: cannot find -lglfw /mingw32/bin/ld.exe: cannot find -lGL /mingw32/bin/ld.exe: cannot find -lGLEW -===- 6:23 Eclipse не даёт создать класс, кнопка Finish заблокирована и не нажимается.
Версия: 2019-03 (4.11.0). На самом деле, C++ достаточно сложный язык для освоения программирования: ручная работа с памятью, сравнительно низкий уровень обстракции, нужда в компиляции под разные системы отдельно (так как это компилируемый ЯП). Я начинал с Python, он довольно простой и очень приближенный к псевдокоду, что делает его порог вхождения невысоким. Но, в отличие от C++, Python интерпретируемый язык с динамической типизацией, да и высокая производительность в нём не приоритетна. Python далёк от C++ по структуре и синтаксису, но часто используются в одной связке. Как известно, каждый инструмент под свои задачи. Ближе к используемому в серии языку стоит Java - известный и удобный в разработке кроссплатформенных приложений и игр, мобильной разработке, язык. Это не компилируемый язык, как может показаться на первый взгляд - код преобразовывается не в машинный код, а в байткод, который исполняется виртуальной машиной. Т.е. такой байткод можно запускать на любой системой, под которую написана ВМ. Python, Lua, JS и другие интерпретируемые ЯП работают по тому же принципу. Также Java имеет C-подобный синтаксис, что облегчит дальнейшее изучение C++. Java я также знаю, и использую в своих проектах. Да, C++ можно начать изучать первым - если у вас хорошая сила воли и мотивация. Часто начинающие забрасывают это дело, говоря, что программирование - не их призвание. Нет ничего плохого в том, что несколько месяцев не удаётся начать писать на этом языке. Нужно просто не сдаваться, знаю по своему опыту. Не просто так никто из C++ программистов не примит фразу "C++ за две недели" в серьёз. Вижу, я немного разошёлся, но надеюсь эта информация вам поможет.
Лично я начал изучение программирования на С++. И считаю что С++ не такой уж сложный язык, просто он обширный. Да изучение программирования это не изучения языка программирования а изучение IT, а язык лишь инструмент . Ручное управления памяти нет так уж сложно, конечно, если вы не дебил, если всё можно использовать интелектуальные указатели. С++ с появлением стандарта 11 года сильно изменился. Он стал намного проще, я не говорю про стандарт 20 года. Современной С++ это нет тот язык который появился в 83 году, а динамический развивающий язык программирования и многие рание его недостатки уже решены а многие решаются . С++ это язык программирования в котором отлично сочитается удобство программирования и эффективность программ(производительность). Я считаю что он неплохо подходит как первый язык программирования, если вы хотите стать профессионалом в этом деле. Всем удачи
Задавать такой вопрос глупо! Программистами рождаются! Если тебя не тянет в компьютеры, программирование, IT, то тебе там делать нечего! Каждый человек создан для чего-то своего и не следует лезть не в свою тарелку!
@@baggerfeed8688 Майн написали на Java не из за хотелки, а из за того, что Java кроссплатформенная и не надо компилировать C++/C код под все платформы, ведь это очень затратно. Надо покупать отдельный компы.
@@mcomponent так я ничего не говорил про кроссплатформенность, я сказал только то, что чувак сделал и оптимезировал код c++ и сделал из этого майн. Почему надо высказывать своё мнение под неприметным комментарием, это же дибелизм...
Очень легко начать использовать синглтон как суперкласс, который умеет все на свете и реализует кучу интерфейсов. Такое архитектурное решение очень интуитивно для новичка, но это порождает огромное количество проблем. В целом синглтон то не плох, но надо понимать, какие проблемы он ДОЛЖЕН решать и какие проблемы он категорически НЕ ДОЛЖЕН решать (а новичку часто это вообще не понятно). Мой эмпирический рецепт такой: если синглтон - это небольшой класец с узким связыванием (его инклудит пара файлов от силы) - то он норм.
Что делать если не удалось инициализировать GLEW? Я переустанавливал все библиотеки, но программа не запускается. Я искал решение в Инете, не помогло. Помогите, плиз(
очень странный метод setShouldClose(bool). В чем логика, если я вызову setShouldClose(false)? Я отменю закрытие окна в следующем кадре? Но если на прошлом кадре был вызван setShouldClose(true), то окно уже должно закрыться. Нелогично получатеся, гораздо лучше сделать просто метод close()
@@Sergey_IT_Engineer конечно! Более того, инструкция по работе с Qt Framework в VS есть на самом оф. сайте Qt, а по работае с GTK на сайте майкрософт. Так сложно вбить запрос в поисковик ? -_- Честно говоря, я даже не знаю, есть ли что-то такое, с чем VS не смогла работать...
Видео очень хвалят,но я бы не рекомендовал его к просмотру новичкам.Изза плохой подачи.Про то что на винде в vs библиотеки по другому ставятся,простительно.А вот плохо то,что в ролике,где по идее должна хоть немного акцентироватся каждая деталь ,всё происходит так быстро.В пылу Разгвовра автора можно и не заметить,как была сделана поправка - тоже плохо.И ещё автор то ли не понимает,то ли забывает пролистывать вниз,в итоге читать строки в низу экрана,где обзор закрывает ползунок ютуба проблематично.
Привет! Можешь помочь пожалуйста с ошибкой. Я надеюсь в vs ты шаришь. Я написал все также как и ты, до первого запуска window 2.0. У меня вышла ошибка которая в файле Window.obj, 3D ФАЙЛ, причём тут он, подскажи пожалуйста.
К сожалению, никогда не использовал Visual Studio, так как только недавно узнал, что она доступна и на Linux. А .obj файлы, в данном случае - скомпилированные .cpp файлы, из которых, в дальнейшем собирается бинарник. Возможно я смогу подсказать что-то зная текст ошибки.
LINK2019 ссылка на неразрешенный символ __imp_glewInit в функции "public: static int __cdecl Window::initialize(int,int,char const *)" (?initialize@Window@@SAHHHPEBD@Z)
@@MihailRis, возникла другая ошибка, связанная с файлом Events.cpp. Пишет: неразрешенный внешний символ ""public: static class GLFWwindow * Window::window" (? window@Window@@2PEAVGLFWwindow@@EA)". Пробовал #define GLEW_STATIC, не помогает. Что делать?
OpenGL - один из графических API работы с графикой и видеопроцессором. Движок можно описать как программу, запускающую и исполняющую какую-то программу или игру, которая написана под этот движок и которую нельзя так просто адаптировать под другой из-за большого влияния его архитектуры. Работа с OpenGL производится через библиотеки, а не в самом процессе драйвера. Сам OpenGL слабо определяет архитектуру движка, который уже пишется с его использованием, поэтому и может быть заменён на других платформах на тот же DirectX и другие без полной переработки движка. Как-то так. Игровые же движки обычно состоят не только из графической составляющей.
Игровой движок - это набор инструментов для разработки игр, таких как инструмент для создания окна, редактирования карты, скрипты и т.д. OpenGL - спецификация графического API, которая реализуется поставщиком драйвера видеокарты, и ты можешь использовать эту реализацию для взаимодействия с видеокартой.
15:15 в функции void Events::initialize() при компиляции линковщик выдал ошибку 2001 "неразрешенный внешний символ public static class GLFWwindow window", решилась определением GLFWwindow* Window::window в файле Events.cpp, но теперь при запуске окна оно вылетает с ошибкой Assertion failed window!=NULL, дебаггер показывает, что теперь при объявлении локальной переменной GLFWwindow* window = Window::window; Значение window = NULL, то есть присваивание почему-то не срабатывает, хотя значение Window::window не нулевой указатель Upd: оказывается имеет значение порядок подключения хэдеров
у меня одного ошибка при создании окна LINK : warning LNK4098: библиотека по умолчанию "MSVCRT" конфликтует с использованием других библиотек; используйте /NODEFAULTLIB:library 1>projectname.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp_glViewport в функции main.
Коротко о программировании:
Что бы закрыть окно вам нужно написать пару строчек кода, а крестик без кода это просто текстура.
жиза
Но ведь это же очевидно 🤔
@@Alchemist_Dark Не для обычных Пк юзеров, для них это аксиома для уничтожения процесса
Давно искал подобный контент на русском! Класс! Спасибо))) Не забрасывай, очень хорошо объясняешь
Ещё есть Code Wizer
@@Dimiurg228, он переводчик ._.
Охренеть, год назад это всё казалось мне как китайская грамота, а сейчас я уже щёлкаю опенджиэлку как семечки и пишу свою игру)
как успехи?
Обычно такие челики не отвечают, но мне тоже интересно.. :D
@@миииц интересно кста почему не отвечают. Мб заняты?
@@cdapchier
они никогда не отвечают
ни через день
ни через неделю
ни через месяц
ни через год
ни через несколько лет
никогда
Что-то сильно для занятости
@@epsilon.sw_ да они тупо забивают либо не замечают что уведомления на ютубе есть, не все их чекают)
Сам делал такую подобную архитектуру с glfw и opengl не раз. Но твоя сиситема проверки нажатия клавиш это что-то гениальное, чертовски простое и удобное. Спасибо за видос и удачи с каналом.
P.S. иногда возникает ощущение что аудиодорожка растянута, темп речи резко меняется
Почему это только сейчас появилось у меня в рекомендациях?
Лол
@@thequartzsquirrel4105 +
У меня ещё круче, только сейчас появилось
@@user-nb7pe1yu2x +
@@user-nb7pe1yu2xкапец рано
На самом деле очень хороший контент. Архитектура пока простая и намного проще разобраться как делать свой движок. Я как-то пробовал смотреть подобные видео, но зарубежные. Там обычно слишком усложняют вначале, делают что-то типа unreal engine, c внешней точкой входа, делают сразу супер-расширяемую архитектуру, и в итоге это гораздо сложнее для понимания
После этого уже легче понять. Там от программиста со стажем для программистов со стажем. Но объясняет всё очень хорошо (handmade hero 500+ роликов)
Приветствую! А можно, пожалуйста, ссылку на подобные видео? :) Или в какую сторону копать? Хотелось бы увидеть воочию эту "супер-расширяемую архитектуру" :) Заранее спасибо!
@@Glomly я смотрел первые серии, даже повторял за ним и вникал. На самом деле даже такое занятие очень продвигает. Но времени очень много уходит
@@erebusrecollections1563Обойдёшься. Если сам не найдешь, то ты ничего не стоишь. Ожидать помощи от других, тоже самое, что иметь удочку и не рыбачить ею для пропитания.🤡
Кому интересно, куда серия уроков продвинулась на данный момент: th-cam.com/video/hWuM9pszT_U/w-d-xo.html
Инструкция по сборке (кода текущего состояния проекта): th-cam.com/video/opu3qQA_-hM/w-d-xo.html
Важная информация! В видео могут быть некоторые непонятные моменты. Если у вас возникнут вопросы, задавайте их в комментариях. В дальнейшем я буду улучшать качество уроков, создание этого видео заняло неделю, надеюсь на поддержку этой серии. Чтобы поддержать видео, вы можете поделиться им и оценить. Я же, буду готовить вторую часть про шейдеры, текстуры и VBO с VAO.
Теперь у канала есть свой дискорд сервер: discord.gg/AaqJphm
На нём вы можете задавать вопросы, в том числе "когда новая часть {серия_уроков}", указывать на возможные ошибки, предлагать темы видео, помогать другим, и получить помощь. Будут, естественно, публиковаться и новости канала. Не забывайте и про группу ВК (она не заброшена)
В разработке и видео по ИИ в гоночной игре на BGE.
Ты же понимаешь что Майн пе написан на этом движке?
@@BroGeckonJPG к чему это? Где он писал что будет на BGE майнкрафт пилить. Или же что ты подумал?
Кот Матроскин из простоквашино поднялся и пошел в программирование)
Одно из лучших видео, что я видел.
Хорошо, что ютуб показал его!
Видос просто бомба. Для инициализации переменных внутри класса можно использовать слово inline.
Просто потрясающе! Это то, что я искал! Столько нового...
Hi, I don't understand anything but good job !
Правильно understood
@@stepan2897 understand в настоящем. undesrtood 2-ая форма, в прошлом. Если бы он написал understood - то он ничего не понял.
А он написал "Я ничего не понимаю, но хорошая работа!".
@@stepan2897 С don't всегда глагол в первой форме. А именно глагол understand, а не understood.
@@1play2fun Эммм... Если есть вспомогательное do или don't, то глагол, который с ним используеться, должен быть в первой форме. И кстати, сама форма глагола не означает время этого действия, наглядный тому пример - пассивный вид, где для настоящей простой формы используеться is/are/am и третья форма.
Dolboyobi v kommentah правильно
10/10 сам начал писать игру и очень много полезных идей увидел. Спасибо!
Спасибо большое ! Очень полезный контент на русском сегменте.
чзх, первая часть вышла ещё в 2019?!1!
уже можно и remastered пилить
Только на Vulkan. OGL устарел
# remaster на vulkan
Классный видеоурок. Только осложнён нагромождённым обработчиком событий, непонятно, зачем оно нужно, если есть glfwSetKeyCallback и glfwGetKey
Про глобальные объекты. ИМХО. В Java ещё можно обойтись чисто статическими полями и функциями, а в C++ статические поля реализованы крайне неудобно. Сам сталкивался с этим. Если с бесконечным дублированием сигнатуры функций из *.h в *.cpp ещё можно смириться, то с дублированием всех полей в *.cpp смириться нереально, это ещё больше нагружает и без того сложный код. Я использую синглетон Майерса. Оказалось удобная штука. Ещё и деструкторы сама вызывает при завершении программы.
Буду ждать следующий выпуск)
можно поставить hot key на реализацию функции в cpp, чтобы не дублировать сигнатуру самому. Но это скорее костыль, чем нормальный выход из ситуации
Вы не искали это видео...
@@Sc00tFox не искали.
@@nxvvsx искали
Искал.
Искал
Искал
Ну погнали Иншаллах
Ого, спасибо рекомендациям
Мне кажется, что уже писал комментарий, когда впервые это видно попалось, но не нахожу его..
Короче, это офигенно :D и юмор есть и визуал со стилем речи приятный и объяснения (но хотелось бы побольше).
А ещё сам голос напоминает что среднее между Юзей/Гагатуном/Алфёдовом)
Решил "пересесть" с C# на C++. Спасибо за ролик (правда пока я все библиотеки подключал, чуть комп не сжёг)
Как ты их подключил?
@@Дигидроген ох, долгая история. Лучше поищи сам) (я забросил это всё к чертям)
@@Дигидроген я их подключал 2 с половиной часа. Не советую сюда лезть ахахха
Я не разобрался как подключить библиотеки в эклипс
Я конечно ничего не понял, но это интересно
Про многие вещи говоришь слишком сложно, многие детали вообще упускаешь. Ты не сказал, что порядок подключения библиотек имеет значение. Ты не сказал, что такое двойная буферизация. glfwInit() возвращает false, если что-то пошло не по плану, и обязательно нужно ставить проверку, о которой ты не сказал ни слова и даже не сделал эту самую проверку. Также ты не сказал, зачем нужно ставить glfwExperimantal = GL_TRUE. Да и в целом очень много подобных вещей
про проверку: нужно для этого писать целый обработчик исключений, это не обязательно, если ты пишешь подобное
Пришла в реках 20 часть. Думаю начну с первой. Также первая часть: 4 года назад 🗿
Повезло повезло не ждать 4 года продолжения)
Комментария ради комментарии.
Комментария ради комментарии.
Золотце ты моё, где ж ты раньше был.
Спасибо тебе! Использовал sfml. Теперь буду использовать opengl
Не стоит. Стандарт отстаёт немного от новых веяний и, например, не поддерживает трассировку лучей. Лучше иcпользовать Vulkan или DirectX (у последнего проблемы с кросс-платформенностью).
Сейчас не прогаю, но возможно в будущем пригодится, оставлю коммент)
может уже пора?
Зачем делать класс где всё static?
Почему не сделать глобальные переменные?
ООП ради ООП?
Если потом захочется делать несколько экземпляров, можно ж будет легко реализовать
20.10.2024; 7 часов утра 26 минут.
Основы, погнали епта
Откладываю в долгий ящик до изучения c++
jPressed и jClicked реализованы не совсем удачно. Считать кадры не нужно. У тебя должен быть массив bool. В момент вызовы колбэка устанавливаешь соответствующий элемент в true, а при вызове jPressed его очищаешь. Вот тебе система, которая не только регистрирует факт нажатия клавиши, но еще считает, сколько раз она была нажата с момента последней проверки.
void QEvent::keyboardCallback(GLFWwindow* window, int key, int scancode, int action, int mode) {
QEvent* instance = QEvent::getInstance();
if (action == GLFW_PRESS) {
instance->keyState[scancode] = true;
}
else if (action == GLFW_RELEASE) {
instance->keyState[scancode] = false;
}
if (action == GLFW_PRESS) {
instance->keyHits[scancode]++;
}
}
unsigned int QEvent::keyHit(unsigned char scancode) {
unsigned int hits = keyHits[scancode];
keyHits[scancode] = 0;
return hits;
}
Спасибо за годноту!!!
Продолжай парень,жду новых видео по теме
Я который сделал все в точности только на движке роблокс студио:эээ че происходит ээээ эаэаэаэаааээа
зашел, увидел, вышел 👍👍
То, что ты делаешь, очень круто. Ты многого добился, но. Попробуй встать на место новичка и пересмотри свои же ролики. То, что для тебя уже очевидно, для новичка темный лес и ему было бы полезно разобраться во всем в мельчайших деталях. Не галопом по европам, а подробное, методичное разъяснение всех моментов. Такой подход сможет привлечь к твоему каналу большее кол-во новичков. Пока что, лично я, увидел мелькающий код от которого рябит в глазах и информацию новую просто не успеваешь переварить - это обламывает, если честно. И тема то интересная, но как то все бегом, бегом..., а хотелось бы понять, повторить самому и желательно, чтобы все заработало. )))
Особенно порадовало, как незаметно пофиксил доступ на 14:03
На гитхабе есть id Tech 2 или движок QUAKE ты можешь его в С++ скомпоновать ?
isShouldClose,в голос конечно
ООо да, сегодня напишу Майнкрафт и заберу доход у Mojang, мечты, мечты...
Коммент для продвижения ролика!
начиналось все 4 года назад, а сейчас уже почти другая игра и этого вышла
Привет, где взять библиотеку GL? просто всё перерыл не нашёл её, нашёл только glew и glfw прости если вопрос тупой, просто до этого не работал с такими библиотеками.
Ты
Наверно на русском искал
Рофл конечно, всё работает, но только первый раз. При повторном запуске у меря просто вылетает ошибка что не может найти glew32d.dll. однако если вообще ничего не делать и просто сохранить, то есть ctrl+s и снова запусить то чудо все работает
Интересная ситуация
Твой голос очень похож на голос zixman
Отличные видеоя, они как развлекают так и могут что то подсказывать
Годно буду изучать
666 подписчиков. Афигенное число.
"Ты не программист, если не создал свой майнкрафт на чистом directx / opengl"
ps (я сделал это на winforms c#, сначала на Microsoft.DirectX 9 SDK, а потом на SharpDX 12)
21:25, мы можем использовать битмаски, если захотим, но это уже другой разговор.
Отлично объясняешь
Крч нужно качать gl glfw и glew?
Зачем создавать классы со статическими полями, когда можно задавать пространства имён? И какой тогда смысл в плюсах, писал бы на С.
"не забываем у всех систем возвращать 0" зашибись, как насчёт использовать исключения?
"используем memset для обнуления" про std::fill мы не слышали
Спасибо!
Когда я создавал свой маинкравт я нашел пару видео и плейлистов на тему создания. А тут я просто самострел ютуб и наткнулся на это видео…
Ура!! Скоро будет Майнкрафт c++ edition) не будет лагать
Уже есть bedrock edition
@@MihailRis знаю но это не то что я хотел для меня это типо неоригинальный Майн я привык к java по интерфейсу и тдн
@@RYZEN1903 единственное в чем старый Майнкрафт лучше - это моды, которых нет для нового(
а да вспомнил проблема может возникнуть еще иза не правильных библиотек названия вроде те же а по сути они разные. Часто с этим сталкивался. желательно бы прикрепить ссылку с нужными DLL
SFML точно также сделан все поделено на классы
Прикольно)
годно!
Короче кто найдет может нет пишу чтобы мир знал что если у вас что то не выходит то можете попробовать объявить glfw не только в windows cpp но и в windows h
И кто-то говорит, что ютуб не продвигает в рекомендации свежие каналы.
Возможно. но каналу больше 4 лет
Вииииим
Не хотите создать серию уроков "как писать на Пайтоне структуру файла 3D модели" для импорт/экспорта в Блендер? Я, как моделист, ищу такую информацию годами и безуспешно.
На данный момент начато три серии уроков, что много. Но по завершении одной из них я могу сделать уроки и по этой теме, т.к. сам на данный момент разрабатываю формат для своего движка (не этого).
Почему мы сделали массив из bool'ов, если можно реализовать клавиши через enum?
VScode + cmake, не слишком сложно), использовать линукс, чтобы тыкать мышкой по бесконечности менюшек, слегка странно.
Операционная система - выбор каждого, не вижу ничего плохого в Linux, сам на нём сижу, по функциональности практически не отличается от Windows, за исключением пакетов. А ещё, говоря о ПО, на линукс так же есть VScode и cmake тем более. А ещё, кряк Clion (получше, чем eclipse).
Проблема в том, что под линукс ничего не делают, вот он и стоит на месте.
А чо ты не в Visual Studio делаешь ? Она более универсальна
На линукс нет студии
@@zeretr0f706 А как же VSCode?
QT Creator!!!! Почему все игнорирует эту IDE?
Я тоже это не понимаю.
eclipse Намного удобнее и у него много плюсов. Ну а что про qt creator, по названию можно заметить что он для работы с фреймворком QT, qml и т.д.
@@javaandpython4338 хоть Qt Creator сосредоточен для работы с Qt, но он не плохох и для работы с другими библиотеками. Хотя я не работал с eclipse - сом.
Ничего непонятно, но очень интересно
If partOfSpeech(word)=verb
then write("не")
else write ("не ");
P.S Я не знаю, зачем я этой хренью замаялся)
не импортируются библиотеки (glew)
кому интересно создать клон этой игры скачиваем версию под виндовс 10 заходин в папку с игрой и там открываем папку data потом трассировка лучей (ray_tracing) и там есть файл под названием wibbly его можно использовать как шум перлина для создания клона игры а в папке structures хранятся все данные игры в папку definitions хранятся модельки игры
@MihaiRis какие фреймворки нужно подключить и как? Помоги, пожалуйста
В видео используется только OpenGL и библиотека GLFW. Там же показаны параметры линковки (-lglfw -lGL - lGLEW).
MihailRis у меня не получается подключить GLFW:(
покажи как настроить Visual studio 2022 для этого. Библиотеки скачал, почти до конца подключил но гдето не установил ссылку на эти документы в настройках
3:30 как это сделать в Visual Studio?
У меня в параметрах такого нету и похожего тоже, а ошибка всё ещё присутствует!
Ладно, решил скачать Eclipse и на этом же моменте после применения, ошибки не пропали, теперь вот такие ошибки:
/mingw32/bin/ld.exe: cannot find -lglfw
/mingw32/bin/ld.exe: cannot find -lGL
/mingw32/bin/ld.exe: cannot find -lGLEW
-===-
6:23 Eclipse не даёт создать класс, кнопка Finish заблокирована и не нажимается.
Какую версию eclipse ты используешь? Советуешь ли ты начинать изучать программирование с С++?
Версия: 2019-03 (4.11.0). На самом деле, C++ достаточно сложный язык для освоения программирования: ручная работа с памятью, сравнительно низкий уровень обстракции, нужда в компиляции под разные системы отдельно (так как это компилируемый ЯП). Я начинал с Python, он довольно простой и очень приближенный к псевдокоду, что делает его порог вхождения невысоким. Но, в отличие от C++, Python интерпретируемый язык с динамической типизацией, да и высокая производительность в нём не приоритетна. Python далёк от C++ по структуре и синтаксису, но часто используются в одной связке. Как известно, каждый инструмент под свои задачи. Ближе к используемому в серии языку стоит Java - известный и удобный в разработке кроссплатформенных приложений и игр, мобильной разработке, язык. Это не компилируемый язык, как может показаться на первый взгляд - код преобразовывается не в машинный код, а в байткод, который исполняется виртуальной машиной. Т.е. такой байткод можно запускать на любой системой, под которую написана ВМ. Python, Lua, JS и другие интерпретируемые ЯП работают по тому же принципу. Также Java имеет C-подобный синтаксис, что облегчит дальнейшее изучение C++. Java я также знаю, и использую в своих проектах.
Да, C++ можно начать изучать первым - если у вас хорошая сила воли и мотивация. Часто начинающие забрасывают это дело, говоря, что программирование - не их призвание. Нет ничего плохого в том, что несколько месяцев не удаётся начать писать на этом языке. Нужно просто не сдаваться, знаю по своему опыту. Не просто так никто из C++ программистов не примит фразу "C++ за две недели" в серьёз.
Вижу, я немного разошёлся, но надеюсь эта информация вам поможет.
Лично я начал изучение программирования на С++. И считаю что С++ не такой уж сложный язык, просто он обширный.
Да изучение программирования это не изучения языка программирования а изучение IT, а язык лишь инструмент .
Ручное управления памяти нет так уж сложно, конечно, если вы не дебил, если всё можно использовать интелектуальные указатели.
С++ с появлением стандарта 11 года сильно изменился. Он стал намного проще, я не говорю про стандарт 20 года.
Современной С++ это нет тот язык который появился в 83 году, а динамический развивающий язык программирования и многие рание его недостатки уже решены а многие решаются .
С++ это язык программирования в котором отлично сочитается удобство программирования и эффективность программ(производительность).
Я считаю что он неплохо подходит как первый язык программирования, если вы хотите стать профессионалом в этом деле.
Всем удачи
Задавать такой вопрос глупо! Программистами рождаются! Если тебя не тянет в компьютеры, программирование, IT, то тебе там делать нечего! Каждый человек создан для чего-то своего и не следует лезть не в свою тарелку!
@@MihailRis Дякую дуже сильно за версію, бо сьогоднішня дуже сильно відрізняється від 2019-03...
Начал смотреть = микро ужасное, текст ужасный НО видеоряд очень даже воодушевляет. Смотрим...
Майн писали на Java, а тут C++ оригинально, за это лайк.
Так бедрок тоже на с написан
@@stepan2897 бэдрок написали на c++ чтобы было больше оптимизации, т.к. Java жрёт оперативу только так.
@@baggerfeed8688 Майн написали на Java не из за хотелки, а из за того, что Java кроссплатформенная и не надо компилировать C++/C код под все платформы, ведь это очень затратно. Надо покупать отдельный компы.
@@mcomponent так я ничего не говорил про кроссплатформенность, я сказал только то, что чувак сделал и оптимезировал код c++ и сделал из этого майн. Почему надо высказывать своё мнение под неприметным комментарием, это же дибелизм...
Майнкрафт перешёл еще в 2017 году на С++...
Подскажи, пожалуйста, что ты за шрифт в видео используешь (интересует тот, которым ты пишешь название ролика). Спасибо :3
Используется шрифт URW Gothic L Semi-Bold
@@MihailRis спасибо большое, то хочу в своих видео подобный шрифт заюзать. кстати, давольно интересные уроки (ставлю на фон когда пишу свой движок :)
Зачем делать системы классами со статическими полями? Мне кажется в этом случае было бы удобнее использовать функциональный подход
Ооо да, это было больно! Но хоть и так, интересно посмотреть на сам ход разработки)
Я так и не понял, в чем проблема синглтона? Хотя тут наверное на вкус и цвет.
Очень легко начать использовать синглтон как суперкласс, который умеет все на свете и реализует кучу интерфейсов. Такое архитектурное решение очень интуитивно для новичка, но это порождает огромное количество проблем. В целом синглтон то не плох, но надо понимать, какие проблемы он ДОЛЖЕН решать и какие проблемы он категорически НЕ ДОЛЖЕН решать (а новичку часто это вообще не понятно). Мой эмпирический рецепт такой: если синглтон - это небольшой класец с узким связыванием (его инклудит пара файлов от силы) - то он норм.
@@mishame156 да уж за год я ответил себе "почему не синглтон"
А нужно код писать только в eclipse ide? или подойдёт visual studio code?
Можно писать хоть на бумажке карандашом, дело твое.
Крутоо
а я не понял, по итогу, даже на с++ маин тормозит и глючит?
Закончил курс процедурного программирования с++, вообще ничего не понимаю
Что делать если не удалось инициализировать GLEW? Я переустанавливал все библиотеки, но программа не запускается. Я искал решение в Инете, не помогло. Помогите, плиз(
Насколько помню нужно получить код возврата и по нему дебажить, т.е. после вызовов вызываю свою функцию glCheckError которая выводит причину ошибки
Крутой трек
очень странный метод setShouldClose(bool). В чем логика, если я вызову setShouldClose(false)? Я отменю закрытие окна в следующем кадре? Но если на прошлом кадре был вызван setShouldClose(true), то окно уже должно закрыться. Нелогично получатеся, гораздо лучше сделать просто метод close()
setShouldClose(функция, которая возвращает bool), удобно использовать, чтобы не городить условия
Qt Creator - хорошая IDE под линь. Ну и под винду. И под макось. Кроссплатформа, короче.
Под винду нет ничего лучше Visual Studio.
Пока что никто и ничто не смогли её переплюнуть!
@@lphoenixl7771 с Qt Framework и GTK работает?
@@Sergey_IT_Engineer конечно!
Более того, инструкция по работе с Qt Framework в VS есть на самом оф. сайте Qt, а по работае с GTK на сайте майкрософт.
Так сложно вбить запрос в поисковик ?
-_-
Честно говоря, я даже не знаю, есть ли что-то такое, с чем VS не смогла работать...
@@lphoenixl7771 ide может и хорошая, но MSVC - самый блевотный компилятор, что я встречал когда либо
Видео очень хвалят,но я бы не рекомендовал его к просмотру новичкам.Изза плохой подачи.Про то что на винде в vs библиотеки по другому ставятся,простительно.А вот плохо то,что в ролике,где по идее должна хоть немного акцентироватся каждая деталь ,всё происходит так быстро.В пылу Разгвовра автора можно и не заметить,как была сделана поправка - тоже плохо.И ещё автор то ли не понимает,то ли забывает пролистывать вниз,в итоге читать строки в низу экрана,где обзор закрывает ползунок ютуба проблематично.
Не понимаю как подключить эти библиотеки в Visual Studio 2017
я тоже
Привет! Можешь помочь пожалуйста с ошибкой. Я надеюсь в vs ты шаришь. Я написал все также как и ты, до первого запуска window 2.0. У меня вышла ошибка которая в файле Window.obj, 3D ФАЙЛ, причём тут он, подскажи пожалуйста.
К сожалению, никогда не использовал Visual Studio, так как только недавно узнал, что она доступна и на Linux. А .obj файлы, в данном случае - скомпилированные .cpp файлы, из которых, в дальнейшем собирается бинарник. Возможно я смогу подсказать что-то зная текст ошибки.
LINK2019 ссылка на неразрешенный символ __imp_glewInit в функции "public: static int __cdecl Window::initialize(int,int,char const *)" (?initialize@Window@@SAHHHPEBD@Z)
@@MihailRis, ответ нашёл. В Window.cpp забыл написать #define GLEW_STATIC. Всё равно спасибо за поддержку!
@@MihailRis, возникла другая ошибка, связанная с файлом Events.cpp. Пишет: неразрешенный внешний символ ""public: static class GLFWwindow * Window::window" (? window@Window@@2PEAVGLFWwindow@@EA)". Пробовал #define GLEW_STATIC, не помогает. Что делать?
Я так понял, что это ошибка из-за того, что я не объявил какую-то библиотеку, хотя код как на github-e
Open GL разве не движок? Если его использовать, то почему считается что движок с 0 пишется? Без негатива
OpenGL - один из графических API работы с графикой и видеопроцессором. Движок можно описать как программу, запускающую и исполняющую какую-то программу или игру, которая написана под этот движок и которую нельзя так просто адаптировать под другой из-за большого влияния его архитектуры. Работа с OpenGL производится через библиотеки, а не в самом процессе драйвера. Сам OpenGL слабо определяет архитектуру движка, который уже пишется с его использованием, поэтому и может быть заменён на других платформах на тот же DirectX и другие без полной переработки движка. Как-то так. Игровые же движки обычно состоят не только из графической составляющей.
Игровой движок - это набор инструментов для разработки игр, таких как инструмент для создания окна, редактирования карты, скрипты и т.д. OpenGL - спецификация графического API, которая реализуется поставщиком драйвера видеокарты, и ты можешь использовать эту реализацию для взаимодействия с видеокартой.
Ну есть майнкрафт бедрок ,р-н написан на c++
А нахрена писать на плюсах в стиле си? С тем же успехом можно было завести структуры и вынести код в глобальные функции.
Искал медб а нашёл золото
15:15 в функции void Events::initialize() при компиляции линковщик выдал ошибку 2001 "неразрешенный внешний символ public static class GLFWwindow window", решилась определением GLFWwindow* Window::window в файле Events.cpp, но теперь при запуске окна оно вылетает с ошибкой Assertion failed window!=NULL, дебаггер показывает, что теперь при объявлении локальной переменной GLFWwindow* window = Window::window;
Значение window = NULL, то есть присваивание почему-то не срабатывает, хотя значение Window::window не нулевой указатель
Upd: оказывается имеет значение порядок подключения хэдеров
нужно в Виндов.аш поменять class GLFWwindow на struct GLFWwindow
@@kvinka_slow_mo , нет, я так делал, но это не помогало, там в порядке инклюдов дело было
@@Neuro-trash-z3s Спасибо! Я весь день просидел, пытаясь понять, с какого чёрта выдает ошибку.
у меня одного ошибка при создании окна
LINK : warning LNK4098: библиотека по умолчанию "MSVCRT" конфликтует с использованием других библиотек; используйте /NODEFAULTLIB:library
1>projectname.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp_glViewport в функции main.
Сверх тяжело
тЫ КОГДА ПИШЕШЬ КОД КАК УБРАТЬ ЧТО ЭТО ОШИБКА В ТЕКСТЕН
4 года делает...
Капец, только сейчас заметил.