Cámara y proyección
La cámara es ortográfica y 1:1: una unidad de mundo es un píxel CSS. Estas utilidades pasan de un espacio a otro, y son la base del Hybrid Bridge.
Coordenadas
| Miembro | Tipo | Default | Descripción |
|---|---|---|---|
worldToScreen | (worldX: number, worldY: number, viewport: { width: number; height: number }) => { x: number; y: number } | — | Convierte coordenadas de mundo (Three.js) a coordenadas de pantalla (CSS). Origen de pantalla: esquina superior izquierda. |
| Miembro | Tipo | Default | Descripción |
|---|---|---|---|
screenToWorld | (screenX: number, screenY: number, viewport: { width: number; height: number }) => { x: number; y: number } | — | Convierte coordenadas de pantalla (CSS) a coordenadas de mundo (Three.js). Origen de mundo: centro del viewport. |
Proyección
projectRect y projectNode proyectan un rectángulo o un nodo a un ScreenTransform, en píxeles CSS relativos al canvas. Usan la cámara, así que valen con padres escalados o rotados. Escriben en out y no alocan.
| Miembro | Tipo | Default | Descripción |
|---|---|---|---|
projectRect | (rect: LocalRect, space: Matrix4, camera: Camera, viewport: ViewportSize, out: ScreenTransform) => ScreenTransform | — | Proyecta un rectángulo en el espacio de space (una matriz local -> mundo, p. ej. un matrixWorld) a la pantalla, con la cámara dada. Proyecta tres esquinas, así que es exacto con la cámara ortográfica y padres escalados, rotados en z o trasladados; con perspectiva es una aproximación afín. Usa camera.projectionMatrix y camera.matrixWorldInverse tal como están: después del render de Threlte están al día. Escribe en out (sin allocations) y lo devuelve. Con ancho o alto 0, la columna lineal de ese eje queda como la identidad. |
| Miembro | Tipo | Default | Descripción |
|---|---|---|---|
projectNode | (node: EssentiaNode, camera: Camera, viewport: ViewportSize, out: ScreenTransform) => ScreenTransform | — | Proyecta el rectángulo local de un nodo (node.localRect()) a la pantalla con el matrixWorld completo del root: posición, rotación y escala del nodo y de sus padres. Es lo mismo que una BridgeSource { object, rect }: el elemento sigue a lo que se dibuja, también con setScale(). Vale porque ningún root guarda el tamaño de un quad en su escala (Fase 6.1). Lee el matrixWorld tal como está: después del render de Threlte está al día. Escribe en out (sin allocations) y lo devuelve. |