Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2022, 00:31   #31
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Несколько базовых изменений в PyQt6 касательно графики на шейдерном OpenGL

1. OpenGL-классы перенесли в отдельное пространство имён PyQt6.QtOpenGL:

PyQt5:
Код:
from PyQt5.QtGui import (QOpenGLBuffer, QOpenGLShader, QOpenGLShaderProgram,
                         QOpenGLTexture)
PyQt6:

Код:
from PyQt6.QtOpenGL import (QOpenGLBuffer, QOpenGLShader, QOpenGLShaderProgram,
                            QOpenGLTexture)
2. Класс QOpenGLWidget перенесли в пространство имён PyQt6.QtOpenGLWidgets:

PyQt5:
Код:
from PyQt5.QtWidgets import QApplication, QOpenGLWidget
PyQt6:

Код:
from PyQt6.QtOpenGLWidgets import QOpenGLWidget
3. Изменён enum для типов шейдеров:

PyQt5:
Код:
self.program.addShaderFromSourceCode(QOpenGLShader.Vertex, vertShaderSrc)
self.program.addShaderFromSourceCode(QOpenGLShader.Fragment, fragShaderSrc)
PyQt6:

Код:
self.program.addShaderFromSourceCode(QOpenGLShader.ShaderTypeBit.Vertex, vertShaderSrc)
self.program.addShaderFromSourceCode(QOpenGLShader.ShaderTypeBit.Fragment, fragShaderSrc)
4. Изменён enum Target текстуры:

PyQt5:
Код:
self.texture = QOpenGLTexture(QOpenGLTexture.Target2D)
PyQt6:

Код:
self.texture = QOpenGLTexture(QOpenGLTexture.Target.Target2D)
5. Изменён enum для настройки фильтров текстуры:

PyQt5:
Код:
self.texture.setMinMagFilters(QOpenGLTexture.Linear, QOpenGLTexture.Linear)
PyQt6:

Код:
self.texture.setMinMagFilters(QOpenGLTexture.Filter.Linear, QOpenGLTexture.Filter.Linear)
6. Изменён enum для WrapMode:

PyQt5:
Код:
self.texture.setWrapMode(QOpenGLTexture.ClampToEdge)
PyQt6:

Код:
self.texture.setWrapMode(QOpenGLTexture.WrapMode.ClampToEdge)
7. Изменён enum для установки атрибутов приложения:

PyQt5:
Код:
QApplication.setAttribute(Qt.AA_UseDesktopOpenGL)
PyQt6:

Код:
QApplication.setAttribute(Qt.ApplicationAttribute.AA_UseDesktopOpenGL)
Несколько базовых изменений не касательно графики:

1. Изменён enum для режима открытия файла:

PyQt5:
Код:
file = QFile(path)
if not file.open(QIODevice.ReadOnly):
    print("Failed to open the file: " + path)
PyQt6:

Код:
file = QFile(path)
if not file.open(QIODevice.OpenModeFlag.ReadOnly):
    print("Failed to open the file: " + path)
2. Метод QApplication.exec_() был переименован в QApplication.exec()

PyQt5:
Код:
import sys
from PyQt5.QtWidgets import QApplication

app = QApplication(sys.argv)
sys.exit(app.exec_())
PyQt6:

Код:
import sys
from PyQt6.QtWidgets import QApplication

app = QApplication(sys.argv)
sys.exit(app.exec())
Несколько примеров на шейдерном OpenGL и PyQt5:

Последний раз редактировалось 8Observer8; 26.06.2022 в 01:17.
8Observer8 вне форума Ответить с цитированием
Старый 20.03.2023, 02:01   #32
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Записал короткое видео на 2 минуты по быстрой установке предустановленного Qt 6

The fastest way to install Qt 6 on Windows 10 64 bit - 在 Windows 10 64 位上安装 Qt 6 的最快方法

Rutube: https://rutube.ru/video/814e0b604c06...cae6fb9051528/
Dzen: https://dzen.ru/video/watch/6417889a51939f0701ca1b1e
YouTube: https://www.youtube.com/watch?v=1zOGi43t52Y
8Observer8 вне форума Ответить с цитированием
Старый Сегодня, 17:55   #33
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Демка с Марио на бесплатных ассетах на чистом OpenGL ES 2.0, Qt C++, Box2D, OpenAL для Android, Windows и WebAssembly

Следующую демку с Марио на бесплатных ассетах я написал на С++ на чистом OpenGL ES 2.0 с использованием C++-фреймворка Qt 6. Собрал исполняемые файлы для Android, Windows и WebAssembly (для запуска в браузере). В демке использую Box2D для: передвижения, прыжка, определения столкновений и пуска лучей. Добавил Box2D в проект прямо исходниками. Box2D имеет класс b2Draw переопределив методы которого можно рисовать коллайдеры имея координаты вершин, которые выдают методы класса b2Draw. Добавление Box2D исходниками позволяет собирать из одной кодовой базы для Android, Desktop и APK. Подключил библиотеку OpenAL-Soft для музыки и звуков. Подключил OpenAL-Soft для Desktop можно собрать в WebAssembly и будет работать на Web - видимо OpenAL транслируется в Web Audio API. На OpenAL и Web Audio API можно делать 3D звуки, то есть можно слышать где находится источник звука в том числе на Android если телефон поддерживает стерио - особенно это хорошо работает в наушниках. Спрайты упаковал в один атлас с помощью бесплатной программы Free Texture Packer (сайт открывается через VPN), а карту нарисовал и расставил статические коллайдеры в бесплатном редакторе игровых карт Tiled Map Editor. Очень рекомендую скачать эти программы. Особенно Tiled - очень упращает и ускоряет создание игровых уровней. Их можно использовать для любых игровых библиотек, фреймворков и движков. Эти программы экспортируют в JSON, для которого есть встроенный парсер в Qt. Кнопки нарисовал на чистом OpenGL ES 2.0. Шрифт тоже рисуется на чистом OpenGL ES 2.0. Здесь текст с distance field. Можете в YouTube набрать "thinmatrix distance field" и найдете следующие видео: OpenGL 3D Game Tutorial 33: Distance Field Text Rendering, в начале которого на первых нескольких минутах поймёте, что это. Выводится текст на английском руссском и китайском языках.

Для записи gif-анимации вывел экран телефона на ноутбук с помощью бесплатной программы scrcpy, а анимацию записал с помощью бесплатной программы ScreenToGif



В демке используются бесплатные ассеты:
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Уроки по созданию игр для новичков... -=DeS=- Gamedev - cоздание игр: Unity, OpenGL, DirectX 750 14.11.2017 20:26
Работа с файлами: запись, добавление, чтение (найти ошибку в коде) / C для начинающих Надо создать программу для работы с файлами Konlor Общие вопросы C/C++ 2 18.05.2014 12:37
Проблема с примером из темы "Уроки по созданию игр для новичков..." AvaMight Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 11.02.2012 10:55
Не могли бы дать заготовки процедур для базы данных romich.91 Паскаль, Turbo Pascal, PascalABC.NET 2 27.05.2009 18:00