Adsense Banner

Sfera di sfere

Papervision3D - Costruire una sfera di sfere

Per dare uno grandioso esempio di ciò che è possibile fare quando si conoscono le coordinate dei vertici di un oggetto primitiva, faremo i seguenti passaggi:

• Creare una sfera
• Scoprire quali sono le coordinate dei vertici della sfera
• Posizionare una sfera più piccola nella posizione di ogni vertice di quella grande

Chiamiamo questo esempio VerticesExample. Per prima cosa dobbiamo importare DisplayObject3D per creare un punto cardine.

import org.papervision3d.objects.DisplayObject3D;

Successivamente viene settata la variabile oggetto dandogli le proprietà di DisplayObject3D. Quest'oggetto dovrà fungere da punto cardine o supporto per le piccole sfere.

private var pivotDO3D:DisplayObject3D;

Nel metodo init () istanziamo l'oggetto DisplayObject3De creiamo anche la grande sfera.

private function init():void
{
   pivotDO3D = new DisplayObject3D();
   scene.addChild(pivotDO3D);
   var bigSphere:Sphere = new Sphere(null,500);

Non abbiamo bisogno di aggiungere la grande sfera alla scena, né dobbiamo aggiungere un materiale ad essa, perché non la vogliamo mica vedere. Anche se non si aggiunge la sfera, possiamo comunque ottenere e utilizzare informazioni su di essa, nel nostro caso ci servono le coordinate dei suoi vertici.
Una volta che conosciamo i valori delle proprietà x, y, z ciè le coordinate di ogni vertice, possiamo posizionare altri oggetti esattamente su queste coordinate.
Sempre nel metodo init (), si aggiunge un ciclo for per scorrere l'array che contiene tutti i vertici della sfera grande.

   var numberOfVerts:uint = bigSphere.geometry.vertices.length;
   for(var i:uint = 0; i < numberOfVerts; i++)
   {

Nel ciclo for istanziamo una piccola sfera in ogni iterazione, passando null come materiale e utilizzando il metodo Math.random () per dare alla sfera un raggio casuale. Manteniamo il numero di segmenti bassi per non appesantire il rendering, ciò crerà delle primitive simili a piccoli diamanti.

      var smallSphere:Sphere = new Sphere(null,Math.random() * 30,2,2);

Ora siamo pronti per posizionare la piccola sfera sulle coordinate dei vertici della grande sfera utilizzando la proprietà geometry.vertices.

          smallSphere.x = bigSphere.geometry.vertices[i].x;
           smallSphere.y = bigSphere.geometry.vertices[i].y;
           smallSphere.z = bigSphere.geometry.vertices[i].z;

Finalmente, si aggiunge la piccola sfera a pivotDO3D, che è l'istanza di DisplayObject3D che non ha una rappresentazione visiva, ma servirà solo come contenitore e cardine.

         pivotDO3D.addChild(smallSphere);

   }
}

Per finire questo esempio, aggiungere la seguente riga nel onRenderTick ():

override protected function onRenderTick(e:Event=null):void
{
   pivotDO3D.localRotationY--;
   super.onRenderTick();
}

Che cosa si dovrebbe vedere se si pubblica l'esempio? Semplicemente una serie di piccole sfere che riprendono la forma di una sfera immaginaria più grande che sta ruotando attorno al suo asse y.
Avremmo potuto aggiungere le piccole sfere direttamente alla scena, ma ciò si sarebbe rivelato macchinoso e noioso, soprattutto il controllo del movimento di tutte loro contemporaneamente. Aggiungendo ad un genitore do3D si fa molto prima ad aggiungere l'animazione a tutti le sfere figlo, agganciate alla rotazione della nostra sfera immaginaria.

Filippo Porcari
Author: Filippo PorcariWebsite: http://filippo.porcari.oranjuice.org/Email: Questo indirizzo email è protetto dagli spambots. E' necessario abilitare JavaScript per vederlo.
designer freelance
Sono un graphic designer e mi occupo di pubblicità. Da più di 10 anni dedico le mie energie alla realizzazioni d'immagine aziendale e comunicazione visiva con un'attenzione alle nuove tecnologie del web. Da qualche anno ho scoperto il software open source e mi sono dedicato alla sua introduzione nel mio workflow produttivo ottenendo ottimi risultati.