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 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
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 :

(Either JavaScript is not active or you are using an old version of Adobe Flash Player. Please install the newest Flash Player.)

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…

Esta entrada foi publicada em Flash, Tutoriais e marcada com a tag , , , , , . Adicione o link permanente aos seus favoritos.

2 respostas a Papervison 3D – Objects Primitive

  1. Jame disse:

    Very good !!

  2. José Willams disse:

    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

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">