- Видео 129
- Просмотров 655 877
SimpleCoding
Германия
Добавлен 10 июл 2018
Всем привет!
Меня зовут Александр, и здесь на канале я буду выкладывать различные обучающие видео по программированию на C++ и мои проекты, связанные с 3D графикой и OpenGL
Меня зовут Александр, и здесь на канале я буду выкладывать различные обучающие видео по программированию на C++ и мои проекты, связанные с 3D графикой и OpenGL
3D Game Engine | 40 | OpenGL debug
Подключаем callback для обработки ошибок OpenGL (от версии 4.3)
Устаревшая функция glGetError:
registry.khronos.org/OpenGL-Refpages/gl4/html/glGetError.xhtml
Функция для подключения callback glDebugMessageCallback:
registry.khronos.org/OpenGL-Refpages/gl4/html/glDebugMessageCallback.xhtml
Возможные значения параметров:
www.khronos.org/opengl/wiki/Debug_Output
Управление фильтрами выдачи ошибок glDebugMessageControl:
registry.khronos.org/OpenGL-Refpages/gl4/html/glDebugMessageControl.xhtml
----------------------------------------------------------------------------------------------------------
Коммит:
github.com/simple-coding-channel/SimpleEngine/commit/17a788ed22fa65bcb81b3694950f1a24291c8fe3
------...
Устаревшая функция glGetError:
registry.khronos.org/OpenGL-Refpages/gl4/html/glGetError.xhtml
Функция для подключения callback glDebugMessageCallback:
registry.khronos.org/OpenGL-Refpages/gl4/html/glDebugMessageCallback.xhtml
Возможные значения параметров:
www.khronos.org/opengl/wiki/Debug_Output
Управление фильтрами выдачи ошибок glDebugMessageControl:
registry.khronos.org/OpenGL-Refpages/gl4/html/glDebugMessageControl.xhtml
----------------------------------------------------------------------------------------------------------
Коммит:
github.com/simple-coding-channel/SimpleEngine/commit/17a788ed22fa65bcb81b3694950f1a24291c8fe3
------...
Просмотров: 3 562
Видео
3D Game Engine | 39 | Separate attribute format, VAO, VBO
Просмотров 2,1 тыс.Год назад
Рассмотрим как разделить задание формата атрибутов в VAO от биндинга VBO (только для версий OpenGL от 4.3) Коммит: github.com/simple-coding-channel/SimpleEngine/commit/f1423698fd157b528dfac0fc2f56c305435535df GitHub проекта: github.com/simple-coding-channel/SimpleEngine Discord Server: discord.gg/ztyWExwRQ2 Мои соцсети: VK: mtrx1 Twitch: www.twitch.tv/matrix_x Instagram: al...
C++ с нуля | 17 | struct
Просмотров 1,5 тыс.Год назад
Рассмотрим как задавать свою собственную структуру struct, доступ к внутренним переменным, как разыменовать указатель и особенности выравнивания данных в структурах Discord Server: discord.gg/ztyWExwRQ2 Мои соцсети: VK: mtrx1 Twitch: www.twitch.tv/matrix_x Поддержка канала: www.donationalerts.com/r/matrix_x fantalks.io/r/matrix_x www.patreon.com/user?u=74455138
3D Game Engine | 38 | Матрица нормали
Просмотров 1,5 тыс.Год назад
Разберем как строится матрица нормали, переместим расчет освещения в систему координат камеры и сделаем кое-какие оптимизации Коммит: github.com/simple-coding-channel/SimpleEngine/commit/d67647483794e4f4904ac2f42b5f3cb8e740e58f GitHub проекта: github.com/simple-coding-channel/SimpleEngine Discord Server: discord.gg/ztyWExwRQ2 Мои соцсети: VK: mtrx1 Twitch: www.twitch.tv/matrix_x Instagra...
3D Game Engine | 37 | Освещение, модель затенения Фонга
Просмотров 1,9 тыс.Год назад
Создадим источник света и реализуем модель затенения по Фонгу Коммит: github.com/simple-coding-channel/SimpleEngine/commit/f6412921c2163b70c6e8e2a50ed00459308fe953 GitHub проекта: github.com/simple-coding-channel/SimpleEngine Discord Server: discord.gg/ztyWExwRQ2 Мои соцсети: VK: mtrx1 Twitch: www.twitch.tv/matrix_x Instagram: al.exander7683 Поддержка канала: www.donationa...
3D Game Engine | 36 | ImGui, Resize, Field Of View
Просмотров 1,3 тыс.Год назад
Дорабатываем GUI, добавляем новые настройки камеры и исправляем баг с вьюпортом Коммит: github.com/simple-coding-channel/SimpleEngine/commit/40222a917dd8263124586b56c337d4432bd22b09 GitHub проекта: github.com/simple-coding-channel/SimpleEngine Discord Server: discord.gg/ztyWExwRQ2 Мои соцсети: VK: mtrx1 Twitch: www.twitch.tv/matrix_x Instagram: al.exander7683 Поддержка кан...
C++ с нуля | 16 | enum
Просмотров 2 тыс.Год назад
Рассмотрим что такое перечисления enum, зачем они нужны и как их использовать Discord Server: discord.gg/ztyWExwRQ2 Мои соцсети: VK: mtrx1 Twitch: www.twitch.tv/matrix_x Поддержка канала: www.donationalerts.com/r/matrix_x www.patreon.com/user?u=74455138
3D Game Engine | 35 | Буфер глубины (Depth Buffer)
Просмотров 1,3 тыс.Год назад
Добавляем куб в сцену и знакомимся с буфером глубины Коммит: github.com/simple-coding-channel/SimpleEngine/commit/1214099757cb84c479c033a6657c1f2fb4e5d62c GitHub проекта: github.com/simple-coding-channel/SimpleEngine Discord Server: discord.gg/ztyWExwRQ2 Мои соцсети: VK: mtrx1 Twitch: www.twitch.tv/matrix_x Instagram: al.exander7683 Поддержка канала: www.donationalerts.com...
3D Game Engine | 34 | Класс Texture2D
Просмотров 878Год назад
Инкапсулируем создание текстуры OpenGL в отдельный класс Texture2D Коммит: github.com/simple-coding-channel/SimpleEngine/commit/a432178c5b1a9e0aefbf4fef059d92dd630e0eac GitHub проекта: github.com/simple-coding-channel/SimpleEngine Discord Server: discord.gg/ztyWExwRQ2 Мои соцсети: VK: mtrx1 Twitch: www.twitch.tv/matrix_x Instagram: al.exander7683 Поддержка канала: www.dona...
3D Game Engine | 33 | Фильтрация текстуры, алиасинг
Просмотров 8512 года назад
Рассмотрим что такое алиасинг, почему он возникает и как с ним бороться (Mip-Map, trilinear interpolation, nearest neigbour, bilinear interpolation) GitHub проекта: github.com/simple-coding-channel/SimpleEngine Discord Server: discord.gg/ztyWExwRQ2 Мои соцсети: VK: mtrx1 Twitch: www.twitch.tv/matrix_x Instagram: al.exander7683 Поддержка канала: www.donationalerts.com/r/mat...
3D Game Engine | 32 | Текстуры
Просмотров 1,3 тыс.2 года назад
Что такое текстуры и как их использовать в OpenGL Коммит: github.com/simple-coding-channel/SimpleEngine/commit/06a0d82ce83626e2643940c2a9611f0cb8dae317 GitHub проекта: github.com/simple-coding-channel/SimpleEngine Discord Server: discord.gg/ztyWExwRQ2 Мои соцсети: VK: mtrx1 Twitch: www.twitch.tv/matrix_x Instagram: al.exander7683 Поддержка канала: www.donationalerts.com/r/...
3D Game Engine | 31 | Вращаем камеру мышкой
Просмотров 1,5 тыс.2 года назад
Добавляем возможность вращать камеру с помощью мышки Коммит: github.com/simple-coding-channel/SimpleEngine/commit/4911912cf3b81c1268fdfd3361175386f56eeccf GitHub проекта: github.com/simple-coding-channel/SimpleEngine Discord Server: discord.gg/ztyWExwRQ2 Мои соцсети: VK: mtrx1 Twitch: www.twitch.tv/matrix_x Instagram: al.exander7683 Поддержка канала: www.donationalerts.com...
C++ с нуля | 15 | Циклы while, do while, for
Просмотров 1,6 тыс.2 года назад
Рассмотрим циклы while, do while, for и операторы управления циклом Discord Server: discord.gg/ztyWExwRQ2 Мои соцсети: VK: mtrx1 Twitch: www.twitch.tv/matrix_x Поддержка канала: www.donationalerts.com/r/matrix_x
3D Game Engine | 30 | Углы Эйлера, двигаем и вращаем камеру
Просмотров 1,5 тыс.2 года назад
Разбираем, что такое углы Эйлера и как с их помощью мы можем управлять камерой Коммит: github.com/simple-coding-channel/SimpleEngine/commit/d064d932cf98f76f577391a89c81a8652b2f0f2b GitHub проекта: github.com/simple-coding-channel/SimpleEngine Discord Server: discord.gg/ztyWExwRQ2 Мои соцсети: VK: mtrx1 Twitch: www.twitch.tv/matrix_x Instagram: al.exander7683 Поддержка кана...
3D Game Engine | 29 | Управляем камерой
Просмотров 1,3 тыс.2 года назад
Добавляем ивенты нажатия клавиш и управление камерой Коммит: github.com/simple-coding-channel/SimpleEngine/commit/c9b6c631a3d84a2a677057e69b3c41ea355aa81d GitHub проекта: github.com/simple-coding-channel/SimpleEngine Discord Server: discord.gg/ztyWExwRQ2 Мои соцсети: VK: mtrx1 Twitch: www.twitch.tv/matrix_x Instagram: al.exander7683 Поддержка канала: www.donationalerts.com...
3D Game Engine | 28 | Рефакторинг, Editor
Просмотров 1,2 тыс.2 года назад
3D Game Engine | 28 | Рефакторинг, Editor
3D Game Engine | 27 | ImGui docking & viewports
Просмотров 2,3 тыс.2 года назад
3D Game Engine | 27 | ImGui docking & viewports
3D Game Engine | 26 | OpenGL Renderer
Просмотров 1,5 тыс.2 года назад
3D Game Engine | 26 | OpenGL Renderer
C++ с нуля | 13 | Ветвление: if else
Просмотров 1,4 тыс.2 года назад
C с нуля | 13 | Ветвление: if else
3D Game Engine | 25 | Построение матрицы перспективной проекции
Просмотров 1,9 тыс.2 года назад
3D Game Engine | 25 | Построение матрицы перспективной проекции
3D Game Engine | 24 | Построение матрицы ортографической проекции
Просмотров 1,3 тыс.2 года назад
3D Game Engine | 24 | Построение матрицы ортографической проекции
3D Game Engine | 22 | Системы координат
Просмотров 1,5 тыс.2 года назад
3D Game Engine | 22 | Системы координат
3D Game Engine | 21 | Матрица трансформации
Просмотров 3,4 тыс.2 года назад
3D Game Engine | 21 | Матрица трансформации
3D Game Engine | 18 | Система координат, вектор
Просмотров 1,1 тыс.3 года назад
3D Game Engine | 18 | Система координат, вектор
3D Game Engine | 17 | Индексный буфер
Просмотров 1,1 тыс.3 года назад
3D Game Engine | 17 | Индексный буфер
молодцом . хорошо объясняешь ! и речь поставлена.
Непонятно, что за магия. Пробовал повторить. Не работает движение по направлению взгляда. Кто-то пробовал еще? У кого-то вышло?
Спасибо за ролик. Подскажите, кто-нибудь сталкивался с такой проблемой: Debug Assertion Failed! Program: D:\SimpleCoding\battle_city\build\bin\Debug\Battle_city.exe File: C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vector Line: 1904 Expression: vector subscript out of range For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts.
У кого такая ошибка <CMake Error: The source directory "Путь_Каталога" does not appear to contain CMakeLists.txt. Specify --help for usage, or press the help button on the CMake GUI.> после запуска команды <cmake ..>, то рекомендую попробовать всё заново следуя по инструкции в этом ролике --> ruclips.net/video/qKXzmd_P8PE/видео.html .Мне помогло, надеюсь и вам поможет.
Не пойму, а почему нельзя просто через облако обмениваться этими файлами? Также не понимаю: если будет куча разных версий одного файла от разных разработчиков, то все равно ведь кто-то еще должен взяться за то, чтобы из каждого файла взять что-то конкретное и сделать один совершенный? Или как это работает? Просто именно этот момент неясен - в чем удобство?
Чувак это было сделано еще в начале 90х
9:46
Не понятно как сделал запуск
спасибо но достаточно только как по мне только как сохранять загружать и как отправлять на гитхаб
тебе достаточно, как человеку, который никогда норм проекты не делал
Уверен, что дальше это будет сказано, но если у вас mac, то там версия OpenGl 4.1 была максимальной. Нужно в коде прописать еще glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1);
Спасибо за введение. Мне понравилось.
я бы предпочел создать одну include директорию со всеми класами, чем отдельно подключать их в ide
Помогите пожалуйста разобраться! Очень странно, программа работает, но отладчик не заходит внутрь файла ResourseManager. Просто проскакивает все точки останова внутри него, проскаивает все строки связанные с ним в mine и идёт дальше до конца программы и успешно отрисовывает треугольник. А на точках останова внутри класса ResourseManager пишет "В настоящий момент попадания в точку остановка не произойдет. Нет загруженных символов для этого документа."
Привет. По всей видимости что-то пошло не так, так как при перемещении камерой, а потом при попытке осмотреться мышкой происходит одновременное смещение(по всей видимости накапливается durection)
А какие методы отладки ошибок времени исполнения вы используете? Лично я долго выбирал курсы по IT, рассматривал разные компании, но в итоге остановился на Skypro. Проработал 7 лет в сфере обслуживания, но всегда хотел попробовать себя в IT. После курса получил оффер и перешел на удаленку, ни разу не пожалел))
Да опять вы, уже в котором видео встречаю эту недореклмау
Столько уроков, а самого главного не нашёл. Мне нужно собрать проект со сборкой статической библиотеки, подключением её для запуска гугл тестов, а так же выводом через gcovreport отчёта о покрытии методов всех классов. Как это делается через обычный мейк я знаю. Хотел понять, как это сделать через симейк. По идее же симейк должен упрощать рутинную ручную сборку через мейк.
Все еще не понимаю, зачем нужен CMake, если используется IDE. В VS и так встроенный сборщик. Зачем нужен этот страшный CMake?
Cmake необходим для кроссплатформенной сборки проекта, так например, запустить не через VS, и вообще не на винде, а на линуксе например, у тебя всё равно создаться файл проекта для той IDE, в которой ты запустил, работает и в обратную сторону, для VS Cmake так же собирает файл проекта. Так же он даёт широкий простор при сборке вприцнипе. Например можно создать различные сборки для сервера игры, игры, игры и сервера вместе, втроить поддержку различных архитектур, отдельные дебаг версии для разработчиков, в общем возможностей куча, главное уметь ими пользоваться
Отличная серия уроков! Большое спасибо! У меня есть одно замечание к этому уроку: мы AnimatedSprite наследуем от Sprite, но деструктор ~Sprite() не сделали виртуальным
Возможно для кого-то будет полезным. На 16:32 в коде vertex_shader перемножаются матрицы изменения масштаба и вращения. Обратите внимание на порядок!! Сначала идёт матрица вращения (rotate), а затем матрица изменения масштаба (scale). Я сделал наоборот, и у меня при вращении получалась дичь. Возможно кому-то помогу
Классно, жаль мало подписчиков 😒
Все круто,но есть вопрос. Почему порядок умножения матриц обратный? Типо по такой логике если у нас есть текстура, и мы в render loop пишем glm:: translate и glm::rotate для матрицы mat пускай. Тогда какой эффект будет по логике обратного умножения: текстура повернется и сместится и так далее(поворот от времени зависит), в результате у нас должен получиться эффект того что текстура вращается не вокруг оси а сама вращается вокруг. Но такой эффект уже наблюдается при glm::rotate glm::translate,почему?
Спасибо за туториал, только предупреждающий цвет светофора все таки желтый)
Очень крутой туториал, несмотря на то, что лучше читать, чтобы понять, то здесь можно посмотреть это видео) Но все же я бы рекомендовал для начала раскрывать тему с make, в качестве базы.
Где можно взять эту текстуру?
Все супер. Вот такой вопрос у меня возникает. Можно ли проверять скомпилированному шрейдера на поле m_id не заводя булево поле. Например если оно не скомпилировало по идентификатор будет всегда равен 0 а если скомпилирован то больше 0? Или там идентификатор может быть равен 0 после компиляции?
3:18 эксплицитно это explicit? Похоже, что так.
ваще не ебу что это за клизма сраная. Почему нельзя просто запустить 'gcc ./имя-файла-с-программой.с' и все???
гуру
Ролик полезный, но клавиатуру я бы об стену размазал..
У меня почему-то немного иной путь получается D:\mygame\build\bin\Debug\game.exe
Тайминг 25:15
Всё хорошо в данной серии видео, кроме размера шрифта :(
Лучшее видео для сна
А вообще говоря, Александ, Вы создали отличный фреймворк - для новичка самое то. Можно почувствовать себя джуниором в промышленной компании (ну или хотя бы стажером %)). Я понимаю, что у Вас не хватает времени или мотивации продолжать проект, но молодые ребята могут уже на этом этапе развивать его для себя. Например, можно адаптировать уроки от Де Вриеса (LearnOpenGL) - продвинутая работа с освещением (HDR, PBR, тени и т.п.), загрузка моделей, анимации. Можно добавить что-то из Ogldev (Итая Миэри): у него много интересного про анимации и работу с рельефом и т.д.
Можно ссылку на коммит
При установке исходных позиций мыши в on_mouse_button_event нужно ли делать проверку pressed?
не добавил важную фичу CMake, это то что компилируется только изменяемые файлы, а не весь проект целиком, что существенно ускоряет время компиляции.
Вот вам 1000-ый лайк за такое хорошее объяснение!
Помогите пожайлуста, у меня уже 3 день выдает ошибку C:\c++\glfwT1a\src\main.cpp(1,10): error C1083: Не удается открыть файл включение: glad/glad.h: No such file or directory, [C:\c++\glfwT1a\build\GlfwT1a.vcxproj] вроде бы все правильно делаю а выдает
Вредил вы 3 месяца мучаетесь с ответом, но нужно просто проверить сроку target_include_directories(glad PUBLIC include/)
@@ArthurPozhidayev Спасибо, я уже разобралься вс проблеммой, надо было пересоздать проект сначала, у меня изза какой-то ошибки или в написании или просто ошибки такое писало
Спасибо большое за ваши видео,! Вы очень хорошо объясняете!
Чем больше шаг за шагом имплементирую твой проект, тем больше он мне нравится!
Ребята, если приложение вылетает с ошибкой после закрытия окна (ругается ImGui): 1. Инклуды: вначале imgui_impl_glfw.h, затем imgui_impl_opengl3.h 2. В конструкторе Window: вначале ImGui_ImplGlfw_InitForOpenGL, затем ImGui_ImplOpenGL3_Init 3. В Window::shutdown(): добавьте ImGui_ImplOpenGL3_Shutdown(); ImGui_ImplGlfw_Shutdown() перед ImGui::DestroyContext(). Все взял из ImGui Wiki на гитхабе.
А что делать с зависимостью от GLFW?
Отличные уроки! Всё довольно наглядно и просто, да еще и выглядит очень красиво! Для новичка в компьютерной графике самое то!
Александр, огромное спасибо! Замечательные у Вас уроки. Наконец-то понял для себя суть всех эти VBO, VAO. Возможно это родной язык помогает ))) А еще у вас преинтереснейшая структура приложения. Открываю для себя много нового. Жаль, что Вы прекратили выпускать видео (( Успехов и Удачи!!!
6:10 - Для VertexBuffer operator=() разве не нужно как-то обменять значение m_buffer_layout (по аналогии с конструктором перемещения)?
Александр, подскажи как проверить кросплатформенность. Суть такая: в Debian 12 делаю клон проекта -> клонирую сабмодули -> создаю папку build -> находясь в ней делаю "$cmake .." -> далее выполняю "$cmake --build ." Вроде всё билдит, в папке bin создается EngineEditor. Запускаю ./EngineEditor: все рисуется вроде хорошо, в bash ничего не выводится (куда идет вывод сообщений?), после закрытия окна получаю Segmentation Fault (((
Возможно SegFault результат того, что p_shader_program глобальная переменная.
Если произошла ошибка при компиляции ShaderProgram, то функция Init возвращает false, т.е. 0 - а ноль, то вроде как "всё гуд". Допустим изменим код возрата на -4. Как этот код возрата корректно обработать в конструкторе Window?
Получается, что с помощью ImGui нельзя сделать всю инициализацию вначале (например в функции Init), а каждый кадр только перерисовавать окна? Значит в "боевой" версии нужно реализовывать весь графический интерфейс врукопашную, т.е. рисование всех кнопочек, полей ввода текста, ползунков и т.п.? Трудоемкая работа, однако. Интерфейс ImGui жутко напоминает интерфейс окна настройки шейдера из Anomaly ))
Отличные уроки спасибо.
Александр, если можно это кратко пояснить, поясни, пожалуйста, зачем такая сложная структура? Непосредственная обработка события (например, нажатия клавиши) будет происходить в классе Application, т.е. в лямбе m_event_dispatcher.add_event_listener<EventKeyPressed>?