Source code for simvx.graphics.scene.transforms

"""Transform SSBO data — flat numpy arrays of model matrices."""


from __future__ import annotations

import logging

import numpy as np

from .._types import MAX_OBJECTS, TRANSFORM_DTYPE

log = logging.getLogger(__name__)

__all__ = ["TransformBuffer"]


[docs] class TransformBuffer: """Flat array of transforms for GPU upload via SSBO.""" def __init__(self) -> None: self.data = np.zeros(MAX_OBJECTS, dtype=TRANSFORM_DTYPE) self.count = 0
[docs] def set_transform(self, index: int, model: np.ndarray) -> None: """Set the model matrix for entity at *index*.""" self.data[index]["model"] = model # Normal matrix = inverse transpose of upper-left 3x3 inv = np.linalg.inv(model[:3, :3]).T self.data[index]["normal_mat"][:3, :3] = inv self.count = max(self.count, index + 1)