Posts Tagged ‘objetos primitivos’

Papervision BasicView

maio 28, 2009

Olá pessoal, finalmente consegui um tempinho para criar um novo post. Hoje falaremos sobre uma classe que foi criada no intuito de simplificar a nossa vida com o papervision a classe BasicView

BasicView é uma classe para aplicações simples, criando uma classe extendida de basicview você não precisa ficar instanciando cameras, viewports, renderes, pois a propria classe ja faz isso.

Veja como nosso código fica muito otimizado, Neste exemplo estamos criando apenas uma esfera, utilizando um MovieAssetMaterial para importar um movieclip com o id igual a “smile” de nossa biblioteca e rotacionando um pouco a esfera com o metodo yaw.

ppv

Arquivo: ppv_basic.as

package  {
	import org.papervision3d.objects.primitives.Sphere;
	import org.papervision3d.materials.MovieAssetMaterial;
	import org.papervision3d.view.BasicView;
	public class ppv_basic extends BasicView{
		public var sphere:Sphere =  new Sphere(
             new MovieAssetMaterial("smile"), 200,10,10);
		public function ppv_basic() {
			scene.addChild(sphere);
			sphere.yaw(-125);
			startRendering();
		}
	}
}
Lembrando que para este codigo funcionar precisamos criar um arquivo flash, adicionar o pacote de classes do papervision e ter algum movieclip na biblioteca com o linkage “smile”.

Apesar da simplicidade eu não recomendo usar basicview para projetos complexos, mas se você estiver interessado em algum projeto muito simples seu uso é indispensavel. Para complementar a classe BasicView possui os seguintes paramêtros opcionais, seguido de suas propriedades default:

BasicView (viewportWidth:Number = 640, viewportHeight:Number = 480,
 scaleToStage:Boolean = true, interactive:Boolean = false, cameraType:String = "Target")

Espero que tenham gostado deste post, ando meio ocupado estudando diversas coisas ao mesmo tempo, também comecei a estudar a engine Away3d muito utilizada também para construção de projetos 3d no flash, similar ao papervision, podes ter certeza que logo logo estarei compartilhando este novo conhecimento com vocês. Obrigado pela sua visita e até o proximo post

Papervision [Objetos Primitivos]

fevereiro 11, 2009

Ola pessoal, como havia mencionado no post anterior, hoje nós teremos a primeira parte de uma serie de tutoriais sobre Papervision.
Neste tutorial falaremos sobre os Objetos Primitivos geométricos 3Ds (Plano, Esfera, Cone, Cilindro, Cubo). Depois sobre materiais de preenchimento. Lembrando que é sempre bom ter uma noção básica de matemática analítica.

ppv_ob

Primeiro Passo

Criaremos 2 arquivos, ambos ficarão na mesma pasta um deles será o main.as e o outro será o arquivo .fla que você pode nomealo da maneira que quiser. Após criar os arquivos no arquivo .fla você deve escrever na propriedade Document Class = “main”. Você também terá que definir o pacote do papervision. (post relacionado a como baixar e definir pacote do papervision aqui)

Componentes Obrigatórios

Para criar um objeto primitivo no Flash usando Papervision é muito simples. Desde que já tenha estruturado o código para poder rodar os componentes do papervision. Vamos analisar o código obrigatório.

Primeiro teremos que importar os pacotes referentes ao ambiente 3d que será criado. Depois criaremos 2 métodos em nosso main, o primeiro deles “Set()” será responsável pela criação do ambiente 3d, o segundo será aonde criaremos nossos objetos 3ds, ainda no segundo método, nós vamos criar um eventListener para criar um loop de enterframe. Nesse loop usaremos um método do papervision para ele renderizar nossa cena 3D. Nosso código base ficará mais ou menos assim.

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.utils.MaterialsList;
	import org.papervision3d.materials.WireframeMaterial;
	// objeto
	//Aqui importaremos nossos Objetos 

	public class main extends Sprite {
		public var cena:Scene3D;
		public var viewport:Viewport3D;
		public var camera:Camera3D;
		public var renderer:BasicRenderEngine;
		//Material
		public var material:WireframeMaterial = new WireframeMaterial(0x00ff00, 1);
		//Aqui instanciaremos nossos Objetos
		public function main () {
			Set ();
			Objetos ();
		}
		public function Set ():void {
			viewport = new Viewport3D(400,300,true,false,true,true);
			addChild (viewport);
			cena = new Scene3D ;
			renderer = new BasicRenderEngine ;
			camera = new Camera3D ;
			camera.focus = 150;
			camera.zoom = 10;

		}
		public function Objetos ():void {
                        //Aqui colocaremos nossos objetos
			addEventListener (Event.ENTER_FRAME,Loop,false, 0, true);
		}
		public function Loop (e:Event):void {
			renderer.renderScene (cena,camera,viewport);
		}
	}
}

Objetos Primitivos:

Se observarem em nosso código existe 3 pontos marcados para inserimos códigos relacionados a objetos.
• Importar pacotes referentes a objetos
• Instanciar as variáveis que serão os nossos objetos
• Inserir o objeto na cena.

Importar pacotes referentes a objetos

Segue a lista de pacotes referentes aos objetos 3D que trabalharemos.

 import org.papervision3d.objects.primitives.Plane;
 import org.papervision3d.objects.primitives.Cone;
 import org.papervision3d.objects.primitives.Cylinder;
 import org.papervision3d.objects.primitives.Sphere;
 import org.papervision3d.objects.primitives.Cube;

Instanciar as variáveis que serão os nossos objetos

Criaremos uma variável para cada objeto diferente.

 //objetos Primitivos
 public var obPlano: Plane;
 public var obCone:Cone;
 public var obCylinder:Cylinder;
 public var obSphere:Sphere;
 public var obCube:Cube;

Inserir o objeto na cena

Ao criarmos um objeto 3d é necessário dizer qual é o material relacionado a sua face em nossos exemplos por enquanto com exceção do Cube todos estarão definidos como null, no cubo nós importamos o material básico wireframe, mas não entraremos em detalhes agora pois este será o tema do próximo tutorial de papervision, após o material é a definição da largura, altura e profundidade no caso do Cubo.

//Plano
 obPlano = new Plane(null,50,50);
 obPlano.x = -150;
 obPlano.y = 75;
 cena.addChild (obPlano);
//Cone
 obCone = new Cone(null,50,50);
 obCone.x = -50;
 obCone.y = 25;
 cena.addChild (obCone);
//Cylinder
 obCylinder = new Cylinder(null,50,50);
 obCylinder.x = 80;
 obCylinder.y = 50;
 cena.addChild (obCylinder);
//Sphere
 obSphere = new Sphere(null,50,50);
 obSphere.x = -125;
 obSphere.y = -75;
 cena.addChild (obSphere);
//Cube
 obCube = new Cube(
      new MaterialsList(
      {front: material,
      back: material,
      left: material,
      right: material,
      top: material,
      bottom: material}
      ) ,50,50,50);
 obCube.x = 100
 obCube.y = -75;
 cena.addChild (obCube);

Extra

Para dar uma noção melhor que os objetos criados são mesmo 3D utilizaremos no loop os métodos yaw(), roll() e picth() que servem para rotacionar os objetos sobre o seu próprio eixo. Experimente alterar os valores para observar novos resultados.

obPlano.yaw (5)
obPlano.roll (5)
obCone.roll (5)
obCone.pitch (5)
obCylinder.roll	(-5)
obCylinder.pitch (5)
obCylinder.yaw (-5)
obSphere.yaw (-5)
obSphere.pitch (-5)
obCube.yaw (-5)
obCube.pitch (-5)

Código completo: main.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.utils.MaterialsList;
	import org.papervision3d.materials.WireframeMaterial;
	// objeto
	import org.papervision3d.objects.primitives.Plane;
	import org.papervision3d.objects.primitives.Cone;
	import org.papervision3d.objects.primitives.Cylinder;
	import org.papervision3d.objects.primitives.Sphere;
	import org.papervision3d.objects.primitives.Cube;

	public class main extends Sprite {
		public var cena:Scene3D;
		public var viewport:Viewport3D;
		public var camera:Camera3D;
		public var renderer:BasicRenderEngine;
		//Material
		public var material:WireframeMaterial = new WireframeMaterial(0x00ff00, 1);
		//objetos Primitivos
		public var obPlano: Plane;
		public var obCone:Cone;
		public var obCylinder:Cylinder;
		public var obSphere:Sphere;
		public var obCube:Cube;

		public function main () {
			Set ();
			Objetos ();
		}
		public function Set ():void {
			viewport = new Viewport3D(400,300,true,false,true,true);
			addChild (viewport);
			cena = new Scene3D ;
			renderer = new BasicRenderEngine ;
			camera = new Camera3D ;
			camera.focus = 100;
			camera.zoom = 10;

		}
		public function Objetos ():void {

			//Plano
			obPlano = new Plane(null,50,50);
			obPlano.x = -150;
			obPlano.y = 75;
			cena.addChild (obPlano);

			//Cone
			obCone = new Cone(null,50,50);
			obCone.x = -50;
			obCone.y = 25;
			cena.addChild (obCone);

			//Cylinder
			obCylinder = new Cylinder(null,50,50);
			obCylinder.x = 60;
			obCylinder.y = 75;
			cena.addChild (obCylinder);

			//Sphere
			obSphere = new Sphere(null,50,50);
			obSphere.x = -125;
			obSphere.y = -75;
			cena.addChild (obSphere);

			//Cube
			obCube = new Cube(
				new MaterialsList(
				{front: material,
			      back: material,
			      left: material,
			      right: material,
			      top: material,
			      bottom: material}
				)
				,50,50,50);
			obCube.x = 100
			obCube.y = -75;
			cena.addChild (obCube);

			addEventListener (Event.ENTER_FRAME,Loop,false, 0, true);
		}
		public function Loop (e:Event):void {
			obPlano.yaw (5)
			obPlano.roll (5)

			obCone.roll (5)
			obCone.pitch (5)

			obCylinder.roll (-5)
			obCylinder.pitch (5)
			obCylinder.yaw (-5)

			obSphere.yaw (-5)
			obSphere.pitch (-5)

			obCube.yaw (-5)
			obCube.pitch (-5)

			renderer.renderScene (cena,camera,viewport);
		}
	}
}