|
175 / 10 / 1
Регистрация: 05.08.2024
Сообщений: 73
|
||||||
Как сделать изменение координат (или анимацию) в PyOpenGL?12.08.2024, 16:15. Показов 4010. Ответов 35
Метки нет (Все метки)
Код создает несколько треугольников и один синий квадрат. Как сделать так, чтобы синий квадрат мог вращаться, не изменяя своих пропорций, а также это не должно касаться других фигур? Помогите, пожалуйста.
Вот код:
2
|
||||||
| 12.08.2024, 16:15 | |
|
Ответы с готовыми решениями:
35
Как сделать анимацию или физику в консольной игре?
|
| 16.08.2024, 19:23 | ||||||||||||||||
|
Добавил к примеру выше матрицу вида (камеру), матрицу ортогональной проекции и scale-матрицу. В примере выше нет матрицы проекции, поэтому размер холста ограничен [-1, 1], а с помощью ортогональной матрицы проекции можно задать любой размер холста. Например, я задал от -50 до 50 по X и Y и от -10 до 10 по Z. Матрицы можно комбинировать перемножая их. В результате получается projViewMatrix:
main.py
0
|
||||||||||||||||
| 17.08.2024, 00:01 | ||||||||||||||||||
|
Надо определять касания ГГ вентиляторов. Логичнее и проще было бы передвигать главного героя, вращать вентиляторы и определять касание ГГ вентиляторов с помощью физического движка PyBox2D. Можно сделать respawn ГГ, когда он коснулся вентилятора. Например, в Unity вы бы делали именно так, то есть с привлечением физического движка. В Unity встроен Box2D. В Box2D ещё есть встроенный ray casting, то есть можно бросать луч и определять какие объекты пересёк луч. Но об этом как-нидуль потом. Я вынес рисование прямоугольника в отдельную функцию и в отдельный файл: rectangle.py
0
|
||||||||||||||||||
|
175 / 10 / 1
Регистрация: 05.08.2024
Сообщений: 73
|
|
| 17.08.2024, 10:49 [ТС] | |
|
Здравствуйте! Я полностью изучил вашу лекцию о шейдерах в PyOpenGL. Все было отлично, понятно, подробно расписано, я понял работу шейдеров и взаимодействии с ними по вашему примеру с треугольником. Ознакомившись с теорией я решил "пощупать" сам код, но у меня возникла проблема с glw. Программа выдала ошибку:
translationMatrix = glm.translate(glm.mat4(1), glm.vec3(x, y, 0)) builtins.AttributeError: module 'glm' has no attribute 'translate' Я попробовал разобраться в библиотеке, но ничего сделать не смог.
1
|
|
| 17.08.2024, 12:37 | |||||||||||||||||||
|
Не могу понять почему так. Я сначала подумал, что в слове "translate" возможно одну из букв "a" вы случайно набрали русской буквой, но я скопировал вашу строку кода и она работает в консоли. Следующие команды работают у вас в консоли? Откройте консоль и наберите: py чтобы запустить интерпретатор Python. Далее, введите следующие команды:
Скорее всего, вы установили glm вместо PyGLM. Я попробовал нагуглить текст ошибки:
Там выдвигают предположение:
0
|
|||||||||||||||||||
|
175 / 10 / 1
Регистрация: 05.08.2024
Сообщений: 73
|
|
| 17.08.2024, 13:28 [ТС] | |
|
Сделал все по вашей инструкции, помогло, код заработал. Теперь я более подробно могу изучить работу шейдера в PyOpenGL, а также практиковаться с ними
1
|
|
| 17.08.2024, 13:56 | |
|
Попробуйте решить эту задачу: Для изображения осуществить 5 его выводов каждый раз обрезая высоту на 20% Если нужен пример, как накладывать текстуру, то постараюсь объяснить своими словами с примером. Только надо будет новую тему вам создать про наложение текстуры.
1
|
|
|
175 / 10 / 1
Регистрация: 05.08.2024
Сообщений: 73
|
|
| 17.08.2024, 16:14 [ТС] | |
|
Хорошо, попробую. Постараюсь сделать самостоятельно. Спасибо вам большое за столь огромную помощь в познании OpenGL с PyGame
1
|
|
| 17.08.2024, 18:37 | ||||||
|
Скину пример с текстурой, а если возникнет проблема с пониманием текстурных координат или интерполяции текстурных координат между вершинами с помощью varying между вершинным и фрагментным шейдерами, то сначала погуглите, а потом создавайте тему. В следующим примере для загрузки файла PNG используется пакет Pillow Устанавливается командой: pip install Pillow
0
|
||||||
| 19.08.2024, 00:05 | ||||||||||||||||||||||||||||||||
|
Это неправильный способ изменения координат ГГ. Надо изменять их с помощью Box2D. Сложно будет рассчитать пересечение двух прямоугольников один из которых вращается. По сути вам придётся писать свой физический движок, а это куча времени и сил. Отложим ненадолго OpenGL и реализуем перемещение ГГ на Box2D с рисованием объектов с помощью Pygame, а потом несложно будет переписать рисование на OpenGL. Почему очень важно изучение Box2D. Это сэкономит много времени, чтобы не писать своё с нуля. Эти знания пригодятся если вы решите взять Unity, Godot, Cocos и т.д. Потому что в этих движках либо обёртка над Box2D, либо очень похожие другие физические движки, которые очень похожи между собой. Взять, например, Rapier2D или Matter.js - все они очень похожи на Box2D. В Box2D вам нужно будет поставить коллайдеры на объекты и на ГГ и там очень просто пишется обработчики коллизий. По сути он уже там есть. Вы легко определите какие два объекта коснулись друг друга. Если вы коснулись врага, то отнимаем сердечко жизни, если подобрали аптечку, то прибавляем сердечко жизни. А OpenGL тоже важно изучать и важно писать свои маленькие движки для маленьких игр в свободное время, чтобы изучать на практике, как работает компьютерная графика на низком уровне, а ещё на нём можете изучать математику: строить графики, рисовать формулы, решать геометрические задачи в 2D и 3D, решать задачи линейной алгебры с визуализацией и анимацией и т.д. Потом ещё надо подключить OpenAL для работы со звуками. Это тоже полезно для настройки звука и игровых движках. Параллельно изучайте Godot. У него очень похожий язык на Python, называется GDScript. Там редактор кода встроен в движок. Устанавливать его не надо. Скачиваете EXE и открывается движок. Пройдите сначала этот короткий официальный туториал: Step by step, а потом этот Your first 2D game Можете ещё пройти этот для 3D: Your first 3D game Очень важно изучать, как делаются игры на высоком уровне абстракции.
Теперь по поводу перемещения на Box2D и Pygame. Ставьте PyBox2D командой:
main.py
main.py
main.py
1
|
||||||||||||||||||||||||||||||||
| 19.08.2024, 02:12 | ||||||||||||||||||||||||||||||||||||
|
Добавил коллайдер стены повёрнутой под углом 30 градусов по аналогии с коллайдером игрока. Добавил перемещение игрока:
Запретил игроку засыпать, потому что иначе его нельзя сдвинуть после того, как он заснул через несколько секунд неактивности:
main.py
1
|
||||||||||||||||||||||||||||||||||||
| 19.08.2024, 03:08 | ||||||||||||||||||||||||||
|
Добавил вентилятор типа b2_kinematicBody. Этот тип, в отличие от b2_dynamicBody, не управляется силами или импульсами. Их можно напрямую двигать и вращать. Это хорошо подходит, например, для лифтов или движущихся платформ. В данном случае он отлично подходит для вентилятора. Итого получается в этом примере есть все типы тел: b2_dynamicBody (игрок), b2_staticBody (стена) и b2_kinematicBody (вентилятор) Добавил имена для всех объектов, чтобы выводить их в консоль когда произошла коллизия игрока со стеной и вентилятором:
main.py
1
|
||||||||||||||||||||||||||
| 20.08.2024, 15:28 | |||||||||||
|
Глядя на пример, выше возникает вопрос: как на OpenGL нарисовать отрезок заданной толщины, имея координаты точки начала и конца отрезка? В примере выше используется метод pygame.draw.line() для рисования отрезка между двух указанных точек.
Эта функция принимает:
Важнейшая задача написать функцию с таким же функционалом на OpenGL. Это откроет множество возможностей. Вы сможете рисовать с помощью отрезков: коллайдеры, стрелки, оси координат, ломанные, графики функций и т.д. В местах сочленения ломанных можно помещать закрашенные окружности, чтобы они были гладкими. Для рисования отрезка я создаю квадрат в буфере размером 1x1, то есть:
1
|
|||||||||||
|
175 / 10 / 1
Регистрация: 05.08.2024
Сообщений: 73
|
||||||
| 20.08.2024, 20:33 [ТС] | ||||||
0
|
||||||
| 20.08.2024, 21:02 | |
|
Daniil_G, надо было создать новую тему. Я создал и ответил в ней: TypeError: 'int' object is not subscriptable
0
|
|
| 21.08.2024, 13:50 | |||||||||||||||||||||||||||
main.py
0
|
|||||||||||||||||||||||||||
| 02.12.2024, 15:13 | |||||||||||
|
Я перевёл комментарии в примере сообщения #31 на английский с помощью Google Translate. Лучше всего писать комментарии на английском, потому что охват больше - можно общаться на англоязычных площадках, но не забывая, конечно, параллельно использовать КиберФорум. Есть много англоязычных мест, где очень много народу сидит и активность большая. Много русскоязычных, которые общаются на английском. Можно тренировать свой английский, исправляя себя в Google Translate перед публикацией текста. Это заставляет выходить из зоны комфорта и расти над собой.
Самая главная новость, что 29 ноября автор PyBox2D сделал возможным установку PyBox2D на Python 3.12+. Теперь вы можете поставить PyBox2D командой "pip install PyBox2D" с помощью Python 3.6 - 3.13 Ранее, PyBox2D работать только максимум с Python 3.8, а с 3.9 и далее уже не работал. Сделать перемещение объекта в игре с помощью PyBox2D намного проще, чем с помощью написания свой системы определения коллизий. Когда прямоугольники повёрнуты, либо форма прямоугольная, то сделать это будет очень сложно. К тому же Box2D оптимизирован под большое количество объектов на сцене. Вам не надо будет самому писать код для прохода по всем объектам и проверять нет ли касания игрока с каким-либо объектом - Box2D сделает это за вас. Для упрощения, пример написан на Pygame, но его несложно будет переписать на OpenGL, потому что Pygame здесь для окна, клавиш и рисования линий: https://gist.github.com/8Obser... 721429e16f > pip install Box2D Pygame main.py
1
|
|||||||||||
| 02.12.2024, 15:13 | |
|
Нужно сделать переход или как анимацию кнопки Можно ли в WF вставить готовую анимацию (или как сделать самому)? Как сделать в Bash рандомное изменение координат курсора на экране каждые 5 минут? Возможно ли сделать как-то проверку было ли изменение экрана или нет? Сделать анимацию анимацию-движение картинка Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки
Правым кликом по серверу -> отладочная информация -> edit
Заменить "net": "raw", на "net": "tcp",
Нажать кнопку reload.
|
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|