Proyección de objetos 3D en una vista bidimensional

Flash Player 10 y posterior, Adobe AIR 1.5 y posterior

La clase PerspectiveProjection del paquete flash.geom proporciona una forma sencilla de aplicar una perspectiva básica al mover objetos de visualización en un espacio 3D.

Si no crea de forma explícita una proyección en perspectiva para el espacio 3D, el motor 3D utiliza un objeto PerspectiveProjection predeterminado que se encuentra en la raíz y se propaga a todos sus elementos secundarios.

Las tres propiedades que definen cómo muestra un objeto PerspectiveProjection el espacio 3D son las siguientes:

  • fieldOfView

  • projectionCenter

  • focalLength

Con la modificación del valor de fieldOfView , cambia automáticamente el valor de focalLength y viceversa, ya que son interdependientes.

La fórmula utilizada para calcular focalLength dado el valor de fieldOfView es la siguiente:

focalLength = stageWidth/2 * (cos(fieldOfView/2) / sin(fieldOfView/2)

Generalmente se modificaría la propiedad fieldOfView de forma explícita.

Campo visual

Con la manipulación de la propiedad fieldOfView de la clase PerspectiveProjection, puede hacer que un objeto de visualización 3D que se acerca al espectador parezca más grande y que un objeto que se aleja del espectador parezca más pequeño.

La propiedad fieldOfView especifica un ángulo entre 0 y 180 grados que determina la intensidad de la proyección en perspectiva. Cuanto mayor es el valor, mayor es la distorsión aplicada a un objeto de visualización que se mueve por su eje z. Un valor fieldOfView bajo implica un ajuste de escala muy pequeño y hace que objeto solo parezca moverse ligeramente hacia atrás en el espacio. Un valor fieldOfView alto causa más distorsión y la apariencia de mayor movimiento. El valor máximo de 179,9999... tiene como resultado un efecto de lente de cámara "ojo de pez" extremo. El valor máximo de fieldOfView es 179.9999... y el mínimo es de 0,00001... Exactamente 0 y 180 son valores no permitidos.

Centro de proyección

La propiedad projectionCenter representa el punto de fuga en la proyección en perspectiva. Se aplica como desplazamiento en el punto de registro predeterminado (0,0) en la esquina superior izquierda del escenario.

Cuando un objeto parece alejarse del espectador, se sesga hacia el punto de fuga y finalmente desaparece. Imagine un pasillo infinitamente largo. Cuando mira el pasillo hacia delante, los bordes de las paredes convergen en un punto de fuga hacia el final del pasillo.

Si el punto de fuga está en el centro del escenario, el pasillo desaparece hacia un punto en el centro. El valor predeterminado de la propiedad projectionCenter es el centro del escenario. Si, por ejemplo, desea que los elementos aparezcan en la parte izquierda del escenario y un área 3D a la derecha, establezca projectionCenter en un punto en la derecha del escenario para que ese sea el punto de fuga del área de visualización 3D.

Distancia focal

La propiedad focalLength representa la distancia entre el origen del punto de vista (0,0,0) y la ubicación del objeto de visualización en su eje z.

Una distancia focal larga es como una lente telefoto con una vista estrecha y distancias comprimidas entre objetos. Una distancia focal corta es como una lente gran angular, con la que se obtiene una vista amplia con mucha distorsión. La distancia focal media se aproxima a lo que vé el ojo humano.

Generalmente el valor focalLength se vuelve a calcular de forma dinámica durante la transformación de perspectiva conforme se mueve el objeto de visualización, aunque se puede establecer de forma explícita.

Valores de proyección en perspectiva predeterminados

El objeto predeterminado PerspectiveProjection creado en la raíz tiene los siguientes valores:

  • fieldOfView: 55

  • perspectiveCenter: stagewidth/2, stageHeight/2

  • focalLength: stageWidth/ 2 * ( cos(fieldOfView/2) / sin(fieldOfView/2) )

Estos son los valores que se utilizan si no crea su propio objeto PerspectiveProjection.

Puede crear una instancia de su propio objeto PerspectiveProjection con el fin realizar una modificación propia de projectionCenter y fieldOfView . En este caso, los valores predeterminados del objeto recién creado son los siguientes, en función del tamaño del escenario predeterminado de 500 por 500:

  • fieldOfView: 55

  • perspectiveCenter: 250,250

  • focalLength: 480.24554443359375