Projeção de objetos 3D em uma exibição 2D

Flash Player 10 e posterior, Adobe AIR 1.5 e posterior

A classe PerspectiveProjection do pacote flash.geom oferece uma maneira simples de aplicar perspectiva rudimentar quando você movimenta objetos de exibição pelo espaço 3D.

Caso você não crie uma projeção em perspectiva para o espaço 3D explicitamente, o mecanismo 3D usará um objeto PerspectiveProjection padrão que existe na raiz e é propagado para todos os seus filhos.

As três propriedades que definem como um objeto PerspectiveProjection exibe o espaço 3D são:

  • fieldOfView

  • projectionCenter

  • focalLength

Modificar o valor de fieldOfView modifica automaticamente o valor de focalLength e vice-versa, uma vez que elas são interdependentes.

A fórmula usada para calcular a propriedade focalLength considerando-se o valor de fieldOfView é a seguinte:

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

Normalmente você modificaria a propriedade fieldOfView de maneira explícita.

Campo de visão

Manipulando a propriedade fieldOfView da classe PerspectiveProjection, é possível fazer com que um objeto de exibição 3D que está se aproximando do visualizador pareça maior e com que um objeto que está se afastando do visualizador pareça menor.

A propriedade fieldOfView especifica um ângulo entre 0 e 180 graus que determina a intensidade da projeção em perspectiva. Quanto maior o valor, mais intensa a distorção aplicada a um objeto de exibição que se movimenta em seu eixo z. Um valor baixo de fieldOfView resulta em um dimensionamento muito pequeno e faz com que os objetos pareçam se movimentar apenas um pouco para trás no espaço. Um valor alto de fieldOfView gera mais distorção e o aspecto de maior movimento. O valor máximo de 179,9999... graus resulta em um efeito extremo da lente de olho de peixe. O valor máximo de fieldOfView é 179,9999... e o mínimo é 0,00001... 0 e 180 exatos são valores inválidos.

Centro da projeção

A propriedade projectionCenter representa o ponto de fuga na projeção em perspectiva. Ela é aplicada como um deslocamento até o ponto de registro padrão (0,0) no canto superior esquerdo do palco.

Conforme um objeto parece se afastar do visualizador, ele se movimenta em direção ao ponto de fuga e, por fim, desaparece. Imagine um corredor infinitamente longo. Quando você olha para o final dele, as extremidades das paredes se convergem em um ponto de fuga no final do corredor.

Se o ponto de fuga está no centro do palco, o corredor desaparece em direção a um ponto no centro. O valor padrão da propriedade projectionCenter é o centro do palco. Se, por exemplo, você quiser que os elementos apareçam no lado esquerdo do palco e que uma área 3D apareça no lado direito, defina projectionCenter como um ponto no lado direito do palco para torná-lo o ponto de fuga da sua área de exibição 3D.

Distância focal

A propriedade focalLength representa a distância entre a origem do ponto de visão (0,0,0) e a localização do objeto de exibição em seu eixo z.

Uma distância focal longa é como uma teleobjetiva com uma visualização limitada e distâncias reduzidas entre objetos. Uma distância focal curta é como uma lente com grande abertura angular, com a qual você tem uma visualização ampla com muita distorção. Uma distância focal média assemelha-se ao que os olhos humanos veem.

Normalmente, a propriedade focalLength é recalculada dinamicamente durante a transformação de perspectiva à medida que o objeto de exibição se movimenta, mas é possível defini-la de forma explícita.

Valores padrão da projeção em perspectiva

O objeto PerspectiveProjection padrão criado na raiz tem os seguintes valores:

  • fieldOfView: 55

  • perspectiveCenter: stagewidth/2, stageHeight/2

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

Esses são os valores que serão utilizados se você não criar seu próprio objeto PerspectiveProjection.

É possível instanciar seu próprio objeto PerspectiveProjection com a intenção de você mesmo modificar projectionCenter e fieldOfView . Nesse caso, os valores padrão do objeto recém-criado são os seguintes, de acordo com um tamanho de palco padrão de 500 por 500:

  • fieldOfView: 55

  • perspectiveCenter: 250,250

  • focalLength: 480.24554443359375