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…

2 respostas para “Papervison 3D – Objects Primitive”

  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 uma resposta

This site uses Akismet to reduce spam. Learn how your comment data is processed.