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

MiembroTipoDefaultDescripció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.
MiembroTipoDefaultDescripció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.

MiembroTipoDefaultDescripció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.
MiembroTipoDefaultDescripció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.

Anterior: Hybrid Bridge

Siguiente: Spring