
Etiquetas: Bend ModifierStack Phase LibraryPv3d viewport3D BasicRenderEngine Plane
AS3Dmod es una libreria de modificadores para objetos 3D. Actualmente AS3Dmod dispone de 7 modificadores (doblar, deformar...) que funcionan con Papervision3D, Away3D, Sandy3D y Alternativa3D. Aunque hay muy poca documentación (sobre todo en castellano), es bastante fácil de utilizar. Los pasos para poder utilizarla son los siguientes:
-Descargar AS3Dmod:
-Saber utilizar alguno de los 4 motores 3D compatibles. Puedes ver tutoriales de Papervision3D y Away3D en esta misma página.
-Una vez tenemos nuestra escena 3D en alguno de los motores, creamos una instancia de ModifierStack. El "modifier stack" es un link entre el objeto que queremos modificar y los modificadores:
mstack = new ModifierStack(new LibraryPv3d(), plano);
Podemos ver como se pasan como parámetro un objeto indicando la librería que vamos a utilizar (en este caso Papervision), y el objeto que vamos a modificar (un plano).
-Ahora necesitamos crear un modificador, y añadirlo a mstack. Para el ejemplo he utilizado "Bend", que recibe como parámetros la fuerza y el lugar donde se aplica:
bend = new Bend(0, 1);
mstack.addModifier(bend);
-Por último, cada vez que se haga un cambio en el modificardor, debemos aplicarlo (algo asi como ordenar que se renderice):
mstack.apply();
Para este ejemplo he utilizado una clase de AS3Dmod que se llama Phase. Esta clase sirve para crear una animación tipo seno. Es decir, nosotros incrementamos su valor, y ella controla de que siempre esté entre -1 y 1. Es decir, si incrementamos su valor en 0.5 en cada fotograma, cuando llegue a 1 volverá sobre sus pasos hasta valer -1, y viceversa.
Este es el código completo comentado:
package{ //CLASES //Flashimport flash.display.MovieClip;
import flash.events.Event;
//PPV3Dimport org.papervision3d.view.Viewport3D;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.materials.WireframeMaterial;
import org.papervision3d.objects.primitives.Plane;
//AS3Dmodimport com.as3dmod.modifiers.Bend;
import com.as3dmod.ModifierStack;
import com.as3dmod.plugins.pv3d.LibraryPv3d;
import com.as3dmod.util.Phase;
public class EjemploAS3MOD extends MovieClip{
//PPV3Dprivate var escena:Scene3D;
private var renderer:BasicRenderEngine;
private var camara:Camera3D;
private var viewport:Viewport3D;
private var plano:Plane
//AS3Dmodprivate var bend:Bend;
private var mstack:ModifierStack;
private var phase = new Phase();
public function EjemploAS3MOD(){
crear3D();
crearModificadores();
addEventListener(Event.ENTER_FRAME, renderizar);
}public function crear3D():void{
//Creo escenaescena = new Scene3D();
renderer = new BasicRenderEngine();
camara = new Camera3D();
viewport = new Viewport3D(700,400);
addChild(viewport);
camara.z = -800;
//Creo material y planovar material:WireframeMaterial = new WireframeMaterial(0x000000);
material.doubleSided = true;
plano = new Plane(material,700,380,12,8);
plano.rotationZ = 90;
escena.addChild(plano);
}public function crearModificadores():void{
//Modificador para PPV3D, aplicado sobre planomstack = new ModifierStack(new LibraryPv3d(), plano);
//Creo un modificador tipo Bend, y lo añado a mstackbend = new Bend(0, 1);
mstack.addModifier(bend);
}private function renderizar(e:Event):void{
//Aumento el valor de phase, para aplicarlo a la "fuerza" de bend, //aplico los cambios y renderizo. phase.value += .05;bend.force = phase.phasedValue;
mstack.apply();
renderer.renderScene(escena, camara, viewport);
} }}
Gracias!!!
Por cierto, se admiten peticiones para próximos ejemplos.Hola Manuel, puedes exportar el modelo como DAE y después cargarlo con Papervision
Tienes un ejemplo con SketchUp aqui: http://www.esedeerre.com/ejemplo/10/113/materiales-interactivos-en-papervision-greatwhite-parte-ii