Skip to main content

Библиотека для создания и отображения 3D объектов с помощью PyOpenGL и Pygame

Project description

Py3DGraphics

Библиотека для создания и отображения 3D объектов с двумя версиями движка. Версия 0.3.0.

Выбор версии движка

Библиотека поддерживает две версии движка:

  • Версия 2 (Tkinter): Старая версия с рендерингом через Tkinter. Подходит для простых задач.
  • Версия 3 (PyOpenGL): Новая версия с GPU-ускорением через PyOpenGL и Pygame. Рекомендуется для производительности и качества.

Как выбрать версию:

from py3dgraphics import *

# Измените ENGINE_VERSION в __init__.py или установите перед импортом
import py3dgraphics
py3dgraphics.ENGINE_VERSION = 2  # Для Tkinter версии
# или
py3dgraphics.ENGINE_VERSION = 3  # Для PyOpenGL версии (по умолчанию)

Версия 3 (PyOpenGL) рекомендуется для новых проектов благодаря GPU-ускорению и лучшему качеству рендеринга.

Особенности

  • Создание 3D объектов с точками, рёбрами и гранями
  • Вращение объектов в реальном времени
  • Z-сортировка для правильного отображения глубины
  • Полигональная заливка граней
  • Управление объектами с клавиатуры
  • Оптимизация производительности с использованием NumPy для векторных операций
  • Настраиваемая толщина линий рёбер
  • Независимая скорость вращения по осям X, Y, Z

Установка

pip install treeed

Быстрый старт

Создайте вращающийся куб в пару строк:

from py3dgraphics import create_cube, quick_scene

cube = create_cube()  # Куб по умолчанию
quick_scene(cube)     # Запуск сцены

Пример использования

from py3dgraphics import create_cube, quick_scene

# Создание кубов с разными размерами и скоростями
cube1 = create_cube(size=150, speed=0.02)  # Большой, быстрый
cube2 = create_cube(size=75, speed=0.005)  # Маленький, медленный

# Запуск сцены
quick_scene(cube1, cube2)

Расширенное использование

from py3dgraphics import create_cube, Scene3D
import time

# Создание кубов
cube = create_cube(size=150, speed=0.009, position=(300, 0, 0))
cube1 = create_cube(size=120, speed=0.007)

# Создание сцены
scene = Scene3D()
scene.add_object(cube)
scene.add_object(cube1)

# Анимация движения
xp = 300
while True:
    xp += 1
    cube.set_position(xp, 0, 0)  # Изменение позиции
    scene.update_scene()  # Обновление сцены
    time.sleep(0.05)

Цвета, заливка и управление анимацией

Объекты могут иметь разные цвета. Объекты вращаются только если их speed > 0. Для статичных объектов установите speed=0.

Новые возможности кастомизации:

  • Заливка граней: Параметр fill=True включает заливку граней цветом, заданным в color.
  • Цвет контура: Параметр outline_color позволяет задать цвет контура граней (по умолчанию "white").
  • По умолчанию: Кубы отображаются только с белыми контурами без заливки, как в предыдущих версиях.
from py3dgraphics import create_cube, quick_scene

# Создание кубов с разными скоростями и цветами
cube1 = create_cube(size=150, speed=0.02, color="red")  # Вращается
cube2 = create_cube(size=75, speed=0, color="blue")     # Не вращается

# Запуск сцены
quick_scene(cube1, cube2)

Настраиваемая толщина линий и скорость вращения по осям

Новые параметры кастомизации:

  • Толщина линий: Параметр line_width задаёт толщину рёбер (по умолчанию 2).
  • Скорость вращения по осям: Параметры speed_x, speed_y, speed_z позволяют задать независимую скорость вращения по каждой оси.
from py3dgraphics import create_cube, quick_scene

# Куб с толстыми линиями и вращением только по оси Y
cube1 = create_cube(size=150, speed_y=0.02, line_width=5, color="red")

# Куб с тонкими линиями и вращением по всем осям с разной скоростью
cube2 = create_cube(size=100, speed_x=0.01, speed_y=0.02, speed_z=0.005, line_width=1, color="blue")

# Запуск сцены
quick_scene(cube1, cube2)

Управление объектом клавиатурой

Вы можете управлять одним объектом с помощью клавиатуры (WASDQE для движения по осям X, Y, Z).

from py3dgraphics import create_cube, quick_scene

cube1 = create_cube(size=150, speed=0.02, color="red")
cube2 = create_cube(size=75, speed=0, color="blue")  # Управляемый

# Запуск сцены с управлением вторым кубом
quick_scene(cube1, cube2, player=cube2)

Или ручное управление:

from py3dgraphics import create_cube, Scene3D

scene = Scene3D()
scene.add_object(create_cube())
scene.add_object(create_cube(size=100, position=(200, 0, 0), speed=0, color="green"))
scene.set_player(scene.objects[1])  # Устанавливаем второго объекта как управляемого

scene.run()

Ручное создание объектов

from py3dgraphics import Point3D, Object3D, Scene3D

# Создание куба вручную
CUBE_SIZE = 150
points = [
    [-CUBE_SIZE, -CUBE_SIZE, -CUBE_SIZE],
    [ CUBE_SIZE, -CUBE_SIZE, -CUBE_SIZE],
    [ CUBE_SIZE,  CUBE_SIZE, -CUBE_SIZE],
    [-CUBE_SIZE,  CUBE_SIZE, -CUBE_SIZE],
    [-CUBE_SIZE, -CUBE_SIZE,  CUBE_SIZE],
    [ CUBE_SIZE, -CUBE_SIZE,  CUBE_SIZE],
    [ CUBE_SIZE,  CUBE_SIZE,  CUBE_SIZE],
    [-CUBE_SIZE,  CUBE_SIZE,  CUBE_SIZE]
]
edges = [
    (0, 1), (1, 2), (2, 3), (3, 0),
    (4, 5), (5, 6), (6, 7), (7, 4),
    (0, 4), (1, 5), (2, 6), (3, 7)
]
faces = [
    (0, 1, 2, 3),  # Задняя грань
    (4, 5, 6, 7),  # Передняя грань
    (0, 4, 7, 3),  # Левая грань
    (1, 5, 6, 2),  # Правая грань
    (0, 1, 5, 4),  # Нижняя грань
    (3, 2, 6, 7)   # Верхняя грань
]

# Создание объекта с гранями для заливки
cube = Object3D(points, edges, faces, speed=0.02, color="red", fill=True, line_width=3)
scene = Scene3D()
scene.add_object(cube)
scene.run()

Загрузка моделей из .obj файлов

from py3dgraphics import create_object_from_file, quick_scene

# Загрузка модели из файла с автоматической генерацией рёбер
model = create_object_from_file("models/cube.obj", speed=0.02, color="blue", fill=False)
if model:
    quick_scene(model)

Или с ручным управлением:

from py3dgraphics import load_obj, generate_edges_from_faces, Object3D, Scene3D

# Ручная загрузка и обработка
points, faces = load_obj("models/cube.obj")
edges = generate_edges_from_faces(faces)

# Создание объекта с каркасным режимом
model = Object3D(points, edges=edges, faces=faces, speed=0.02, fill=False, outline_color="green")
scene = Scene3D()
scene.add_object(model)
scene.run()

Классы и функции

  • Point3D: Представляет 3D точку.
  • Object3D(points, edges=None, faces=None, speed=0.01, position=(0, 0, 0), color="white", fill=False, outline_color="white", line_width=2, speed_x=None, speed_y=None, speed_z=None): Представляет 3D объект с точками, рёбрами и гранями. Поддерживает вращение, позиционирование и кастомизацию внешнего вида.
  • Scene3D(width=800, height=600, title="3D Сцена", bg=(0.0, 0.0, 0.0)): Управляет сценой и отображением объектов с поддержкой Z-сортировки и управления клавиатурой.
  • create_cube(size=150, speed=0.01, position=(0, 0, 0), color="white", fill=False, outline_color="white", line_width=2, speed_x=None, speed_y=None, speed_z=None): Создаёт куб с заданными параметрами размера, скорости вращения, позиции, цветов и толщины линий.
  • quick_scene(*objects, width=800, height=600, title="3D Сцена", bg=(0.0, 0.0, 0.0)): Быстро создаёт и запускает сцену с объектами. Параметр player позволяет назначить управляемый клавиатурой объект.
  • load_obj(filename): Загружает 3D модель из .obj файла и возвращает списки точек и граней.
  • create_object_from_file(filename, **options): Загружает модель из .obj файла и создаёт полностью готовый Object3D с автоматически сгенерированными рёбрами для поддержки каркасного режима.

Лицензия

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

treeed-0.3.1.tar.gz (10.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

treeed-0.3.1-py3-none-any.whl (13.5 kB view details)

Uploaded Python 3

File details

Details for the file treeed-0.3.1.tar.gz.

File metadata

  • Download URL: treeed-0.3.1.tar.gz
  • Upload date:
  • Size: 10.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.0

File hashes

Hashes for treeed-0.3.1.tar.gz
Algorithm Hash digest
SHA256 90672bd42e519427806eef1e89332520b355c594b3911758bd607b26c675d747
MD5 49ae2727e1a76c41b2a3a5a4212efeaa
BLAKE2b-256 c9bc9899cb89d6f843ebf9b36dfa8a1307d3c71ad4eefb9cad3adc884884e1bc

See more details on using hashes here.

File details

Details for the file treeed-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: treeed-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 13.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.0

File hashes

Hashes for treeed-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 de1ebc50e17d16fb6dcebed4c43a887d0bcc939645964ebb14d2a628b1ebefc2
MD5 ed72d8f3a3d636a1baf4340bf799af1a
BLAKE2b-256 f78c34d3699605b0a43aa024cc1feeb277553bdbcedb76c0ad34525c6d6f43b4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page