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 :
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…
Very good !!