|
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 141
|
|||||||||||
SDL3_image - не отрисовывается текстура23.02.2025, 17:23. Показов 28606. Ответов 166
Не отрисовывается текстура! Путь, формат img, установки и подключения dll - проверил трижды. При наложении текстуры, просто белое поле.
Участок кода (ошибок нет):
0
|
|||||||||||
| 23.02.2025, 17:23 | |
|
Ответы с готовыми решениями:
166
Использование opengl. Не отрисовывается квадрат Удаление текстур OpenGL
|
|
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 141
|
||
| 11.03.2025, 19:27 [ТС] | ||
|
Пишет: Microsoft Visual Studio не удалось запустить ваш сеанс диагностики. В нэте пишут запустить службу "VSStandardCollectorService150" - пробую запустить - ошибка запуска. У меня не изучения C++. а борьба с геморроем на компьютере. Сейчас ищу решения.
0
|
||
| 11.03.2025, 20:04 | ||||||||||||||||||
|
Можете попробовать у себя его запустить. Здесь управление персонажем. Он не может пройти сквозь стену и вентилятор. Когда персонаж касается стены и вентилятора, то в консоль выводится сообщение.
debug_drawer.py
0
|
||||||||||||||||||
|
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 141
|
||
| 11.03.2025, 20:24 [ТС] | ||
|
0
|
||
| 12.03.2025, 13:07 | ||
0
|
||
|
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 141
|
||
| 12.03.2025, 15:41 [ТС] | ||
|
Реализация 3D - пример - https://examples.libsdl.org/SD... eneye-008/ Движение W, A, S, D + мышка
0
|
||
| 13.03.2025, 13:34 | ||||
|
Это неудобно для использования в SDL3. Я нарезал спрайты в GIMP и расположил их друг за другом. В GIMP можно отобразить сетку заданного размера, в данном случае, это сетка с ячейками 96x96 пикселей. Можно переносить нарезанные спрайты мышкой в GIMP и выравнивать их ориентируясь на заданную сетку: В результате получается sprite sheet, который удобно использовать в SDL3: Экспортировать из GIMP надо в формат PNG, чтобы был альфа канал (канал прозрачности). GIMP - это бесплатный редактор изображений похожий на Photoshop. Есть ещё Krita и какие-то другие. GIMP занимает 1 GB. Вы можете нажать правой кнопкой мыши по spritesheet выше и сделать спрайтовую анимацию покоя - это ближайший шаг, что делать дальше. Если возникнут проблемы, то создавайте новые темы. Если проблема связана с C++, то создавайте тему в C++ разделе. Если проблема связана с какими-то игровыми механикам или с SDL3, то создавайте тему в разделе Программирование игр. Если хотите, чтобы вашу игру запускали и тестировали, то создавайте тему в разделе Бета-тестирование. Можете описывать процесс разработки игры в своём блоге - здесь на форуме можно создать блог. Ещё более удобно закинуть нарезанные спрайты в Texture Packer и экспортировать в два файла PNG и JSON. В PNG будет атлас спрайтов, а в JSON информация: имена спрайтов, x, y, width, height. Я использую библиотеку simdjson для парсинга JSON. В Bullet Physics есть механизм для помощи в рисовании коллайдеров. Он автоматически вызывает метод куда передаёт начала и концы отрезков и цвет отрезков. Между координатами отрезков можно нарисовать отрезки: Это необходимо, чтобы видеть коллайдеры во время разработки приложений, иначе, будет невозможно их увидеть. Отображение коллайдеров легко отключается. Это общая практика практически для всех физических движков. Я читал, что такой механизм есть в физическом движке PhysX. Этот механизм есть в Box2D, OimoPhysics и т.д. Управляю коллайдером-сферой с вращением только вокруг вертикальной оси. Двигаю сферу на W и S, а вращаю вокруг Y с помощью мышки. Камере присваиваю позицию (со смещением по Y) и угол сферы. Объекты загружаю из файлов формата .dae (Collada) - этот формат легко парсить с помощью pugixml, потому что это XML: демка в браузере с загруженными 3D-моделями
0
|
||||
|
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 141
|
||
| 13.03.2025, 17:44 [ТС] | ||
|
У меня не стоит задача - писать игры. Задача понять хотя бы 60% C++ на основе игры. Для меня интересно видеть результат визуально на данном этапе изучения. На данный момент есть желание что то написать мелкое 3D без сторонних библиотек 3D. Что бы понимать процесс написания на более низком уровне. Но в данный момент мало времени + затормозило отображение текстуры. Если будет возможность, взгляните на код новичка (файл.zip). c C++ намного сложнее - прорвемся. cosmoProject.zip И еще вопрос?! Использование BOX2d с С++ проще для понимания чем SDL3 + C ?
0
|
||
| 13.03.2025, 19:48 | ||||||
|
0
|
||||||
| 14.03.2025, 22:05 | ||||||||||||||||||||||||||
|
У меня мало опыта с SDL3, поэтому я переписал прошлый пример с нуля без копипаста. Я думаю, что если чаще и регулярнее так переписывать, то всё лучше будут запоминаться функции и будет проще с каждым разом.
Я заменил бегущего человечка на анимацию покоя рыцаря. У человечка размер кадра 128x128, а кадров 4 штуки:
Собрал в WASM, для запуска в браузере в один клик: https://blue-warrior-sprite-an... tlify.app/ Собрал в APK из WASM с помощью Cordova. Собрал в EXE c помощью MinGW 11.2 из консоли. Прикрепил проект с батниками для сборки. Следующим шагом может быть - написать обработчики нажатий клавиш W, A, S, D и/или клавиш стрелок. Для начала, чтобы в консоль выводилось направление, то есть текст: up, left, down, right. Это шаг к движению персонажа по нажатию клавиш. В будущем можно было бы добавить врагов, которые бы искали путь с помощью алгоритма A*. Есть пример на WebGL: Алгоритм поиска пути A*. В общем, есть от чего отталкиваться. Можно писать разные демки на C++, опираясь не предыдущий опыт и тем самым практиковаться в программировании. Предыдущий опыт - это отображение текстуры, спрайтовая анимация покоя, а следующий опыт - это нажатие клавиш, движение персонажа, переключение на анимацию ходьбы, добавление преград, запрет персонажу проходить сквозь преграды, добавление монеток, сбор монеток и отображение их. Это всё пишется кодом на C++, а значит идёт практика. Например, вы поймёте, как преобразовать число в строку, чтобы отобразить в виде текста на экране. main.cpp
0
|
||||||||||||||||||||||||||
| 15.03.2025, 10:26 | ||||||||||||||||
|
Очень важный шаг, который необходимо сделать и он очень простой - это подключение Box2D. Я прикрепил собранную библиотеку для MSVC и MinGW GCC 11.2. Можно подключить через CMake - в папке lib есть папка cmake, либо в VS подключить через настройке в проекте типа vcxproj. Не факт, что всегда можно подключать библиотеку собранную на другом компиляторе, особенно, MinGW, но у МSVC значительно больше шансов. В архиве box2d-2.4.1-prefix.zip кроме MinGW-сборки для Desktop есть сборка для Web, а в примере есть батники для конфигурирования и сборки для Desktop и Web. Если не прокатит подключение собранной библиотеки, то можно собрать Box2D из исходников с помощью CMake-GUI - тоже очень полезный опыт, так как на C++ очень часто бывает, что нет pre-built библиотеки и нужно самому собирать из исходников с GitHub с помощью CMake.
Прикрепил пример на SDL3 в котором подключена Box2D. Пример подключает Box2D и SDL3 в CMakeLists.txt:
main.cpp
0
|
||||||||||||||||
| 15.03.2025, 11:55 | ||||||
|
Ещё они очень важный шаг - это рисование коллайдеров. Box2D предоставляет класс b2Draw, от которого можно наследоваться и переопределить два метода - одни для рисования прямоугольников, а другой для рисования окружностей:
Небольшой пример рисования коллайдеров на SDL3: Демка в браузере, собранная в WASM
0
|
||||||
| 16.03.2025, 03:28 | |
|
Вот как я поступил, приставив себя на вашем месте. Я выкладывал маленький пример на Python и Pygame для определения контакта игрока с объектами средствами Box2D в сообщении #102. За вас Box2D делает проверку и делает это оптимизированно, то есть если даже у вас будет очень большая карта, то он быстро найдёт объект, с которым произошёл контакт. Тем более, что Box2D используется многими игровыми движками, например, в Unity и была протестирована множество раз. Box2D значительно упрощает решение и экономит время. Так как если этот пример писать без Box2D, то ушло бы гораздо больше сил и времени. На C++ код выглядит почти один в один, как на Python, но со спецификой C++. В процессе переписывания волей не волей изучаешь C++ на практике. Переписал пример из Python/Pygame/PyBox2D на C++/SDL3/Box2D: демка в браузере WASM Управление - WASD либо клавиши стрелки.
0
|
|
|
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 141
|
||
| 16.03.2025, 16:59 [ТС] | ||
|
В данный момент нет времени. По этому и нет вопросов. С понедельника начнем. В файле ниже пример геометрии, движения и отражения. о без библиотек. Если плохо видно, уменьшите размер символов до 8. test.zip
0
|
||
| 16.03.2025, 22:41 | ||
|
Просто прикреплённая вами библиотека более понятна для вас. Как вариант, можете сделать с помощью предоставленной вами библиотеки такой пример, где можно двигать персонаж (пусть будет тоже круг) и выведите несколько прямоугольников с разными цветами, чтобы в консоль выводилось с каким прямоугольником произошёл контакт. Например, выводите прямоугольники разных цветов - красный, зелёный и синий. Управляйте кругом клавишами. Если круг коснулся красного прямоугольника, то выводите в консоль - red, если зелёного, то green, если синего, то blue. Практикуйтесь на небольших примерах и комбинируйте эти примеры. После того, как сделаете пример с выводом цвета прямоугольника при касании, нужно сделать пример, чтобы круг не проходил сквозь прямоугольник, то есть, чтобы главный персонаж игры не проходил сквозь препятствия. На Box2D можно двигаться вдоль стены с заданным коэффициентом трения, то есть скользить с заданным трением, как на гиф-анимации ниже. Не знаю, реализовано ли это на той кастомной физической библиотеке. Я сделал комбинацию примера со спрайтовой анимацией из сообщения #109 и примера с движением коллайдера-окружности с определением контакта из сообщения #112. Здесь добавил анимацию ходьбы. Сделал два круговых коллайдера для главного героя. Демка в браузере, собранная в WebAssembly
0
|
||
| 20.03.2025, 18:53 | |||||||||||
|
Скорее всего, вам было бы интересно и полезно писать короткие игровые демки очень простых мини-игр. Например, я переписал код демки Змейка из текстового туториала NoobTuts Snake Game на PySDL3. В этом туториале очень простой английский. Можно за одно поупражняться в английском. Попробуйте переписать мой код с Python на C++, читая тот туториал. Для этой игровой демки нужно уметь рисовать квадраты заданного цвета с помощью SDL3. В целом PySDL очень близко повторяет оригинальный SDL3 на C/C++. Вместо списка Python используйте std::vector из стандартной библиотеки C++.
main.py
0
|
|||||||||||
| 20.03.2025, 19:13 | ||||||
|
Движок форума добавляет пустые пробелы в пустых строках, поэтому прикрепил исходники.
https://rextester.com/MBDA81854
0
|
||||||
| 30.03.2025, 13:41 | |
|
cosmos44, я стараюсь каждый день уделять хотя бы 30 минут в день для практики с SDL3 и OpenGL с самыми базовыми упражнениями. Пока выкладываю на Python, а на C++ не выкладываю. Вам может быть будет интересно и полезно переписывать мои примеры с Python на С++. Я сделал две отдельные темы на официальном репозитории PySDL3, где в первой используется 2D API, а во второй используется чистый шейдерный OpenGL 2.1:
На данный момент сделано 19 маленьких примеров на PySDL3 и 7 базовых примеров на OpenGL. Я считаю, что вам лучше переключиться с 2D API на чистый шейдерный OpenGL, потому что 2D API крайне ущербный - в нём много чего не хватает, либо это сделано неэффективно. Как, например, вывод текста или скрыто и непонятно, как сделано. Нет детектирования клика по объекту, а на OpenGL это делается легко методом цветового ID. Либо делается сложно и неэффективно, например, чтобы повернуть прямоугольник на 2D API вам нужно сначала нарисовать его на текстуре, а потом повернуть созданную текстуру и нарисовать текстуру, а на OpenGL и PyGLM это делается гораздо понятнее и более эффективно. PyGLM - библиотека для работы с линейной алгеброй. OpenGL намного более прозрачный с точки зрения понимания математики и процессов компьютерной графики. На OpenGL вы можете строить графики функций и геометрические фигуры не только в 2D, но и в 3D. Вам несложно будет в дальнейшем переписывать примеры с Python, PySDL3, PyOpenGL, PyGLM и т.д. на C++, SDL3, OpenGL, GLM и т.д.
0
|
|
|
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 141
|
|
| 01.04.2025, 19:40 [ТС] | |
|
0
|
|
|
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 141
|
||
| 03.04.2025, 17:22 [ТС] | ||
|
1) У нас есть int currentTime = SDL_GetTicks(); 2) Есть массив из 6-ти фреймов (считаю длинным кодом, но все же давайте на данном примере). 3).... 4).... За ранее спасибо.
0
|
||
| 03.04.2025, 18:36 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Код
Пример маленький, потому я постараюсь объяснить с самого начала, потому что повторение - мать учения. В SDL3 появилась новая очень удобная концепция - отказ от функции main() в пользу четырёх функций:
Теперь по поводу работы спрайтовой анимации. 1) Создание текстуры из файла. Первым делом в теле функции SDL_AppInit загружаем файл idle.png с кадрами спрайтовой анимации:
2) Концепция спрайтовой анимации. Суть спрайтовой анимации в том, что отображается кадр на прямоугольнике в течении определённого времени. Далее, на прямоугольник выводится следующий кадр и он тоже отображается в течении указанного времени. Когда кадры заканчиваются, то происходит переключение на самый первый кадр. Этот указанный промежуток времени хранится в переменной animationInterval и равен в данном примере 0.1, то есть 100 миллисекунд. 3) Концепция дельта тайм. Дельта тайм - это промежуток времени между кадрами, но кадрами не спрайтовой анимации, а кадрами перерисовки всей сцены. Это время между вызовами функции SDL_AppIterate. Например, если FPS - 60 кадров в секунду (frame per seconds), то дельта тайм будет равен 0.016 секунды или 16 миллисекунд, потому что 1000 / 60 = 16.66666 (6). Концепция дельта тайм центральная для всех видов анимаций, будь то спрайтовая анимация, key frame анимация перемещения/поворота/масштабирования, скелетная анимация, анимация на физическом движке и т.д. В данном примере, дельта тайм используется для отсчёта промежутков времени, когда нужно переключаться на следующий кадр спрайта 4) Реализация расчёта delta time. Для расчёта delta time используется следующий код:
6) Индекс следующего кадра спрайтовой анимации. При этом мы рассчитываем новый индекс следующего кадра спрайтовой анимации с помощью строки:
7) Рисование кадра спрайтовой анимации. Рисуем кадр спрайтовой анимации:
0
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 03.04.2025, 18:36 | |
|
Помогаю со студенческими работами здесь
120
Неправильная отрисовка текстур в OpenGL
Не отрисовывается график Генератор текстур( с чего начать) Qt с++ картинка постоянно отрисовывается Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|