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)