Перейти к содержанию

Основные концепции

Entity-Component System

Termin использует ECS для организации объектов сцены.

Entity (Сущность)

Сущность — это просто идентификатор. Сама по себе она ничего не делает, но к ней можно прикреплять компоненты.

entity = scene.create_entity("player")
entity_id = entity.id  # Уникальный идентификатор

Component (Компонент)

Компоненты хранят данные. Примеры:

Компонент Описание
Transform Позиция, вращение, масштаб
Mesh 3D-геометрия
RigidBody Физическое тело
Collider Форма для коллизий
# Добавление компонентов
entity.add_component(Transform(position=(0, 1, 0)))
entity.add_component(RigidBody(mass=1.0))

Pose3 и Screw

Для представления положения и движения в 3D используются специальные классы.

Pose3

Положение + ориентация в пространстве:

from termin.geombase import Pose3

pose = Pose3(
    position=(1, 2, 3),
    rotation=(0, 0, 0, 1)  # Кватернион (x, y, z, w)
)

# Композиция трансформаций
result = pose1 * pose2

Screw (Винт)

Представление скорости или силы как винта (линейная + угловая часть):

from termin.geombase import Screw3

velocity = Screw3(
    linear=(1, 0, 0),   # Линейная скорость
    angular=(0, 0, 1)   # Угловая скорость
)

Сцена и обновление

scene = Scene()

# Добавляем системы
scene.add_system(PhysicsSystem(gravity=(0, -9.8, 0)))
scene.add_system(RenderSystem())

# Игровой цикл
dt = 1 / 60
while running:
    scene.update(dt)  # Обновляет все системы