Piano roteante texturizzato in Flash con Papervision3D

Già da prima che uscisse la versione 3.0 di ActionScript si sperimentava l’ambiente 3d con Flash, con vere e proprie librerie dedicate come Sandy e PaperVision.
Queste sperimentazioni davano già buoni risultati nella versione 2 dello script, a discapito delle performance.
Tempestivamente PaperVision è stata tradotta anche nella nuova versione del linguaggio, migliorandone enormemente le prestazioni.
Proprio di questo parleremo nel tutorial, esaminandone le classi base per realizzare un primo esperimento con un piano texturizzato.

Innanzitutto, se non l’avete ancora fatto, iscrivetevi alla mailing list del loro sito per ricevere via email l’accesso al repository da cui scaricare l’ultima versione del pacchetto di classi.
Fatto questo aprite Flash CS3, cliccate su Modifica->Preferenze, selezionate ActionScript come categoria.
In questa sezione cliccate sul bottone Impostazioni ActionScript 3.0 per accedere alla lista di percorsi dove verrà cercato il codice appena scaricato.
Cliccando sull’icona croce aggiungerete un nuovo percorso, con l’icona mirino cercherete questo percorso sul vostro computer.
Il percorso deve finire con le cartelle \as3\trunk\src.
Eseguite queste operazioni siamo pronti per cominciare a vedere il codice che creerà un piano 3d rotante texturizzato, eviterò di parlare delle nuove caratteristiche di AS3 per ovvie ragioni, per chi volesse studiarlo vi consiglio quest’ottimo manuale dell’Oreilly: Essential ActionScript 3.0.
Questo è il codice che andrà inserito nel file ProvaBitmapFileMaterial.as, il cui nome è lo stesso della classe da cui si istanzia il piano tridimensionale.

package
{
import flash.display.Sprite;
import flash.events.Event;

import org.papervision3d.cameras.Camera3D;
import org.papervision3d.materials.BitmapFileMaterial;
import org.papervision3d.objects.Plane;
import org.papervision3d.scenes.MovieScene3D;

In questa prima porzione importiamo le classi che ci servono, da notare Camera3D che ci servirà per il punto di vista della scena 3D, BitmapFileMaterial per caricare esternamente la texture con cui rivestire il piano, Plane per creare la figura tridimensionale e MovieScene3D per la scena in cui posizionare l’oggetto.

public class ProvaBitmapFileMaterial extends Sprite
{
private var container :Sprite;
private var scene :MovieScene3D;
private var camera :Camera3D;
private var plane :Plane;

public function ProvaBitmapFileMaterial()
{
container = new Sprite;
container.x = 200;
container.y = 200;
addChild( container );

scene = new MovieScene3D( container );

camera = new Camera3D();
camera.z = -500;
camera.zoom = 5;

Cominciamo con il codice della classe dichiarando le variabili che ci serviranno per istanziare contenitore, scena, camera e piano.
A seguire c’è il costruttore della classe, nel cui codice avverranno la maggior parte delle operazioni.
Creiamo il contenitore dalla classe Sprite e posizioniamolo sullo Stage, dandogli le coordinate che vogliamo, quindi creiamo la scena instanziando una MovieScene3D passando come parametro il contenitore.
Fatto questo instanziamo il punto di vista con new Camera3D dandogli una posizione sull’asse Z, l’asse della profondità e un effetto zoom di 5.

var material:BitmapFileMaterial = new BitmapFileMaterial("texture.png");
material.doubleSided = true;
material.smooth = true;

plane = new Plane( material, 128, 128, 2, 2);

scene.addChild( plane );

Creiamo la texture caricando il file esterno, che dovrà trovarsi nella stessa posizione della classe: in caso contrario specifichiamone il percorso.
A material impostiamo la proprietà doubleSided con valore true per fare in modo che ruotando il piano la texture si veda su entrambi i lati, e poi con smooth ammorbidiamo l’effetto pixel del file.

Creiamo un piano instanziando la classe Plane, passando come parametri la texture, la larghezza, l’altezza e i segmenti orizzontali e verticali: possiamo aumentarne o diminuirne il numero, considerando che maggiori saranno i segmenti da cui è composto e migliore sarà la resa visiva, a discapito comunque delle performance.
Nel caso di un semplice piano bastano anche 2×2 segmenti, nel caso di una sfera, per esempio, maggiori sono e migliore sarà il suo aspetto.

Il piano appena creato deve essere aggiunto alla scena 3D.

stage.addEventListener( Event.ENTER_FRAME, onEnterFrame );

}

private function onEnterFrame( event: Event ): void
{
plane.rotationX += 4.35;
plane.rotationY += 6.55;
plane.rotationZ += 0.55;
scene.renderCamera( camera );

}

}

}

Con quest’ultimo pezzo di codice si completa la classe.
Nel caso non volessimo animazione o interazione con l’oggetto 3D potremmo fermarci qui inserendo la riga scene.renderCamera( camera ); la quale renderizza una sola volta il piano nel filmato flash.
Ma la nostra intenzione è diversa quindi aggiungiamo un EventListener allo stage: ad ogni EnterFrame verrà eseguita la funzione onEnterFrame.
In questa funzione aumentiamo ad ogni frame il valore delle proprietà del piano che lo fanno ruotare nello spazio e renderizziamo ogni volta la situazione.
Per finire chiudiamo, funzione, classe e package.

Per vedere il nostro codice in azione, creiamo un nuovo filmato in Flash con dimensioni di almeno 400×400 pixel, clicchiamo sullo stage e nel pannello Proprietà, come voce Classe Documento, inseriamo ProvaBitmapFileMaterial, ovvero il nome del nostro file .AS, senza estensione, che dovrà trovarsi nella stessa cartella del FLA sorgente.
Compiliamo il file e vedremo la texture ruotare su se stessa.

Ecco il codice di ProvaBitmapFileMaterial.as nella sua integrità:

package
{
import flash.display.Sprite;
import flash.events.Event;

import org.papervision3d.cameras.Camera3D;
import org.papervision3d.materials.BitmapFileMaterial;
import org.papervision3d.objects.Plane;
import org.papervision3d.scenes.MovieScene3D;

public class ProvaBitmapFileMaterial extends Sprite
{
private var container :Sprite;
private var scene :MovieScene3D;
private var camera :Camera3D;
private var plane :Plane;

public function ProvaBitmapFileMaterial()
{
container = new Sprite;
container.x = 200;
container.y = 200;
addChild( container );

scene = new MovieScene3D( container );

camera = new Camera3D();
camera.z = -500;
camera.zoom = 5;

var material:BitmapFileMaterial = new BitmapFileMaterial("texture.jpg");
material.doubleSided = true;
material.smooth = true;

plane = new Plane( material, 128, 128, 2, 2);

scene.addChild( plane );

stage.addEventListener( Event.ENTER_FRAME, onEnterFrame );

}

private function onEnterFrame( event: Event ): void
{
plane.rotationX += 4.35;
plane.rotationY += 6.55;
plane.rotationZ += 0.55;
scene.renderCamera( camera );
}

}

}



Ritieni questo post utile o interessante?
Condividi e Segnala

, , , , , ,

Contenuto simile:

  • Piano roteante texturizzato in Flash con Papervision3D
    Papervision 3D 2.0, una release d’effetto

    L'ottima libreria Papervision giunge alla sua versione 2.0 introducendo notevoli migliorie, non solo in termini di performance (una prima stima ci dice di almeno il 23% di guadagno in velocità) ma soprattutto per nuovi effetti e funzionalità. La nuova versione rende in un attimo obsoleta la vecchia...

  • Piano roteante texturizzato in Flash con Papervision3D
    Enciclopedia di Actionscript 2.0, tutta la sintassi, gli elementi e le classi

    Siamo già arrivati alla versione 3.0 dello script di Flash ma ancora pochi sono passati alla nuova suite di Adobe quindi questa "enciclopedia" con tutti gli elementi della versione 2 del linguaggio (classi, oggetti, funzioni etc.), esempi esaustivi, indicizzata in ordine alfabetico, non può che essere ritenuta...

  • Flash AS3, parametri con swfobject
    Passare valori e parametri a Flash in AS3 con SWFObject

    Credo che pochi non abbiano mai avuto bisogno di passare parametri dalla pagina agli SWF precompilati, comunque scrivo questo tutorial per chi ancora non l'ha fatto (o sta avendo problemi nel farlo) col codice Actionscript 3.0. L'esempio a seguire fa uso della libreria Javascript SWFObject (ex Flashobject costretto a...

  • Piano roteante texturizzato in Flash con Papervision3D
    Web Gallery e Web Design

    Le migliori opere di web design in CSS e Flash raccolte in questa selezione di web gallery. In quasi ognuno di questi portali potrete segnalare il vostro o i vostri siti, aumentando così visite, link popularity e possibilità di lavoro. Se conoscete web gallery meritevoli di stare tra quelle qui sotto indicate,...

  • Piano roteante texturizzato in Flash con Papervision3D
    Preloader per Movieclip in AS Actionscript 2

    Nonostante si sia passati da tempo alla versione 3 di Actionscript, ancora ci sono persone che chiedono tutorial Flash di preloader AS 2 per Flash 8 o precedenti. Come già visto in Preloader per movieclip in as Actionscript 3 preferisco affidare al preloader il compito di caricare i filmati come movieclip esterni:...

Feed dei commenti dei commenti - lascia un commento - trackback

Un commento per “Piano roteante texturizzato in Flash con Papervision3D”

  1. Alessia

    Questo post è veramente interessante: chiaro, preciso e professionale.
    Complimenti!

Rispondi al post