Papervison 3D – Objects Primitive

Olá pessoal no post anterior dei uma breve introdução a papervision, agora vamos falar um pouco mais sobre o assunto. Papervision têm a possibilidade de trabalhar com objetos primitivos (formas geométricas) são eles: Sphere, Cube, Plane,Cone e Cylinder. Nesse tutorial vou utilizar o velho esquema, flash develop + flex SDK.

Vamos ao código :

package  {

	/**
	* ...
	* @author Fellyph Cintra fellyph.com.br/blog/
	*/

	import flash.display.Sprite;
	import org.papervision3d.materials.utils.MaterialsList;

	//Classes necessárias para trabalhar com 3D
	//em termos de visualização

	import org.papervision3d.view.Viewport3D;
	import org.papervision3d.render.BasicRenderEngine;
	import org.papervision3d.scenes.Scene3D;
	import org.papervision3d.cameras.Camera3D;

	//objeto a ser utilizado
	import org.papervision3d.objects.primitives.Sphere;
	import org.papervision3d.objects.primitives.Cube;
	import org.papervision3d.objects.primitives.Plane;
	import org.papervision3d.objects.primitives.Cone;
	import org.papervision3d.objects.primitives.Cylinder;

	// o Material a ser aplicado no objeto 3d
	import org.papervision3d.materials.WireframeMaterial;

	//importamos o Event para utilizar o ENTER_FRAME
	import flash.events.Event;

	public class MainObjetos extends Sprite {

		private var _viewport		:Viewport3D;
		private var _cena			:Scene3D;
		private var _camera			:Camera3D;

		private var _renderizador 	:BasicRenderEngine;

		private var esfera 			:Sphere;
		private var cubo			:Cube;
		private var cilindro		:Cylinder;
		private var plano			:Plane;
		private var cone			:Cone;

		private var material		:WireframeMaterial;
		private var materialPlano	:WireframeMaterial;
		private var materialList 	:MaterialsList;

		public function MainObjetos() {

			_viewport = new Viewport3D(450, 300, false, true);
			addChild(_viewport);

			_cena 			= new Scene3D();
			_camera 		= new Camera3D();
			_renderizador 	= new BasicRenderEngine();

			material = new WireframeMaterial(0xFF0000);
			materialPlano = new WireframeMaterial(0xFF0000);

			// a propriedade doubleSided serve para informar que o material será exibido com duas faces frente e verso
			materialPlano.doubleSided = true;

			materialList = new MaterialsList( { front:material,back:material,left:material,right:material,top:material,bottom:material } )

			//para criar as um objeto do tipo Sphere é necessário passar como parâmetro
			//( material, raio, segmentos Horizontais , número de segmentos Verticais
			esfera = new Sphere(material, 80, 7, 7);

			//para o objeto Cube são necessário os parâmetros , primeiro MaterialsList que diferente dos outros objetos é um Array com materiais
			//passando as faces do cubo: frente, costas(verso), lateral direita, lateral esquerda, topo  e base, ou seja,
			//você pode criar um cubo com diferentes materiais, nesse exemplo podemos ver acima, só foi utilizado apenas um material.
			//Concluindo ( materialslist, largura, profundidade, altura, segmentos horizontais, segmentos de profundidade, segmentos verticais)
			cubo = new Cube(materialList, 80, 80, 80, 2, 2, 2);

			// para o objeto Cylinder passamos o parametro ( material, raio , segmentos Horizontais e vertical)
			cilindro = new Cylinder(material, 30, 80, 8, 6);

			//para o objeto Plane ( material, largura , altura, segmentos horizontais , segmentos verticais);
			// no objeto plano estou adicionando o materialPlano porque ele tem dupla face, isso porque,
			// quando ele rotacionar a parte oposta do plano também ser exibida
			plano = new Plane(materialPlano, 60, 60 , 1 , 1);

			// Objeto Cone( material, raio da base, altura, segmentos horizontais , segmentos verticais);
			cone = new Cone(material, 80, 120, 8, 6);

			//adicionamos os objetos na Scene3D
			_cena.addChild(esfera);
			_cena.addChild(cubo);
			_cena.addChild(cilindro);
			_cena.addChild(plano);
			_cena.addChild(cone);

			//modificamos as posições dos objetos para não se chocarem
			cubo.x = 150;
			cilindro.x = 300;
			plano.x = - 150;

			cone.x = - 300; 


			//adicionamos o Evento ENTER_FRAME para fazer a renderização e movimento dos objetos
			addEventListener(Event.ENTER_FRAME, render);
			_renderizador.renderScene(_cena, _camera, _viewport);

		}

		public function render(e:Event):void {

			esfera.rotationY += 2;
			cubo.rotationX += 2;

			cilindro.rotationY -= 2;
			cilindro.rotationX += 2;

			cone.rotationZ -= 2;
			cone.rotationY -= 2;

			plano.rotationY -= 2;

			_renderizador.renderScene(_cena, _camera, _viewport);

		}

	}

}

O resultado é o seguinte :

[flash https://www.fellyph.com.br/blog/wp-content/uploads/2009/04/teste2.swf w=450 h=300]

O Código está comentado os pontos relevantes, existem mais parâmetros que podem ser repassados para os objetos, mas nesse exemplo foi simplificado com os parâmetros básicos e como podemos ver o uso de objeto é simples , que segue sempre um padrão que se aplica a todos os objetos, com exceção do cubo que recebe uma lista de materiais :

  • Criar uma material
  • Aplicar o material ao objeto e definir suas propriedades
  • Aplicar o objeto a cena
  • Renderizar a cena

Pronto pessoal tutorial simples para não ficar chato.

Até breve…

Participe da discussão

2 comentários

  1. e ai cara, muito bom esse tutorial.
    eu segui tudo direitinho mas o meu teste está danado erro! me ajuda ai, por favor!

    o erro está na classe ‘WireframeMaterial’.

    os erros são:
    “1045: Interface IFaceDrawer was not found.”
    ”1020: Method marked override must override another method.”

    como faço pra usar ouro material nos objetos?

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *