• RSS
  • Facebook
  • Twitter
Comments


Olá pessoal! Desde já agradeço todo o retorno positivo de meus últimos artigos sobre Flash. Muito obrigado a todos!
Percebi que no iMasters não havia nenhum tutorial ou nada que falasse tecnicamente sobre o Papervision 3D, então para preencher essa lacuna vamos conhecer essa maravilhosa ferramenta para Flash.

O que é o Papervision 3D?

Basicamente, o Papervision 3D é um pacote de classes que lhe oferece diversas ferramentas profissionais para produção de filmes em Flash com a ilusão de três dimensões. Digo ilusão pois, apesar de o Flash suportar atualmente 3D nativo (que ainda perde feio para o que o Papervision nos oferece), o Papervision 3D já existia muito antes disso, simulando o efeito ótico tridimensional apenas manipulando as propriedades de objetos bidimensionais.
Hoje o Papervision 3D é a ferramenta de produção tridimensional no Flash mais utilizada e mais popular, com diversos plugins e efeitos impressionantes. A grande maioria dos sites 3D mais impressionantes do mundo foram todos produzidos com a ferramenta.

Como usar?

O primeiro passo é fazer o download no repositório de código oficial no Google: http://code.google.com/p/papervision3d/.
Existem duas formas de usar o pacote com seu filme SWF: Baixando o ZIP com os arquivos das classes dentro de uma pasta e sempre a copiando em cada projeto realizado. Baixando o arquivo .SWC que empacota todas as classes do Papervision em um só arquivo.

E qual a diferença?

No caso da primeira opção teremos sempre compatibilidade na hora de compilar nosso SWF, pois como sempre copiamos a pasta com a versão que estamos utilizando em cada projeto, nunca teremos problemas com versões futuras. A desvantagem é ter que sempre duplicar essa pasta em cada projeto e ocupando mais espaço no HD.
Na segunda opção você pode colocar o arquivo .SWC em um lugar comum e apenas configurar para que seu filme sempre o requisite na hora de compilar o SWF. Para configurar essa requisição vá em Edit > Preferences > Actionscript. Agora clique no botão Actionscript 3.0 settings. No box do meio, Library Path, clique no ícone vermelho e vá atrás do arquivo SWC do Papervision em seu computador.

Vamos começar!

Devido ao fato de termos de criar tudo através de Actionscript, sem a visualização em tempo real, muitos não sabem nem por onde começar. Então vamos entender passo a passo a lógica de como trabalha nosso Papervision 3D:
Para que o Papervision 3D funcione, precisaremos de quatro elementos essenciais:
  • Renderizador Um objeto BasicRendererEngine para processar todo o ambiente 3D na tela.
  • Cena Um objeto Scene3D que englobe todo o seu conteúdo. É o cenário necessário para exibir qualquer coisa na tela.
  • Ponto de vista Um objeto Viewport3D. Uma perspectiva a partir do qual seu conteúdo será visualizado.
  • Câmera Um objeto Camera3D. Precisamos de um "olho" em nosso cenário para que possamos manipular uma visão do ambiente.
Agora que temos a base essencial do Papervision 3D, vamos juntar tudo e construir um ambiente no qual possamos colocar a mão na massa.

O Actionscript para prepararmos esse ambiente de produção é um tanto burocrático:
public var scene:Scene3D;
public var camera:Camera3D;
public var viewport:Viewport3D;
public var renderer:BasicRenderEngine; 
public function init():void{

scene = new Scene3D();
camera = new Camera3D();
camera.focus = 100;
camera.zoom = 12;
camera.z = -1000;

renderer = new BasicRenderEngine();
viewport = new Viewport3D(stage.stageWidth, stage.stageHeight,false, false, false, false);
addChild(viewport);

addEventListener(Event.ENTER_FRAME, enterFrameHandler);
}
Porém o Papervision 3D facilita nossa vida e nos oferece um objeto chamado BasicView que simplifica todo o código anterior e já nos dá um objeto pronto com tudo: o renderizador (BasicView.renderer), a cena (BasicView.scene), o ponto de vista (BasicView.viewport) e a câmera (BasicView.camera).
Esse objeto estende um objeto Sprite, logo você deverá inseri-lo no Stage usando addChild(). Vamos usar o BasicView para montar nosso ambiente. Só precisamos passar alguns parâmetros para ele:
  • viewportWidth:Number A largura da perspectiva em pixels
  • viewportHeight:Number - A altura da perspectiva em pixels
  • scaleToStage:Boolean Redimensionar a perspectiva seguindo o Stage caso ele também seja redimensionado
  • interactive:Boolean Detectar interações do usuário (teclado, mouse, etc.)
  • cameraType:String Tipo da câmera que será utilizada, usando variáveis estáticas de objetos de câmeras do Papervision. Exemplo: Camera3D.TYPE, FreeCamera3D.TYPE, FrustrumCamera3D.TYPE, etc. De início utilizaremos o padrão Camera3D.TYPE.
view = new BasicView( 500, 500, true, false );
Pronto! Já temos todo nosso ambiente 3D preparado para colocarmos o que quisermos dentro dele e assim o Papervision 3D realizar seu trabalho de renderização. Vamos colocar agora uma esfera 3D em nossa cena 3D:
esfera = new Sphere( new WireframeMaterial(), 100, 20, 20 );
view.scene.addChild( esfera );
No momento não vou explicar em detalhes a criação de um objeto esférico e suas configurações, falaremos isso de outra vez. Mas adianto que nossa esfera foi configurada com um material aramado (wireframe), de raio 100 pixels e 20 segmentos de montagem vertical e horizontal.
Além de colocarmos objetos dentro do ambiente, podemos também mudar suas configurações, como por exemplo, o zoom e o foco do ambiente:
view.camera.zoom = 12;
view.camera.focus = 100;
Ok, já temos nosso ambiente montado, configurado e com uma esfera 3D nele. Só que tudo estático! Flash é movimento, animação! Nosso milagroso objeto BasicView também nos dá uma função específica de renderização que processará tudo para nós. Então vamos criar um loop, usando o evento ENTER_FRAME:
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
Como vimos acima, nosso evento ENTER_FRAME está chamando uma função que no exemplo estamos chamando de enterFrameHandler. Dentro dela pediremos que o BasicView renderize tudo para nós a cada frame do filme, e aproveitamos para dizer que a esfera rotacione em seu eixo Y:
private function enterFrameHandler( event:Event ):void {
esfera.rotationY += 2;
view.singleRender();
}
Agora que entendemos os princípios básicos do Papervision 3D, como montar um ambiente 3D para trabalharmos e como trabalhar com um loop de renderização, vamos juntar tudo de forma organizada em uma classe que chamaremos de HelloWorld e nos mostrará um globo 3D aramado girando:
package {
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.*;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.materials.WireframeMaterial;
import org.papervision3d.objects.primitives.Sphere;
import org.papervision3d.view.BasicView;
[SWF(frameRate="31", width="500", height="500", backgroundColor="0x000000")]
public class HelloWorld extends Sprite {
private var view:BasicView;
private var esfera:Sphere;
public function HelloWorld() {

init();
}
private function init():void {

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;

view = new BasicView(500, 500, true, false);
view.camera.zoom = 12;
view.camera.focus = 100;
addChild(view);

esfera = new Sphere( new WireframeMaterial(), 100, 20, 20 );
view.scene.addChild( esfera );

addEventListener( Event.ENTER_FRAME, enterFrameHandler );
}
private function enterFrameHandler( event : Event ):void {

esfera.rotationY += 2;
view.singleRender();
}
}
} 
Você pode fazer aqui o download com o exemplo acima junto com o pacote do Papervision 3D mais recente. Vejo vocês na continuação deste artigo.

Categories:

Leave a Reply