Fino ad ora abbiamo visto la possibilità di creare primitive e importare modelli, ma possiamo introdurre un nuovo sistema per generare i nostri solidi, un sistema che passa per la definizione di vertice come mattone dei nostri modelli.
Il Package org.papervision3d.core.geom.renderables ci mette a disposizione una serie di classi per la manipolazione dei vertici, linee e facce di una struttura 3D.
Vertex3D
Creiamo un nuovo oggetto vertice impostando le coordinate x,y e z. Un oggetto vertice può essere molto utile, sia per memorizzare un punto all'interno di un DisplayObject3D più facilmente rintracciabile, sia per creare o manipolare oggetti 3D.
Costruttore di Vertex3D
Vertex3D(x:Number, y:Number, z:Number)
Nel caso in cui abbiamo importato un modello dall'esterno, abbiamo la possibilità di modificare i singoli vertici. Possiamo pensare che l'oggetto 3D abbia in sé una collezione di vertici e scorrere i vari punti in un ciclo:
for each (var vertex:Vertex3D in solido.geometry.vertices)
{
trace (vertex.x+" "+vertex.y+" "+vertex.z);
}
I vertici di un solido non sono istanze di primo grado, ma vengono richiamate dalla classe geometry.
La classe Vertex3D ci mette a disposizione alcuni interessanti metodi tra cui clone(), getPosition() e calculateNormal().
Line3D
Una volta definto un vertice possiamo utilizzarlo per creare strutture ed oggetti direttamente in ActionScript. Vediamo come definire una semplice linea grazie alla classe Line3D.
Costruttore di Line3D
public function Line3D(instance:Lines3D, material:LineMaterial, size:Number,
vertex0:Vertex3D, vertex1:Vertex3D)
Triangle3D
Questa classe è molto interessante perché ci consente di creare una superficie minimale, una "faccia" (o sarebbe meglio dire sfaccettatura) costituita da un triangolo.
Costruttore di Triangle3D
public function Triangle3D(do3dInstance:DisplayObject3D, vertices:Array,
material:MaterialObject3D = null , uv:Array = null)
Esempio
Le tre classi si comportano in modo simile per cui faremo un solo esempio con Line3D.
Per prima cosa creiamo un nuovo DisplayObject3D che utilizzeremo come contenitore generico.
var Container = new DisplayObject3D("Contenitore Generico");
Successivamente dobbiamo impostare i due vertici che comporranno i punti di inizio e di fine del segmento
var v0:Vertex3D = new Vertex3D(-30, 0,0); var v1:Vertex3D = new Vertex3D(300,0,0);
Ora decidiamo il colore della nostra linea e creiamo un istanza della classe Lines3D
var lm:LineMaterial = new LineMaterial(0x8000ff,1); var lines3D:Lines3D = new Lines3D(lm,"Linea");
Infine assegniamo i due vertici così da disegnare il segmento vero e proprio e lo aggiungiamo al nostro contenitore
lines3D.addNewLine(1,v0.x,v0.y,v0.z,v1.x,v1.y,v1.z); Container.addChild(lines3D);
Ovviamente sia la linea che il contenitore possono essere modificati cambiando le solite proprietà come ad esempio
lines3D.rotationY = 45; lines3D.rotationZ = 125;
Se vuoi aggiornamenti su Development inserisci la tua email nel box qui sotto: