Papervision 3d start-up your first template tutorial
Inizia da questo post una serie di tutorial che porteranno a completare un template Flash Papervision 3d con Action Script 3. Tornate a visitare questo blog per seguire lo sviluppo del progetto. Per completare il tutorial questi i requisiti: essere in possesso di Adobe Flash (almeno versione CS3), scaricare il pacchetto Papervision, nozioni di Action Script 3.
Demo
1) Download Papervision 3d
Prima di tutto dovete scaricare il pacchetto Papervision. Se avete avuto problemi cercando di seguire alcuni di quei pochi tutorial che si trovano online sullo sviluppo di una scena base, che il compilatore dell’output segnala una serie di errori che impediscono all’applicazione di funzionare.
Questo è dato dal fatto che molti di questi tutorial base sono stati realizzati con la prima versione di Papervision, la seconda revisione denominata The Great White 2.0 ha subito una serie di interessanti migliorie, molte funzioni sono state eliminate e integrate in altre funzioni. Vi troverete quindi a cercare di eseguire uno script realizzato con la prima revision mentre voi avete scaricato ed avete in uso l’ultima versione.
Download latest Papervision 3d stuff
2) Import Packages
Ogni volta che dovrete creare una scena Papervision o meglio As3 la prima cosa da fare è instanziare tutta quella serie di funzioni (packages) che permettono di comunicare a Flash di abilitare una scena 3d e le componenti necessarie As3.
import flash.display.Sprite;
import flash.events.Event;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.materials.*;
import org.papervision3d.objects.primitives.Plane;
3) Main Class
Iniziamo a scrivere la nostra funzione, definendo la Classe:
public class Pv3d_Tut_1 extends Sprite {
private var scene:Scene3D;
private var renderer:BasicRenderEngine;
private var viewport:Viewport3D;
private var camera:Camera3D;
private var plane1:Plane;
public function Pv3d_Tut_1() {
init();
}
}
4) Init function (create Pv3d stuff)
Definiamo la funzione init() che sarà il contenitore della nostra scena con le propreità principali:
private function init():void {
viewport=new Viewport3D(stage.stageWidth,stage.stageHeight,false,true);
scene=new Scene3D ;
renderer=new BasicRenderEngine ;
camera=new Camera3D ;
camera.zoom=8;
camera.focus=100;
addChild(viewport);
initObjects();
addEventListener(Event.ENTER_FRAME,render,false,0,true);
}
5) initObjects()
Definiamo la funzione initObjects(), in cui vengono creati gli oggetti e i materiali presenti nella scena. Aggiungiamo un semplice piano alla nostra scena. Questo piano sarà un oggetto MovieClip, dentro al quale potremo poi naturalmente richiamare un file esterno, applicare pulsanti ed azioni etc… In questo caso ho semplicemente inserito un testo.
private function initObjects():void {
var material_mc:MovieAssetMaterial=new MovieAssetMaterial("mc_1");
material_mc.smooth=true;
plane1=new Plane(material_mc,500,500,4,4);
scene.addChild(plane1);
}
6) Render function
E la nostra funzione di rendering:
private function render(event:Event):void {
camera.target=plane1;
renderer.renderScene(scene,camera,viewport);
}
Sinceramente non sembra così chiaro a questo punto la potenzialità di Papervision.
Aggiungiamo alla nostra funzione di render alcune righe di codice grazie alle quali il muovimento della scena viene legato alla distanza del mouse relativamente alle dimensioni dello stage.
camera.x += (((stage.mouseX-(stage.stageWidth * .5))*2)- camera.x )*.05;
camera.y += (((stage.mouseY-(stage.stageHeight*.5))*2)-camera.y )*.05;
7) Full Class
package {
import flash.display.Sprite;
import flash.events.Event;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.materials.*;
import org.papervision3d.objects.primitives.Plane;
public class Pv3d_Tut_1 extends Sprite {
private var scene:Scene3D;
private var renderer:BasicRenderEngine;
private var viewport:Viewport3D;
private var camera:Camera3D;
private var plane1:Plane;
public function Pv3d_Tut_1() {
init();
}
private function init():void {
viewport=new Viewport3D(stage.stageWidth,stage.stageHeight,false,true);
scene=new Scene3D ;
renderer=new BasicRenderEngine ;
camera=new Camera3D ;
camera.zoom=8;
camera.focus=100;
addChild(viewport);
initObjects();
addEventListener(Event.ENTER_FRAME,render,false,0,true);
}
private function initObjects():void {
var material_mc:MovieAssetMaterial=new MovieAssetMaterial("mc_1");
material_mc.smooth=true;
plane1=new Plane(material_mc,500,500,4,4);
scene.addChild(plane1);
}
private function render(event:Event):void {
camera.x += (((stage.mouseX-(stage.stageWidth * .5))*2)- camera.x )*.05;
camera.y += (((stage.mouseY-(stage.stageHeight*.5))*2)-camera.y )*.05;
camera.target=plane1;
renderer.renderScene(scene,camera,viewport);
}
}
}
Ecco fatto come potete vedere abbiamo instanziato correttamente il nostro simbolo e abbiamo dato vita alla nostra prima scena base, generalmente nominata “Hello World”.
Conclusion & Download
Attenzione! Come vedrete la funzione costruttrice è vuota. Richiama infatti la funzione init(); che a sua volta fa riferimento alla funzione initObjects ();. Questo passaggio non è strettamente necessario. Preferisco procedere in questo modo sia per ordine visivo, sia per modularità nello sviluppo di altre applicazioni future, sia perchè lasciare la funzione costruttrice vuota risolverà parecchi problemi che nasceranno in seguito quando proveremo a richiamare la classe Papervison tramite un preloading o come swf esterno. Parleremo in seguito di questo sul blog.



Comments
Nik
February 12, 2009
Sei un animale! ..mò ti metti pure a fare i tutorial?? bella davidì!
Mattia
February 26, 2009
Ciao mi chiamo Mattia. Complimenti per il tutorial, è tutto molto chiaro.
Volevo chiederti però…nel caso volessi utilizzare come texture per il piano un movieclip contenente pulsanti e azioni…come faccio a renderlo funzionale?
Grazie Ciau!
David
February 26, 2009
Ciao Mattia, i file del prossimo post di questa serie sono già pronti…e tratterò proprio come rendere interattivi i materiali in Papervision3d, sia che siano bitmap, che movieclip semplici o animati, o movieclip esterni caricati in runtime.
Penso di riuscire a pubblicare tutto la prossima settimana. Se hai estrema urgenza per qualche progetto commerciale scrivimi una mail, sennò ci aggiorniamo presto su queste pagine.
daniele
March 6, 2009
Sono capitato per caso sul tuo sito (alla ricerca di una vecchia versione di pv3d in as2),
devo dire che hai fatto davvero un ottimo lavoro e pure i tuoi progetti sono davvero belli.
Ti faccio ancora i complimenti, in attesa dei prossimi tutorial su pv3d.
:)
Papervision 3d first Interactive Scene3DEvent template tutorial
March 8, 2009
[...] Papervision 3d start-up your first template tutorial [...]
dino roselli
March 14, 2009
ciao David, molto bravo , anche nello stile grafico!! è un buon punto di aprtenza per capire come funziona papervision3d….grazie davvero dino:)
dino r
March 14, 2009
quando esporto il fla , il mio swf è vuoto come mai? il movie clip mc_1 che viene richiamato sembra vuoto, o meglio quando esporto mi da molti errori….
David
March 14, 2009
Stai parlando del file del tutorial ?
Hai il pacchetto papervision allo stesso livello del file .fla? Sennò non trova la libreria…è il punto 1 del tutorial.
dino
March 15, 2009
si, apro il fla , lo esporto dandomi errori nella compilazione.
David
March 15, 2009
Prova a riscaricare il pacchetto Pv3d adesso, mi ero scordato di inserire un file ;-)
Papervision 3d Interactive Scene template
May 22, 2009
[...] Papervision 3d start-up your first template tutorial [...]
Johnny
May 27, 2009
Ciao David … scusa l’intrusione ma ho un quesito da porti …
Sto sviluppando una RIA per lo sharing di media in Flex 3 e sto aggiungendo alcune viste per “sfogliare” i contenuti delle collection di media, fra cui una CoverFlow view … il componente e’ un’estensione di un ViewStack base di Papervision3D sviluppato da altri …
L’oggetto ha già una sua camera3D, ma all’evento resize dell’applicazione la camera interna non e’ modificabile e/o raggiungibile … come posso aggiungere una camera3D per creare un effetto zoom sul resize dell’applicazione?
L’oggetto che spieghi nel tutorial e’ “stand-alone”? O meglio, posso applicarlo a qualsiasi oggetto 3D all’intero dell’applicazione principale?
Grazie in anticipo…
Johnny
David
May 27, 2009
ciao J,
così non ti so dire quale sia il problema, e sincerametne non ti capisco quando dici “effetto zoom on resize”. On resize definisce il comportamenteo del browser. Sicuramente la classe CoverFlow avrà delle funzioni che si “scontrano” con le tue funzioni.
Ma se crei una nuova camera e riprendi la scena con quella, bypassando la camera della classe?
ciao
D
Johnny
May 28, 2009
Hai ragione … non sono stato molto chiaro (ancora spraticone di Flex), ma la tua risposta finale e’ proprio quello che volevo sentirmi dire … quindi ne deduco che il tuo codice mi sembra appropriato per quello che dovrei fare, no?
Thx always in adv.
Johnny
David
May 28, 2009
Puoi creare quante camere vuoi. Facci sapere!
ciao
D
Alessia
June 6, 2009
ciao david. grazie del tutorial e dei file, molto bello!!!
premettendo che sono una capra con flash e che forse mi sto imbarcando in un’impresa più grande di me, ho una domanda da porti: se io volessi sostituire al piano un oggetto semplice esportato da cinema4d in .dae, come faccio?
in realtà le mie conoscenze di action script rasentano lo zero, chiedo scusa se la mia domanda dovesse risultate fuori luogo. grazie
David
June 8, 2009
ciao A,
se hai qualche giorno di pazienza faccio un nuovo tutorial proprio su come importare i modelli 3d da cinema 4d… la proxima settimana! ;)
alessia
June 9, 2009
fantastico… grazie!!!
Luca
August 18, 2009
Ciao, ho provato a sostituire mc_1 con una mia mc(un logo fatto da testo con sfondo trasparente), ma quando pubblico l’swf viene sempre con lo sfondo nero, qualsiasi sia lo sfondo della mia scena.Come posso sostituire lo sfondo che avrà la mia clip animata con papervision3d?
grazie, complimenti!!!
Ciao
Mamba
August 21, 2009
Che dire… grande tutorial!
Ciao David, complimenti…
volevo sapere come posso togliere lo sfondo nero al testo… ho provato a metterlo a 0%.. ma niente.
In pratica se cambio il colore dello sfondo (ad esempio rosso) lo cambia.. ma se lo metto a 0% diventa nero..
dove sbaglio?
P.S.
Sono alle prime armi :-D
David
August 23, 2009
Ciao,
avete provata a dare un’occhiata a questo tut ?
http://davidsalvatori.com/papervision-3d-interactive-scene3devent-template-tutorial/
Mamba
August 24, 2009
Ciao David, grazie per la risposta.
Avevo visto quel tutorial e scaricato l’esempio… ma anche li mi viene lo sfondo nero con l’animazione del primo tutorial.. non capisco cosa sbaglio… devo forse scaricare qualcos’altro?
David
August 24, 2009
metti così:
var material_mc1:MovieAssetMaterial = new MovieAssetMaterial(”mc_1″, true);
ovvero… è vero che il materiale è trasparente
fammi sap
ciao
d
Mamba
August 24, 2009
Perfetto!!!! Sei un grande!!!
ma in pratica il – ,true – significa che il mc deve essere trasparente?