Olá pessoal, decidi que para este novo tutorial eu iria fazer alguma coisa simples mesclando matemática e papervision.
Clique aqui na imagem para visualizar a aplicaçãoPara demonstrar o movimento de translação nada melhor que usar um exemplo já conhecido, o movimento da lua sobre a terra.
Criaremos 1 arquivo (.fla) e um arquivo (.as) rotulado como ppv_math, definimos no flash como document class nosso ppv_math. Nosso código não possui nenhum mistério para quem já vem acompanhando nossos tutoriais de papervision com exceção das seguintes linhas de código.
lua.z = Math.cos(teta) * 150; lua.x = Math.sin(teta) * 150; lua.y = Math.sin(teta) * 50;
Para fazer a translação padrão utilizamos como eixos base nosso “x” e “z” para interargimos lateralmente e com profundidade, para dar um efeito mais interessante na aplicação decidi colocar uma interação no eixo “y” para a lua percorrer em um sentido diagonal. Experimente comentar um dos eixos para ver o que acontece. Agora segue o código na integra.
ppv_math.as
package { //flash import flash.display.Sprite; import flash.events.Event; //papervision import org.papervision3d.scenes.Scene3D; import org.papervision3d.view.Viewport3D; import org.papervision3d.cameras.Camera3D; import org.papervision3d.render.BasicRenderEngine; //Material import org.papervision3d.materials.BitmapAssetMaterial; // objeto import org.papervision3d.objects.primitives.Sphere; public class ppv_math extends Sprite { public var cena:Scene3D; public var viewport:Viewport3D; public var camera:Camera3D; public var renderer:BasicRenderEngine; //objetos Primitivos public var terra:Sphere; public var lua:Sphere; //Matemática public var alfa:Number = Math.PI / 180; public var teta:Number = 0; public function ppv_math () { Set (); Objetos (); } public function Set ():void { viewport = new Viewport3D(400,400); addChild (viewport); cena = new Scene3D ; renderer = new BasicRenderEngine ; camera = new Camera3D ; camera.zoom = 5; camera.focus = 200; } public function Objetos ():void { terra = new Sphere(new BitmapAssetMaterial("Earth"), 100, 15,15); lua = new Sphere(new BitmapAssetMaterial("moon"), 30, 15,15); cena.addChild(terra); cena.addChild(lua); addEventListener (Event.ENTER_FRAME,Loop,false, 0, true); } public function Loop (e:Event):void { teta += alfa; renderer.renderScene (cena, camera, viewport); terra.yaw(1); lua.yaw(1); lua.z = Math.cos(teta) * 150; lua.x = Math.sin(teta) * 150; lua.y = Math.sin(teta) * 50; } } }
Com conceitos básicos é possível criar diversas coisas interessantes com o papervision, tentarei criar mais tutoriais cultos envolvendo a matemática. Até a próxima!