3D-движок на Python с использованием OpenGL и GLUT. Поддерживает загрузку сцен из файлов CLE, физику, рендеринг, UI-кнопки и горячие клавиши.
- Загрузка и отображение 3D-сцен из файлов CLE
- Поддержка объектов: cube, sphere, plane, cylinder, light
- Свойства объектов: позиция, масштаб, цвет, текстура, материал, эмиссия
- 2D UI-кнопки, фиксированные на экране
- Управление камерой мышью (вращение — ЛКМ, перемещение — СКМ)
- Физика с реалистичной гравитацией (1 метр = 100 единиц)
- Декуплированная физика (стабильная при любом FPS)
- Отображение FPS, количества объектов, имени сцены, позиции камеры, статуса физики
- Переключение режимов: освещение, wireframe/solid, ортографическая/перспективная камера, текстуры
- Адаптация UI и сцены к изменению размера окна
CREATE <name> TYPE <type> POSITION <x> <y> <z> SCALE <sx> <sy> <sz> [COLOR <r> <g> <b>] [TEXTURE <file>] [MATERIAL <name>] [EMISSIVE <value>]
Пример:
CREATE player TYPE cube POSITION 500 100 0 SCALE 1 1 1 COLOR 1 0 0
CREATE light1 TYPE light POSITION 0 1000 0 SCALE 0.5 0.5 0.5 COLOR 1 1 1 EMISSIVE 1.0
- Вращение камеры — зажать ЛКМ и двигать мышь
- Перемещение камеры — зажать СКМ (среднюю кнопку) и двигать мышь
- Клик по UI-кнопкам — ЛКМ
- Toggle Physics — включить/выключить физику
- Load Scene — загрузить сцену из файла
- Установите зависимости:
- Python 3.x
- PyOpenGL
- Pillow
- (опционально) Tkinter (обычно входит в стандартную библиотеку)
- Поместите
assets.pack(архив с иконками) в корень проекта - Запустите
engine.py
- 1 метр = 100 единиц в координатах сцены
- Гравитация и размеры мира соответствуют этому масштабу
- Все параметры объектов и сцены указываются в этих единицах