Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Aggiunta Luci Papervision 2.0a

    Flash Cs3 / AS3 / papervision 2.0a
    -------------------------------------------

    Mi sono buttato sulle librerie papervision.

    Il mio scopo è quello di creare un parallelepipedo dove in ogni faccia ho un movieclip e fin qui tutto ok.

    ora vorrei creare una luce che illumini il mio parallelepipedo e qui casca l'asino.

    cerco di farvi capire con pezzi di codice (non posto tutta la classe che sarebbe dispersiva)

    creo ogni materiale per faccia creato da un movieclip
    codice:
    var movieclip1:FacciaVuota = new MovieClipEsempio();
    		   
    		    var mm1:MovieMaterial = new MovieMaterial(movieclip1);
    		    mm1.interactive = false;
    			mm1.animated = false;
    			mm1.smooth = false;
    questo per ogni faccia (MovieClipEsempio è una classe estensione di MovieClip)


    creo la lista di materiali che compongono le facce del mio parallelepipedo
    codice:
    listaMateriali = new MaterialsList( { front:mm1, 
    													left:mm2, 
    													right:mm3, 
    													top:mm4, 
    													bottom:mm5, 
    													back:mm6 } );
    Ho creato il mio parallelepipedo con la lista di materiali e lo aggiungo alla scena
    codice:
    parallelepipedo = new Cube(listaMateriali, 170, 170, 100, 5, 5, 5);
    default_scene.addChild(tessera);
    ora creo la luce e la posiziono.
    codice:
    pointLight= new PointLight3D(true, true);
    pointLight.z = -150;
    default_scene.addChild(pointLight);
    e qui NON so più andare avanti, vorrei che la mia luce illuminasse il parallelepipedo, ma non capisco come. e in giro i documenti che ho letto non mi chiariscono tanto le idee.

    Qualcuno sa darmi qualche input, tutorial, articoli, qualsiasi cosa da leggere per capire come funziona l'aggiunta di luci.
    Steve Austin, Astronaut - A man barely alive . . . Gentlemen, we can rebuild him . . . we have the technology. We have the capability to make the world's first bionic man. Steve Austin will be that man. Better than he was before, Stronger, Faster . .

  2. #2
    Utente di HTML.it L'avatar di nep036
    Registrato dal
    Nov 2003
    Messaggi
    1,453
    La PointLight3D è applicabile agli shadematerials, percui considerando che un MovieMaterial non è uno shadematerial bisogna combinarlo con uno shader creando uno ShadeMaterial:


    var pointLight:PointLight3D = new PointLight3D();


    //Crei il tuo MovieMaterial
    var mioMovieMaterial:MovieAssetMaterial = new MovieAssetMaterial("movie");

    //Crei lo shader
    var mioMovieMaterialShader:PhongShader = new PhongShader(pointLight, 0xFFFFFF,0xFFFFFF, 20, mioMovieMaterial.bitmap);

    //Poi si combinano insieme creando uno shaded material
    var mioMovieShadedMaterial:ShadedMaterial = new ShadedMaterial(mioMovieMaterial, mioMovieMaterialShader);

    Poi non ti rimane che applicare il materiale ai tuoi oggetti...

    Io non l'ho provato, l'ho scritto a livello teorico, dovrebbe funzionare, in ogni caso un po di prove non fanno male


    Ciao

  3. #3
    Ciao e grazie per la risposta chiara e precisa
    finalmente qualcuno che spiega un po' bene ste cose.

    sto provando ora quello che hai scritto ma mi dice che non trova la classe PhongShader anche se ho importato il package.

    come dice qui:
    http://www.flashbookmarks.com/PV3D-E...ongShader.html

    Forse per papervision 2.0a non va....esite un'altra classe simile. boh...
    secondo te?
    Steve Austin, Astronaut - A man barely alive . . . Gentlemen, we can rebuild him . . . we have the technology. We have the capability to make the world's first bionic man. Steve Austin will be that man. Better than he was before, Stronger, Faster . .

  4. #4
    Utente di HTML.it L'avatar di nep036
    Registrato dal
    Nov 2003
    Messaggi
    1,453
    hai

    import org.papervision3d.materials.shaders.PhongShader;

    come percorso?

  5. #5
    Utente di HTML.it L'avatar di nep036
    Registrato dal
    Nov 2003
    Messaggi
    1,453
    La libreria deve essere l'ultima 2.0 great white...

  6. #6

  7. #7
    Sono arrivato al punto in cui come dice nep036 applico il pontlight ad un materiale shade e teoricamente l'ho capito...ma domarlo è dura, non capisco come aumentare o diminuire la luce, e che direzione dargli.

    mannaggia... faccio un'altro pochetto di prove poi posto qualcosa così sarà più chiaro


    grazie a tutti fino ad ora per le risposte
    Steve Austin, Astronaut - A man barely alive . . . Gentlemen, we can rebuild him . . . we have the technology. We have the capability to make the world's first bionic man. Steve Austin will be that man. Better than he was before, Stronger, Faster . .

  8. #8

    eccomi qua...sono a questo punto

    Allora...
    ...capito che biogna prima creare un PhongShader e poi combinare il MovieMaterial con esso per creare il materiale soggetto alla luce.
    e fin qui ora ci sono.

    nel mio test ho un cubo con 6 lati che dovrebbero essere tutti e 6 shadedmaterial object, e una luce.

    problema 1:
    non riesco a assegnare una materialList dove ogni faccia sia un ShadedMaterial, quando lo passo al cubo mi da errore

    problema 2:
    non riesco a domare la luce, vorrei fare una cosa di questo tipo: la luce parte da lontano e quindi il mio cubo resta nell'oscurità poi quando la luce arriva il cubo si illumina e si vede bene... non so nemmeno se questo si può effettivamente fare. ma qui la luce è veramente ridotta, non so se si può giocare sull'intensità della luce dell'hotspot, non so nemmeno se è una luce direzionale o omnidirezionale, e perchè con un parantro pointLight.z = 120; la luce mi va dietro al cubo e me lo illumina comunque mentre se è davanti (es z=-120) non è illuminato (lo capite bene dal sorgente più sotto).

    problema 3:
    la luce influenza il materiale che è lo stesso per i 4 lati quindi quando giro il cubo crea un brutto effetto non realitisco.

    ma forse è meglio postare nel dettaglio tutto quello che ho fatto così è più chiaro:
    questo è il risultato:
    http://www.rossionline.net/tmp/tessere3d/

    e questo è il sorgente:

    codice:
    package  {
    
    	import flash.display.*;
    	import flash.events.*; 
    	import org.papervision3d.materials.*
    	import org.papervision3d.lights.PointLight3D;
    	import org.papervision3d.objects.primitives.Cube;
    	import org.papervision3d.materials.utils.MaterialsList;
    	import org.papervision3d.materials.shaders.PhongShader;
    	import org.papervision3d.materials.shaders.ShadedMaterial;
    	import org.papervision3d.view.BasicView;
    	import caurina.transitions.Tweener;
    	
    	public class Tessere3D extends MovieClip { 
    	   
    		public var viewport:BasicView;
    
    		public var tessera:Cube;
    		
    		private var faceArray:Array = new Array("00.jpg", "01.jpg", "02.jpg", "03.jpg");
    		
    		private var arrFinaleFaccia:Array;
    		
    		private var pagina:Number = 0;
    		
    		private var pointLight:PointLight3D;
    
    		private var listaMateriali:MaterialsList;
    	   
    		//costruttrice
    		public function Tessere3D() {
    			init();
    		}
    		
    		
    		/**/
    		public function init():void {
    			
    			//inizializzo il viewport
    			viewport = new BasicView(900, 600, false, true, "FREECAMERA3D");
    			viewport.camera.zoom = 11;
    			addChild(viewport);
    			
    			// crea luce e la posiziono in prospettiva
    			pointLight= new PointLight3D(true, true);
    			pointLight.z = 120;
    			viewport.scene.addChild(pointLight);
    
    			//carico i jpeg delle facce definiti nell'array;
    			caricaFace(faceArray);
    			
    			//creo il materiale finale
    			creoMateriali(arrFinaleFaccia);
    			
    			tessera = new Cube(listaMateriali, 170, 170, 100, 1, 1, 1);
    			viewport.scene.addChild(tessera);
    			
    			//listener per i 2 pulsanti che girono la tessera
    			avanti_btn.addEventListener(MouseEvent.CLICK, avanti);
    			indietro_btn.addEventListener(MouseEvent.CLICK, indietro);
    			
    			//evento per il rendering della scena
    			addEventListener(Event.ENTER_FRAME, onEnterFrame);
    		}
    	   
    	      
    	   
    		/*Carico le facce e le unisco alla luce creando prima un PhongShader e poi un ShadedMaterial*/
    		private function caricaFace(arr:Array) {
    			
    			arrFinaleFaccia = new Array();
    			
    			for (var i:Number = 0; i < arr.length; i++) {
    				
    				//l'oggetto faccia è un estensione di movieclip (vedere Faccia.as)
    				var tempFace:Faccia = new Faccia(this);
    				tempFace.name = "faccia" + i;
    				tempFace.foto = arr[i];
    				
    				//creo l'oggetto movie material
    				var mm:MovieMaterial = new MovieMaterial(tempFace);
    				mm.smooth = true;
    				mm.animated = true;
    				
    				//prima aggiungo la luce ad un oggetto PhongShader
    				var shader:PhongShader = new PhongShader(pointLight, 0xFFFFFF,0x000000, 100)
    				
    				//poi unisco l'oggetto moviematerial con quello PhongShader
    				var shadedMaterial:ShadedMaterial = new ShadedMaterial(mm, shader);
    				
    				//popolo l'array che mi contiene le facce
    				arrFinaleFaccia.push(shadedMaterial);
    			}
    		   
    		}
    	   
    		/**/
    		private function creoMateriali(arr:Array) {
    
    			var mFacciaVuota:FacciaVuota = new FacciaVuota();
    			var facciaVuota:MovieMaterial = new MovieMaterial(mFacciaVuota);
    			facciaVuota.animated = true;
    
    			// IN TEORIA SAREBBE COSI'!!! MA NON VA!!! MI DA ERRORE?!?
    			/*
    			listaMateriali = new MaterialsList( { front:arr[0], 
    												left:arr[1], 
    												right:arr[2], 
    												top:facciaVuota, 
    												bottom:facciaVuota, 
    												back:arr[3] } );
    			*/										
    			
    			//per fare una prova metto tutti i materiali uguali
    			listaMateriali = new MaterialsList( { all:arr[0] } );
    		}
    	   
    		/**/
    		private function avanti(e:MouseEvent) {
    			pagina++;
    			Tweener.addTween(tessera, { rotationY:(90 * pagina), time:1, transition:"easeInOutBack" } );
    		}
    	   	
    		/**/
    		private function indietro(e:MouseEvent) {
    			pagina--;
    			Tweener.addTween(tessera, { rotationY:(90 * pagina), time:1, transition:"easeInOutBack" } );
    		}
    	   
    		/**/
    		private function movimentoLuce() {
    			var xDist:Number = mouseX - stage.stageWidth * 0.5;
    			var yDist:Number = mouseY - stage.stageHeight * 0.5;
    			pointLight.x -= xDist * 0.005;
    			pointLight.y += yDist * 0.005;
    		}
    	    
    		/**/
    		protected function onEnterFrame( e:Event ):void {
    			movimentoLuce();
    			viewport.singleRender();
    		}
    	}
    }
    per conoscenza posto anche la casse Faccia.as ma non è utile ai fini della discussione (giusto se uno vuol testare)
    codice:
    package {
    	import flash.display.*;
    	import flash.events.*;
    	import flash.system.*;
    	import flash.net.URLRequest;
    	import flash.utils.*;
    	
    	public class Faccia extends MovieClip {
    		
    		private var _foto:String;
    		private var _sessione:String = "img/";
    		private var richiestaJpg:URLRequest;
    		private var loaderJpg:Loader;
    		private var fullImg:Bitmap;
    		private var _fla:MovieClip;
    		
    		public function Faccia(fla:MovieClip) {
    			_fla = fla;
    			init();
    			
    		}
    		
    		
    		
    		/**/
    		private function init() {
    			//
    			this.areaHit_btn.addEventListener(MouseEvent.ROLL_OVER,sopraPulsante);
    			this.areaHit_btn.addEventListener(MouseEvent.ROLL_OUT,fuoriPulsante);
    			this.areaHit_btn.addEventListener(MouseEvent.CLICK, vai);
    			
    		}
    		
    		private function vai(e:MouseEvent) {
    			trace("ok");
    		}
    		
    		private function sopraPulsante(e:MouseEvent) {
    			trace("over");
    		}
    		
    		private function fuoriPulsante(e:MouseEvent) {
    			trace("out");
    		}
    		
    		
    		/**/		
    		private function caricamento() {
    			
    			richiestaJpg = new URLRequest(_sessione + _foto);
    			
    			loaderJpg=new Loader();
    			
    			loaderJpg.contentLoaderInfo.addEventListener(Event.OPEN,iniziaCaricamentoJpg);
    			
    			loaderJpg.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,inCaricamentoJpg);
    			
    			loaderJpg.contentLoaderInfo.addEventListener(Event.COMPLETE, completatoJpg);
    			
    			loaderJpg.load(richiestaJpg);
    			
    			
    		}
    		
    		
    		/**/
    		private function iniziaCaricamentoJpg(e:Event):void {
    			
    			//
    			
    		}
    		
    		
    		/**/
    		private function inCaricamentoJpg(e:ProgressEvent):void {
    			var percentualeBg:uint=(e.bytesLoaded/e.bytesTotal)*100;
    			var avanzamento:Number = 0.95 * percentualeBg;
    		}
    		
    		
    		/**/
    		private function completatoJpg(e:Event):void {
    			fullImg = loaderJpg.content as Bitmap;
    			foto_mc.addChild(fullImg);
    		}
    		
    		
    		// valore del file da caricare;
    		public function set foto(valore:String){
    			_foto = valore;
    			caricamento();
    		}
    		
    		public function get foto():String{
    			return this._foto;
    		}
    		
    	}
    	
    }
    Lascio in allegato lo zip con tutto il lavoro per chi lo vuole testare.
    http://www.rossionline.net/tmp/tessere3d/tessere3d.zip
    Steve Austin, Astronaut - A man barely alive . . . Gentlemen, we can rebuild him . . . we have the technology. We have the capability to make the world's first bionic man. Steve Austin will be that man. Better than he was before, Stronger, Faster . .

  9. #9
    Utente di HTML.it L'avatar di nep036
    Registrato dal
    Nov 2003
    Messaggi
    1,453
    Appena ho un attimo do una occhiata,

    ciao

  10. #10

    ad esempio...

    qui
    http://lab.zupko.info/depthShader/v2/

    ci sono degli oggetti 3d illuminati e si può variare il raggio di luminosità sugli oggetti.
    Mistero per me...
    Steve Austin, Astronaut - A man barely alive . . . Gentlemen, we can rebuild him . . . we have the technology. We have the capability to make the world's first bionic man. Steve Austin will be that man. Better than he was before, Stronger, Faster . .

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.