Saltar al contenido principal

Cámaras

Un objeto cámara decide qué ve tu visitante y cómo se mueve.

Modos de control

ModoEl visitante…
noneno puede mover la cámara: la manejas tú
orbitarrastra para girar alrededor de un objetivo, rueda para acercarse
flyvuela libremente con teclas y ratón
firstPersonmira alrededor desde donde está, con el puntero capturado
lockpuntero capturado, pero la cámara sigue a su objeto
Para un personaje quieres lock

firstPerson entrega la propia cámara a los controles del puntero, lo que la desprende de su objeto: bien para alguien que rodea un modelo, inútil para un personaje, porque la cámara deja de seguir al cuerpo.

lock captura el puntero igual, pero deja la cámara adjunta y entrega el movimiento del ratón a tu script. Eso es un juego en primera persona.

Ajustes de orbit

orbit es el modo por defecto porque encaja con los visores de producto, y es el que más tiene que afinar:

AjusteHace
targetel punto alrededor del que se gira
enableRotate · enablePan · enableZoomqué gestos se permiten
minDistance · maxDistancecuánto puede acercarse y alejarse el visitante
minPolarAngle · maxPolarAnglehasta dónde puede subir y bajar
enableDamping · dampingFactorcuánto sigue deslizándose el movimiento al soltar
autoRotate · autoRotateSpeedun giro lento en reposo

Limitar el ángulo polar merece la pena en casi cualquier visor de producto: evita que la gente orbite por debajo del suelo y vea la escena desde abajo, algo que ninguna iluminación consigue que parezca intencionado.

Óptica

fov es el campo de visión en grados: 50 es un valor natural por defecto, más bajo es más teleobjetivo y más plano, más alto es más ancho y más dramático.

near y far acotan lo que se dibuja. Los objetos más cercanos que near o más lejanos que far quedan recortados.

Una relación far/near enorme provoca z-fighting

Superficies próximas entre sí empiezan a parpadear cuando al búfer de profundidad se le acaba la precisión. Si ves eso, sube near antes de bajar far: near afecta mucho más a la precisión.

Ajustes de fly

El modo fly se mueve con teclas, y las teclas son configurables, incluido seguir una de las asignaciones con nombre del proyecto en vez de nombrar teclas directamente. Una velocidad y un multiplicador de impulso (Shift mantenido por defecto) controlan el ritmo.

Vistas adicionales

Una vista adicional renderiza una segunda pasada desde una cámara, encima de la principal. Así se construye un minimapa, un retrovisor o un monitor de vigilancia.

Ponla en un objeto que ya tenga cámara y elige adónde va:

DestinoRenderiza en
screenun rectángulo del lienzo — posición y tamaño en fracciones de pantalla
textureuna imagen fuera de pantalla, que luego puede mostrar un material

El destino texture es el divertido: renderiza la vista de una cámara en una textura, pon esa textura sobre un objeto pantalla de tu escena, y tendrás un monitor que funciona mostrando otra parte del mundo.

Las vistas adicionales se dibujan después de la pasada principal, en el orden que les des.

Cada vista adicional es otro renderizado completo de la escena

Dos monitores significan que la escena se dibuja tres veces. Valen la pena donde importan, y vale la pena apagarlas donde no.

Qué cámara está activa

Una escena se renderiza a través de una cámara cada vez. Un script puede preguntar cuál y cambiarla:

ctx.camera.entity();
ctx.camera.setActive(securityCam);
ctx.camera.pose();

El transform de la cámara es siempre la fuente de verdad: escribe en él para mover la cámara. Ten en cuenta que en orbit y firstPerson los controles son dueños de la rotación, así que una rotación que escribas será sobrescrita; la posición sí se respeta. Consulta la API de ctx.

Y si los controles de juego están moviendo una cámara, se ignora el modo de control propio de esa cámara: si no, el montaje pelearía con él en cada fotograma.


Siguiente: Recursos — modelos, imágenes y sonidos.