quarta-feira, 4 de maio de 2011

Away3D e Molehill super simples


Saio agora pouco um path da Away3D muito interessante, que possibilita você instalar e usar a nova tecnologia sem muito esforço.

Você vai precisar de:
Adobe Flex SDK 4.5.0.19786 ou superior
flashplayer_inc_playerglobal_022711.swc
molehill_away3d_path.zip
e Flash Develop
A versão de incubadora do flash player


Qualquer duvida vejam a vídeo aula do blog que originou essa matéria (em inglês) http://johnlindquist.com/2011/02/28/quickstart-for-molehill-and-away3d/

Instalação do player para Molehill
  • Desinstale o flashplayer atual (Painel de controle / desinstalar programa)
  • Instale o novo flashplayer
  • Extraia o Adobe Flex SDK para uma pasta qualquer no C: de preferência.
  • Pegue o arquivo flashplayer_int_playerglobal_022711.swc e renomeie para playerglobal.swc
  • Vá na pasta c:\FlexSDK4.5.0.19786\frameworks\libs\player
  • Nela você cria uma pasta e dê o nome de 10.1
  • Cole o playerglobal.swc nela
  • Extraia os arquivos do molehill_away3d_path.zip e cole os na pasta  c:\FlexSDK4.5.0.19786
  • Notara que ele irá pedir para substituir alguns arquivos, marque SIM para todos
  • Crie um novo projeto AS3 no Flash Develop
  • Na árvore do projeto clique no index.html para abrir o arquivo e olhe a linha 19
bgcolor: "#FFFFFF", // <- linha 19. nao esqueca a virgula
wmode: "direct" // <- parametro para molehill
  • Salve e feche esse arquivo
  • Clique em Project e escolha Properties
  • Deixe como na imagem

  • Para p "Custom Command" clique em Edit e digite bin/index.html
  • Clique em "Compiler Options"
  • Clique do lado de Aditional Compiler Options vai aparecer um botão com "..." clique nele
  • Digite essa linha:
-swf-version=13
  • Dê Ok
Agora o código
package 
{
 // Primeiro de tudo os imports, que são os componentes usados
 // pelo Away3D, utilizando uma IDE como o FlashDevelop essas
 // linhas são preenchidas altomaticamente então não se preocupe
 // com elas.
 import away3d.lights.DirectionalLight;
 import away3d.materials.ColorMaterial;
 import away3d.primitives.Cube;
 import flash.display.Sprite;
 import flash.display.StageAlign;
 import flash.display.StageScaleMode;
 import flash.events.Event;
 import away3d.containers.View3D;
 import flash.text.TextField;
 import flash.utils.setInterval;
 
 /**
  * Teste para Away3D vs 4 e Molehill
  * para o blog http://tutoriaisedesenvolvimento.blogspot.com/
  * 
  * base
  * http://ultravisual.co.uk/blog/2011/03/22/more-molehill-away3d-fun/
  * http://johnlindquist.com/2011/02/28/quickstart-for-molehill-and-away3d/
  * 
  * @author Marcos Augusto Bitetti ( marcosbiteti [at] gmail.com )
  */
 public class Main extends Sprite 
 {
  // criamos alguns objetos, para o Away3D. O único realmente
  // importante é o View3D.
  // o objeto view é onde ocorre a renderização 3D
  private var view:View3D;
  // vamos animar um cubo
  private var cube:Cube;
  // um campo de texto apenas para exibir estatísticas
  private var inf:TextField;
  
  // nota: aos iniciantes, essas são variáveis de controle
  //       elas não são os objetos que seus nomes sugerem
  //       mas iremos crialos e adicionalos à elas adiante
  
  /***
  * Este é um construtor, aqui o nosso filme se inicia.
  * Usamos ele para definir alguns valores básicos mas nada
  * realmente visual é bom fazer aqui, isto porque nosso objeto
  * acabou de ser criado, mas ainda não esta no palco!
  ***/
  public function Main():void 
  {
   // o Flashdevelop já cria essas linhas por padrão
   if (stage) init();
   else addEventListener(Event.ADDED_TO_STAGE, init);
  }
  
  /***
  * Como o nome já diz aqui iniciaremos o nosso filme.
  * todo o necessário para a Away3D vem agora.
  ***/
  private function init(e:Event = null):void 
  {
   // remove evento, essa linha também é colocada pelo FlashDevelop
   removeEventListener( Event.ADDED_TO_STAGE, init );
  
   // Primeiro vamos dizer que o swf não deve sofrer alteração no seu
   // formato (largura x altura), para não haver distorção
   stage.scaleMode = StageScaleMode.NO_SCALE;
   // em seguida alinhamos o swf no canto esquerdo da janel
   stage.align = StageAlign.TOP_LEFT;
   
   // criamos nossa view
   view = new View3D();
   // e adicionamos ela no palco
   addChild(view);
   
   // vamos criar uma luz
   var light:DirectionalLight = new DirectionalLight(0, -1, 1);
   // vamos dar uma cor para ela, quanto mais pura for a cor mais
   // forte a fonte de luz irá aparecer
   light.color = 0xaaaa30;
   // pronto, adicionamos ela na cena.
   // nota: o objeto view (View3D) possui uma cena incorporada e nela
   //       inserimos os objetos.
   view.scene.addChild(light);
   
   // vamos criar um material, na versão 4 da Away3D tudo que precisamos
   // é de um ColorMaterial. 
   // Damos a cor 0xff0000 (vermelho) e o alfa 1 (opaco);
   var mat:ColorMaterial = new ColorMaterial(0xff0000, 1);
   // definimos o valor da cor specular (brilho)*/
   mat.specular = 1.0;
   // definimos a quantidade de cor ambiente que afeta o objeto
   // em geral considere isso a luz neutra do ambiente
   mat.ambient = 0.6;
   // geralmente a cor ambiente é um cinza (luz branca tenue)
   mat.ambientColor = 0x555555;
   // e adicionamos a luz que criamos anteriormente ao material
   // sem isso ele não renderiza a luz
   mat.lights = [light];
   
   // nota: até aqui é muito familiar aos programas 3D, só que
   //       setamos os valores na mão no lugar de potenciômetros
   
   // agora criamos o cubo
   cube = new Cube(mat);
   // e o colocamos na cena
   view.scene.addChild(cube);
   
   
   // agora um campo de texto para exibir dados
   inf = new TextField();
   // setamos a cor do texto para branco
   inf.textColor = 0xffffff;
   // adicionamos ao palco, como ele esta sendo inserido após
   // o view ele vai aparecer imediatamente acima da vista 3D
   // pois o flash sobrepões os objetos em camadas
   addChild(inf);
   
   // agora registramos o evento ENTER_FRAME e apontamos a
   // função anim nele. Toda vez que um frame for atualizar
   // essa função sera chamada.
   addEventListener( Event.ENTER_FRAME, anim );
   
   // criamos também uma chamada à função updateFramerate
   // para atualizar o contador de quadros.
   // ela sera disparada a cada 1/10 de segundo (1 seg = 1000)
   setInterval( updateFramerate, 100 );
  }
  
  
  /**
   * Esta é a função que será chamada a cada frame (30 no nosso swf)
   * por padrão quando usamos o sistema de eventos da AS3 ele manda
   * sempre uma cópia do evento para a função.
   * @param e
   */
  private function anim( e:Event ):void
  {
   // só para ilustrar vamos rodar o Cubo pelos  seus eixos
   // ele vai fazer um movimento semelhante a um gimbau
   cube.rotationY += 5;
   cube.rotationZ += 2;
   cube.rotationX += 3;
   
   // agora atualizamos a view para aparecer nossa imagem
   view.render();
   
   // incrementamos o contador de frames para vermos a performance
   frm ++;
  }
  
  /**
   * NOTA: Daqui em diante não é importante para usar Molehill
   */
  
  // ** variáveis de apoio **
  // contador de frames desenhados
  private var frm:int = 0;
  // marcador de tempo
  private var oTime:Date = new Date();
  
  /**
   * Atualiza o mostrador de framerate
   */
  private function updateFramerate():void
  {
   // t é igual a data atual
   var t:Date = new Date();
   // pegamos a diferença em milisegundos entre a data atual
   // e oTime que é a ultima data analizada e jogamos em d
   var d:Number = t.getTime() - oTime.getTime();
   // colocamos em oTime a data atual para ser usada na próxima vez
   oTime = new Date();
   
   // calculamos a quantidade de frames por segundo
   var fr:Number = frm * (1000 / d);
   // jogamos no campo de texto inf
   inf.text = fr.toFixed(2).toString() + " / " + stage.frameRate ;
   // zeramos o contadoe de frames para começar o processo de novo
   frm = 0;
   
   // nota: é comum programadores usarem nas funções que são
   //       chamadas por setInterval uma função chamada
   //       updateAfterEvent() no entanto não há necessidade
   //       de usala aqui já que ela forçaria uma atualização
   //       desnecessária da tela, afinal o framerate já é bem
   //       alto, não precisa gastar processamento atoa.
  }
 }
 
}

Arquivos do tutorial
http://www.4shared.com/file/it_S0Wwe/molehill_tutorial.html
 
Nota sobre o framerate
Em 99,9% dos casos uma boa taxa de quadros (framerate) não deve ser superior a 30fps.
Usamos 60fps nesse tutorial com o fim de analizar a performace.

Nenhum comentário:

Postar um comentário