Cámaras
Un objeto cámara decide qué ve tu visitante y cómo se mueve.
Modos de control
| Modo | El visitante… |
|---|---|
none | no puede mover la cámara: la manejas tú |
orbit | arrastra para girar alrededor de un objetivo, rueda para acercarse |
fly | vuela libremente con teclas y ratón |
firstPerson | mira alrededor desde donde está, con el puntero capturado |
lock | puntero capturado, pero la cámara sigue a su objeto |
lockfirstPerson 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:
| Ajuste | Hace |
|---|---|
target | el punto alrededor del que se gira |
enableRotate · enablePan · enableZoom | qué gestos se permiten |
minDistance · maxDistance | cuánto puede acercarse y alejarse el visitante |
minPolarAngle · maxPolarAngle | hasta dónde puede subir y bajar |
enableDamping · dampingFactor | cuánto sigue deslizándose el movimiento al soltar |
autoRotate · autoRotateSpeed | un 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.
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:
| Destino | Renderiza en |
|---|---|
screen | un rectángulo del lienzo — posición y tamaño en fracciones de pantalla |
texture | una 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.
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.