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