Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 147

Изучение C++ в комплексе с OpenGL

15.02.2025, 19:13. Показов 30158. Ответов 60
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Что бы я не плодил темы со своими вопросами - спрошу тут.
Я понимаю что возможности С++ огромные начиная от работы с железом, базами данных и т.д.
Повторил игру Змейка с использованием C++/CLI Windows Forms - понимаю что мне ни это нужно.

Вопрос такого плана!

Если я начну изучать С++ в комплексе с OpenGL (есть хорошие и понятные уроки). Что такое OpenGL я просмотрел 15минутное видео и понял.
Буду я развиваться в изучении С++?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.02.2025, 19:13
Ответы с готовыми решениями:

Разработать програмный комплекс для решения задачи
"Для определения рентабельности парикмахерской используют прибыль на одного работающего.В ЭВМ поступают данные о названии...

Разработка ScreenSaver "Летающий текст" с OpenGL
Здравствуйте.Помогите пожалуйста написать программу- заставку на языке программирования С ++ в середе Borland C ++ Builder с...

С++ изучен синтаксис, что дальше?
Здравствуйте, обращаюсь за советами. Прочитал книгу по синтаксису C++ - то есть знания на начальном уровне есть (пусть не все явно...

60
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
20.02.2025, 17:54
Студворк — интернет-сервис помощи студентам
Ох и оффтопщики.
Как тема "С чего учить С++" стала темой про среды разработки?
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3072 / 1054
Регистрация: 01.06.2021
Сообщений: 11,795
20.02.2025, 17:56
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Я заметил, что CMake намного быстрее собирает библиотеки, чем MinGW.
я в этом не Копенгаген, но насколько мне известно, CMake ничего не собирает, а просто генерирует разные файлы сборки для разных инструментов или даже солюшены. Причем, скорость зависит от того, какой инструмент будешь использовать для сборки. Например, в Qt я использую Ninja. Альтернативой данному инструменту является GNU Make. Последний использует Makefile, который больше понятен человеку, чем файл Ninja, тем не менее Ninja быстрее. Да и мне вообще плевать, что там будет в этих промежуточных файлах, ибо я буду редактировать CMakeLists, а дальше все автоматически будет...

Таким образом, выражение "CMake намного быстрее собирает библиотеки, чем MinGW" лишено смысла.

CMake для этого и создавался, чтобы каждый компилировал, как хочет.
Т.е. разраб пишет С++ код и ложит рядом CMakeLists. А потом с помощью CMake каждый волен генерировать, что хочет. Хочешь юзать GNU Make из MinGW, тогда генерируй Makefile и т.д.
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3072 / 1054
Регистрация: 01.06.2021
Сообщений: 11,795
20.02.2025, 18:11
Цитата Сообщение от Royal_X Посмотреть сообщение
Например, в Qt я использую Ninja. Альтернативой данному инструменту является GNU Make.
Я даже фотку нашел на сайте CMake. Это то, что я говорил.
Миниатюры
Изучение C++ в комплексе с OpenGL  
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,138
Записей в блоге: 243
20.02.2025, 18:13
Цитата Сообщение от Royal_X Посмотреть сообщение
Ну нужно же настроить отладчик, и всё будет работать.
Я, конечно, нашёл как настроить отладку в CMake-проекте в VSCode. Нужно поставить плагин "C/C++ Extension Pack", который включают в себя CMake и отладку по шагам. Я даже настроил отладку по шагам в Sublime Text 4, для C, С++, Python и JavaScript. Суть в том, как будет вести себя начинающий в разных IDE и редакторах, когда я скину пример с CMakeLists.txt и напишу, где поставить точку останова и на какую переменную посмотреть в отладчике. Если это будет VS, CLion или Qt Creator, то легко объяснить, что нужно открыть из меню среды файл CMakeLists.txt, тыкнуть рядом с номерами строк для точки останова и нажать кнопку отладки. На VSCode потребуется больше времени на объяснение. На Sublime Text 4 тоже не очень сложно объяснить, но, IDE там есть зелёный треугольник для отладки, никакие плагины ставить не нужно. А вдруг он установил просто "C/C++" без "Extension Pack", тогда и поддержки CMake не будет.

Добавлено через 1 минуту
Цитата Сообщение от Royal_X Посмотреть сообщение
Я заметил, что CMake намного быстрее собирает библиотеки, чем MinGW.
Извините, это описка. Я хотел написать MSVC вместо CMake.
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3072 / 1054
Регистрация: 01.06.2021
Сообщений: 11,795
20.02.2025, 18:18
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Я хотел написать MSVC.
да, MSVC быстрее на винде.

Более того, я увидел по скриншотам выше, что ты скачиваешь mingw из winlibs. Конечно, там удобно, что скачал, разархивировал и всё, можешь работать. Но компилятор там настроен коряво. Я писал разрабу винлибса и он подтвердил мои слова.

То, что компилятор из winlibs компилировал за 30 сек, то же самое, и самое главное, тот же самый компилятор, но из MSYS2, компилировал за 10 сек.

С тех пор, я использую mingw только из MSYS2.

Хотя, может баг был исправлен. Разрабы C::B тоже всегда используют винлибс)
1
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,138
Записей в блоге: 243
20.02.2025, 18:28
Цитата Сообщение от SmallEvil Посмотреть сообщение
Ох и оффтопщики.
Как тема "С чего учить С++" стала темой про среды разработки?
Да, вы правы. Авторе темы взял VS, путь на ней работает. Для меня это лучшая IDE на данный момент, так как легко скачать и CMake поддерживает из коробки.

Цитата Сообщение от cosmos44 Посмотреть сообщение
Что посоветуете далее? К примеру написать не сложное на чистом C++ с выводом или отображением в окне?
Главное, для начала, научиться рисовать прямоугольники в заданной вами позиции, под заданным углом поворота, заданного размера, с заданным цветом. Прямоугольник можно нарисовать, используя два треугольника. Перепишите змейку с Windows Forms на OpenGL, используя прямоугольники и квадраты. Круг рисуется с помощью треугольников с общей вершиной в центре круга. А параллельно можете попробовать нарисовать кривую линию, например, синусоиду. Прямоугольник небольшой высоты - это отрезок. Много коротких отрезков идущих друг за другом образуют кривую линию. В точках соединения прямоугольников можно нарисовать круг, потому что если отрезки не очень короткие, то будут видны зазоры:



Но эти зазоры почти не видно, поэтому можно на них пока забить. Либо кривую можете отложить на потом и вывести картинку на прямоугольник. По сути, прямоугольник это главная фигура в простых 2D играх и простых графических приложениях. На прямоугольник можно выводить буквы и получать текст. К каким задачам вас больше тянет, какие и начните делать. В самом начале, залейте хост заданным RGB цветом - это точно нужно уметь делать в любом приложении командами.

Текст очень важен везде: и в маленьких игровых демках и в построении графиков функций. Например, в игре нужно отображать: время, очки, жизни и т.д., а в при построении графиков нужно, например, подписывать оси или числа на делениях. Два примера рисования текста, на C++ и Python:Правда, это OpenGL 1, без шейдеров, но принцип тот же самый и на шейдерном.



Кликните здесь для просмотра всего текста
1
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,138
Записей в блоге: 243
20.02.2025, 20:02
Цитата Сообщение от 8Observer8 Посмотреть сообщение
хотя я установил MinGW GCC 14.2, который включал LLDB: https://winlibs.com/
Неправильный скриншот привёл, поторопился. Я сначала скачивал полный пакет и в результате отладчик в KDevelop не работал:



На Windows точно не надо даже пробовать KDevelop. Зря я предложил попробовать CLion. VS 2022 у вас установлена, поэтому забудьте. Просто пробуйте что-нибудь потихоньку делать. Какие-нибудь маленькие шаги. Нарисуйте треугольник и квадрат.

Миниатюры
0
Модератор
Эксперт Java
 Аватар для alecss131
2902 / 1407 / 413
Регистрация: 11.08.2017
Сообщений: 4,512
Записей в блоге: 2
20.02.2025, 21:15
Цитата Сообщение от 8Observer8 Посмотреть сообщение
А на MSVC пользователям потребуется ещё какие-нибудь ран таймы ставить от VS
Ну так тут тоже можно собирать со статичным рантаймом, ключи /MT /MTd

Добавлено через 2 минуты
Цитата Сообщение от 8Observer8 Посмотреть сообщение
https://winlibs.com/
Где-то я на этом форуме читал что что-то не так со сборками с этого сайта, про баги/глюки
1
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,138
Записей в блоге: 243
20.02.2025, 23:40
Цитата Сообщение от alecss131 Посмотреть сообщение
Ну так тут тоже можно собирать со статичным рантаймом, ключи /MT /MTd
Я нагуглил три варианта, как активировать статическую сборку в релиз, но два из них не сработали, а третий вариант, из этого сообщения, сработал:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if(MSVC)
    set(CompilerFlags
            CMAKE_CXX_FLAGS
            CMAKE_CXX_FLAGS_DEBUG
            CMAKE_CXX_FLAGS_RELEASE
            CMAKE_CXX_FLAGS_MINSIZEREL
            CMAKE_CXX_FLAGS_RELWITHDEBINFO
            CMAKE_C_FLAGS
            CMAKE_C_FLAGS_DEBUG
            CMAKE_C_FLAGS_RELEASE
            CMAKE_C_FLAGS_MINSIZEREL
            CMAKE_C_FLAGS_RELWITHDEBINFO
            )
    foreach(CompilerFlag ${CompilerFlags})
        string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
        set(${CompilerFlag} "${${CompilerFlag}}" CACHE STRING "msvc compiler flags" FORCE)
        message("MSVC flags: ${CompilerFlag}:${${CompilerFlag}}")
    endforeach()
endif()
Утилита Dependency Walker показала зависимость только от системной DLL kernel32.dll, которая есть везде и SDL3.dll, которая передаётся вместе с EXE:



EXE, собранный в релиз, весит 248 KB:



Это гораздо меньше, чем MinGW, где EXE получается равным 2.61 MB:



Потому что в EXE были записаны три DLL из MinGW:

Название: 3f3da2fa736e882efb179813422c47d8d6edfe7e.png
Просмотров: 245

Размер: 2.3 Кб

У MSVC сложно выглядит настройка для сборки EXE в статику. В MinGW достаточно только одну строку добавить в CMakeLists.txt:

Code
1
target_link_options(app PRIVATE -static)
Если делать туториал для начинающего, чтобы EXE запускался у его друзей, то на MinGW проще показать сборку в статику, даже в ущерб размеру EXE. Для сравнения надо показывать оба варианта.

Цитата Сообщение от alecss131 Посмотреть сообщение
Где-то я на этом форуме читал что что-то не так со сборками с этого сайта, про баги/глюки
Нужно несколько версий MinGW держать из разных источников и в случает странной проблемы пробовать разные и сравнивать с MSVC. У меня есть GCC 14.2 и GCC 11.2, который я вытащил из Qt.
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,138
Записей в блоге: 243
21.02.2025, 14:08
cosmos44, у вас 10 постов в разделе Pygame. Вы можете перед использованием OpenGL для практики в C++ изучить основы шейдерного OpenGL, используя Python. Для вас эту будет легче. Я опубликовал много простых примеров в темах Daniil_G:Я специально для работы с матрицами выбрал GLM вместо Pyrr, а для парсинга XML (загрузки моделей из Blender) использовал pugixml, чтобы легче было переводить примеры на C++, потому что GLM и pugixml есть на C++. Библиотека GML содержит классы, методы и т.д. для создания матриц, векторов и операций над ними.

Библиотека pugixml позволяет легко парсить XML, а значит и COLLADA. В Blender можно создавать 3D объекты (да и 2D объекты) и экспортировать их в .dae (COLLADA). Это XML. Этот формат очень простой в понимании. Он может хранить не только данные для статичных объектов, но и матрицы трансформаций для анимаций.

Например, я нашёл в интернете статичную модель Хагрида из игры "Гарри Поттер и философский камень". Загрузил эту модель на бесплатный сайт Mixamo. Этот сайт позволяет сохранять в формат COLLADA. Этот формат хоть и старый, но он очень распространённый и очень простой в понимании.



Прикрепил исходники анимации Хагрида. Может кому-нибудь пригодится для обучения. В процессе переписывания на C++ вы так или иначе что-то новое узнаете о C++. Для запуска примера вам надо установить следующие модули командой:

Bash
1
pip install Pygame PyOpenGL PyGLM NumPy pugixml Pillow
Если нужна теория по OpenGL, то на мой взгляд одна из лучших книг для начинающих это WebGL. Программирование трехмерной графики (Мацуда Коичи, Ли Роджер) Исходники примеров из книги: examples.zip Может даже лучше сразу изучать оригинал, чтобы английский тренировать: WebGL Programming Guide. Matsuda & Lea Примеры на JavaScript, а у вас есть в нём опыт, но вы можете их переводить на C++. Самое главное, там очень доступно изложена теория работы с шейдерами, матрицами, текстурными координатами и даже есть основы скелетной анимации в конце - там есть роботизированная рука манипулятор, где можно управлять отдельными клавишами - сгибом в локте, вращением кистью, двумя пальцами захвата. Можете ещё глянуть мою тему по WebGL: Небольшие примеры на WebGL

Миниатюры
Вложения
Тип файла: zip hagrid-hip-hop-dancing-opengles20-pygame.zip (698.4 Кб, 3 просмотров)
1
Чугунные скороходы
 Аватар для ARRAYBOW
17 / 16 / 3
Регистрация: 25.12.2022
Сообщений: 367
24.02.2025, 16:16
Цитата Сообщение от cosmos44 Посмотреть сообщение
Как бы задача не стоит - создавать игры и конкретных задач так же нет.
Нужно тогда определиться, будете игры создавать или нет. Потому что если нет - вам в сторону Qt, WinApi, и т.п., иначе - вам к sfml, directx, opengl, vulkan и т.п.

Цитата Сообщение от alecss131 Посмотреть сообщение
Но совет, если цель создавать игры, то лучше использовать готовый игровой движок. Например Unity и изучать для него C#
Можно, но есть много классных игр на своем движке. Свой движок - возможность создавать свои фишки, которые не реализуемые в готовом. Также есть большая разница в весе, если использовать Unity 2022.6.8f1, то пустой проект занимает 60 МБ. Есть, например, хороший движок на sfml и opengl - 3dzavr. Готовая игра весит со всем необходимым весит 17 МБ. Хорошая реализация на C++. Есть видео, как создавалась игра сама, с объяснениями рендера и т.д. Так что если ты создаешь свой движок - это не значит, что ты изобретаешь велосипед, это значит что ты создаешь удобный тебе инструмент. Использовать свой или готовый движок - решение каждого под свою игру. Это как забивать гвозди молотком или гаечным ключом - в зависимости от желания и потребностей ты делаешь выбор что использовать.

Добавлено через 4 минуты
Цитата Сообщение от 8Observer8 Посмотреть сообщение
API Pygame очень сильно похож на API SDL
Sfml тоже похож
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,138
Записей в блоге: 243
24.02.2025, 17:19
Автор темы начал изучать SDL3: SDL3_image - не отрисовывается текстура
Мне нравится эта библиотека, тем, что она позволяет собирать приложения не только для Desktop, но и для Android, а самое главное для меня - для Web, то есть в WebAssembly (WASM) с помощью Emscripten. Можно перетащить мышкой файлы index.html, .js и .wasm на бесплатный хостинг https://www.netlify.com/ и приложение будет доступно по ссылке my-game.netlify.com Будет запускаться по одному клику на любой ОС и устройстве, где есть браузер: Windows, Linux, macOS, Android, iOS и т.д. Они за собрал, закинул и можно встраивать в соц. сети и монетизировать.

Лучше пока использовать готовый API для 2D-графики и немного набить руки. Писать короткие учебные игровые демки, как в теме: Несколько небольших игрушек, либо неигровые демки - строить графики-функций, рисовать блок-схемы, uml-диаграммы, таблицы и т.д. Эти маленькие демки можно переписывать на SDL3 или найти аналогичные туториалы и брать их за основу для развития. Потом несложно будет использовать SDL3 для вывода 2D графики на OpenGL. Тогда можно будет переписывать свои примеры и игровые демки из SDL3 API на OpenGL. SDL3 можно использовать для OpenGL, как окно, для работы с мышкой, клавиатурой, gamepad-ом и т.д. От OpenGL для 2D-графики нужно в основном только создание прямоугольника с текстурными координатами, на и рисование отрезков. Графика не важна в 2D играх, особенно в учебных демках, потому что спрайты и тайлы можно скачать в интернете, их полно. Можно взять временные спрайты, а заменить их на другие - несложно. Наиболее важные вещи - это детектирование коллизий и бросание лучей, а для этих целей лучше всего взять готовую простую в использовании библиотеку Box2D. Звук для OpenGL приложения можно взять из SDL3, подключить OpenAL-Soft или другую библиотеку для работы со звуком.

Если непосредственно по теме, то вот пример заливки области рисования заданным цветом на OpenGL и SDL3:



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#define SDL_MAIN_USE_CALLBACKS 1 // Use the callbacks instead of main()
 
#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>
#include <glad/glad.h>
 
static SDL_Window* window = NULL;
SDL_GLContext glContext;
 
SDL_AppResult SDL_AppInit(void** appstate, int argc, char* argv[])
{
    if (!SDL_Init(SDL_INIT_VIDEO)) {
        SDL_Log("Couldn't initialize SDL: %s", SDL_GetError());
        return SDL_APP_FAILURE;
    }
 
    SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1); // Enable MULTISAMPLE
    SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 2); // can be 2, 4, 8 or 16
 
    // Create a window
    window = SDL_CreateWindow("Background", 350, 350,
        SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
    if (!window) {
        SDL_Log("Couldn't create window: %s", SDL_GetError());
        return SDL_APP_FAILURE;
    }
 
    // Create an OpenGL context
    glContext = SDL_GL_CreateContext(window);
    if (!glContext)
    {
        SDL_Log("Couldn't create window: %s", SDL_GetError());
        return SDL_APP_FAILURE;
    }
 
    SDL_GL_SetSwapInterval(1); // Turn on vertical sync
 
    if (!gladLoadGL())
    {
        SDL_Log("Failed to initialize OpenGL function pointers");
        return SDL_APP_FAILURE;
    }
 
    glClearColor(48.f / 255.f, 56.f / 255.f, 65.f / 255.f, 1.f);
 
    return SDL_APP_CONTINUE;
}
 
SDL_AppResult SDL_AppEvent(void* appstate, SDL_Event* event)
{
    if (event->type == SDL_EVENT_QUIT) {
        return SDL_APP_SUCCESS;
    }
    return SDL_APP_CONTINUE;
}
 
SDL_AppResult SDL_AppIterate(void* appstate)
{
    glClear(GL_COLOR_BUFFER_BIT);
    SDL_GL_SwapWindow(window);
    return SDL_APP_CONTINUE;
}
 
void SDL_AppQuit(void* appstate, SDL_AppResult result)
{
    // Window will be automatically removed
 
    SDL_GL_DestroyContext(glContext);
}
CMakeLists.txt

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cmake_minimum_required (VERSION 3.20)
 
project("background-color-msvc-opengl21-sdl3-cpp")
 
add_executable(app WIN32) # WIN32
 
target_sources(app
PRIVATE
    src/main.cpp
)
 
target_include_directories(app PRIVATE E:/libs/glad-2.0.8/include)
 
target_sources(app
PRIVATE
    E:/libs/glad-2.0.8/src/glad.c
)
 
find_package(SDL3)
target_link_libraries(app PRIVATE SDL3::SDL3)
Прикреплённый проект можно открыть в VS: "File" > "Open" > "CMake" и выбрать CMakeLists.txt в корне моего проекта. В файле CMakeLists.txt нужно указать пути к библиотеке GLAD (путь к include и к файлу glad.c). Прикрепил файлы GLAD. Эта библиотека нужна для инициализации OpenGL.
Вложения
Тип файла: zip background-color-msvc-opengl21-sdl3-cpp.zip (2.7 Кб, 0 просмотров)
Тип файла: zip glad-2.0.8.zip (35.8 Кб, 0 просмотров)
1
Чугунные скороходы
 Аватар для ARRAYBOW
17 / 16 / 3
Регистрация: 25.12.2022
Сообщений: 367
25.02.2025, 16:06
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Если непосредственно по теме, то вот пример заливки области рисования заданным цветом на OpenGL и SDL3:
Если честно, синтаксис похож на смесь WinApi и sfml
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,138
Записей в блоге: 243
25.02.2025, 19:46
Цитата Сообщение от ARRAYBOW Посмотреть сообщение
Если честно, синтаксис похож на смесь WinApi и sfml
Возможно вам так показалось на первый взгляд из-за приставки "SDL_" перед функциями и константами SDL. а ещё при активации этой опции:
C++
1
#define SDL_MAIN_USE_CALLBACKS 1 // Use the callbacks instead of main()
программист обязан определить четыре функции, которые вызываются автоматически:
  • SDL_AppInit() - вызывается один раз самой первой в самом начале работы приложения. Здесь можно сделать инициализацию SDL3, OpenGL, загрузку ассетов и т.д.
  • SDL_AppEvent() - вызывается, когда происходит какое либо событие, например, нажатие клавиши клавиатуры, клик мыши, касание экрана смартфона и т.д.
  • SDL_AppIterate() - вызывается для отрисовки кадра много раз в секунду, например, 60 раз в секунду, если активировать вертикальную синхронизацию, а монитор поддерживает 60 FPS
  • SDL_AppQuit() - вызывается перед завершением приложение. Здесь можно освободить выделенные ресурсы
Если одну из них не определить или определить с неверной сигнатурой, то будет выдана ошибка при компиляции. Эти функции были добавлены в новой версии SDL3 для удобства, а в SDL2, по-моему, их не было. Эти четыре функци позволяют написать один раз код, который будет собираться для работы на Desktop, Android, iOS и Web.
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,138
Записей в блоге: 243
25.02.2025, 21:22
У меня есть полезный пример для VS и CMake на шейдерном OpenGL с окном на SDL3. Здесь используется два шейдера - шейдер света и шейдер текстуры. Выводятся два квадрата - один с шейдером цета, другой с шейдером текстуры. Квадратам задаются: положение, поворот и размер с помощью математической библиотеки GLM. Текстура загружается с помощью библиотеки stb_image. Для инициализации OpenGL используется библиотека GLAD. Все библиотеки прикрепил с сообщению. Путь к sdl3/bin нужно добавить в PATH - примерно такой путь: E:\libs\sdl-3.1.10-msvc\win\debug\bin Остальные три дополнительные библиотеки можно подключить в файле CMakeLists.txt. Проект в VS 2022 можно открыть так: "File" > "Open" > "CMake" и выбрать CMakeLists.txt в корне папки примера.

В этом примере есть много основных вещей. Например, переключение между двумя шейдерными программами для рисования объекта с цветом и с текстурой. Рисование с цветом можно использовать для библиотеки Box2D, где можно рисовать коллайдеры.

Взял бесплатную текстуру коробки здесь: https://opengameart.org/content/crate-5

Вложения
Тип файла: zip colored-and-textured-crates-msvc-opengles-sdl3-cpp.zip (112.2 Кб, 3 просмотров)
Тип файла: zip glad-2.0.8.zip (35.8 Кб, 0 просмотров)
Тип файла: zip glm-1.0.1-light.zip (838.5 Кб, 0 просмотров)
Тип файла: zip stb_image-2.30.zip (66.8 Кб, 0 просмотров)
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,138
Записей в блоге: 243
25.02.2025, 21:38
SDL3 можно не собирать самому из исходников, а скачать готовую официальную сборку для VS здесь: https://github.com/libsdl-org/SDL/releases Файл называется SDL3-devel-x.y.z-VC.zip, где x.y.z - это версия сборки.
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3072 / 1054
Регистрация: 01.06.2021
Сообщений: 11,795
26.05.2025, 16:19
Цитата Сообщение от alecss131 Посмотреть сообщение
У мака свой апи Metal (куда приятней чем другие имхо, есть биндинги для с++, но не знаю обновлялись ли да и создание окна только swift/objective-c)
а почему так не любят swift? из-за то, что от яблока?

0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
26.05.2025, 16:34
Про ноги забавно)
0
26.05.2025, 17:26

Не по теме:

SmallEvil, добавил бы после "Вам нравится Windows" / "Да" промежуточный вопрос "Вы хотите казаться умным?". Если да, то C++/CLI, если нет, то C#. Еще Kotlin нужно добавить, не знаю, куда точно поставить, но это будет в части "тупых".

0
Модератор
Эксперт Java
 Аватар для alecss131
2902 / 1407 / 413
Регистрация: 11.08.2017
Сообщений: 4,512
Записей в блоге: 2
26.05.2025, 21:24
Цитата Сообщение от Royal_X Посмотреть сообщение
а почему так не любят swift? из-за то, что от яблока?
Такое на сколько знаю вообще про яблочников, у них вроде Кук такой, но я бы на то место поставил ржавчину.
А вообще свифт очень похож на котлин и очень не плохой язык, единственное что изза его безопасности многие вещи надо выносить в с/с++ модули, так как многие потенциально опасные вещи просто невозможно делать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.05.2025, 21:24

OpenGL на С++, запущенный через WinAPI
Доброе время суток. Я хочу написать программу для построения фигур Лиссажу, описываемых уравнениями: x=A1*cos(wt); y=A2*cos(mwt+f); ...

QGraphicsView openGL
Помогите разобраться, поискал в интернете, но ничего толком не нашел. в документации написано, чтобы задействовать openGl достаточно...

CreateWindowEx возвращает NULL (Win API и OpenGL: Урок1 от NeHe)
Доброго времени суток! Я скомпилировал программу из урока http://pmg.org.ru/nehe/nehe01.htm, которая должна создавать Open GL окно, но она...

Qt 5.7 OpenGL просит либы
Доброго времени суток. Комплект QT 5.7 MSVC2015. Создал проект, для изучения OpenGL, проблемы с LIB: LNK2019: unresolved external...

OpenGL что не так в коде? вроде все нормально
Собственно вот код, я сижу под убунтой 9.10 и он ругаеться пишет #include&lt;GL/glut.h&gt; int N = 3; int n = 0; int x; int y; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru