Archivo de la categoría: PaperVision3D

Embed 3D Modelo con PV3D

¿Que es Embed y como usarlo?
Embed: En traducción de ingles quiere decir “incrustar”, real mente es lo que hace al pie de la letra al compilar nuestro archivo SWF.
Que tipo de archivos podemos incluir o incrustar? Bien real mente cualquier archivo o formato empezando desde Fonts hasta mp3, Video, Xml o otro tipos de datos…

Ejemplo de uso manera 1:
… esta manera seria la mas correcta, esta opción es mas usada en Flex ya que si se usaría la manera nº2 os saldría error al compilar.
Archivo “EmbedObj.as”

package
{
	import flash.utils.ByteArray;
	
	//en la variable source asignamos la ruta hasta nuestro modelo 3D
	[Embed(source="3Dobj.DAE", mimeType="application/octet-stream")]
	
	public class EmbedObj extends ByteArray
	{	
		public function EmbedObj():void
		{
			return;
		}
	}
}

Archivo “embed.as”

package {
	
	import flash.events.*;
	import flash.utils.ByteArray;
	
	import org.papervision3d.objects.parsers.DAE;
	import org.papervision3d.view.BasicView;
	
	//Configuración de nuestro SWF desde Clase AS3
	[SWF(width="500", height="400", backgroundColor="#ffffff", frameRate="60")]
	
	public class embed extends BasicView
	{
		//declaramos las variables
		private var collada:DAE;
		private var modelo:EmbedObj;
		
		public function embed():void
		{
			addEventListener(Event.ADDED_TO_STAGE, dm211_initStage);
			//____________________________________________________SET DEBUG CAMERA
			//interrumpimos el arranque básico de la clase BasicView y la reemplazamos con estos parámetros                         
			super(stage.stageWidth, stage.stageHeight, true, true, "Debug");
		}
		
		private function dm211_initStage(event:Event):void{
			removeEventListener(Event.ADDED_TO_STAGE, dm211_initStage); 
			//____________________________________________________COLLADA CALL
			//invocamos nuestro modelo 3D
			var _loc:ByteArray = new EmbedObj();
			collada = new DAE( false );
			//cargamos el contenido Embed		
			collada.load( _loc );	
			//añadimos el elemento en el Stage
			scene.addChild( collada );
			//____________________________________________________START RENDERING
			startRendering();
		}
	}
}

Resultado:[swf]/wp-content/uploads/2009/11/embed_m1.swf, 550, 400 [/swf]

Ejemplo de uso manera 2:
Aquí asignamos directamente la clase al Embed, en vez de crear un archivo para ello.
Archivo “embed.as”

package {
	
	import flash.events.*;
	import flash.utils.ByteArray;
	
	import org.papervision3d.objects.parsers.DAE;
	import org.papervision3d.view.BasicView;
	
	//Configuración de nuestro SWF desde Clase AS3
	[SWF(width="500", height="400", backgroundColor="#ffffff", frameRate="60")]
	
	public class embed extends BasicView
	{
		//declaramos las variables
		private var collada:DAE;
		
		//incluimos el Embed y le asignamos una Clase
		[Embed(source="3Dobj.DAE", mimeType="application/octet-stream")]
		private var modelo:Class;
		
		public function embed():void
		{
			addEventListener(Event.ADDED_TO_STAGE, dm211_initStage);
			//____________________________________________________SET DEBUG CAMERA
			//interrumpimos el arranque básico de la clase BasicView y la reemplazamos con estos parámetros                         
			super(stage.stageWidth, stage.stageHeight, true, true, "Debug");
		}
		
		private function dm211_initStage(event:Event):void{
			removeEventListener(Event.ADDED_TO_STAGE, dm211_initStage); 
			//____________________________________________________COLLADA CALL
			//invocamos nuestro modelo 3D y cargamos la clase como ByteArray
			var _loc:ByteArray = new modelo() as ByteArray;
			collada = new DAE( false );
			//cargamos el contenido Embed		
			collada.load( _loc );	
			//añadimos el elemento en el Stage
			scene.addChild( collada );
			//____________________________________________________START RENDERING
			startRendering();
		}
	}
}

Resultado:[swf]/wp-content/uploads/2009/11/embed_m2.swf, 550, 400 [/swf]

Conclusión: Gracias a Embed podemos incluir datos que no aparecerán con Decompiler, aunque el archivo final pese algo mas…

FL10 2D vs. PV3D (Primer Test)

Después de que el Mr. Doob y Román Cortés han publicado el Código Abierto de su proyecto. Que básicamente se trata de renderizar pixel a pixel las coordenadas X,Y y Z en entorno Flash.

Direcciones de interes:
http://mrdoob.com/blog/post/571
http://www.romancortes.com/blog/voxel-head-in-flash/
http://mrdoob.com/79/Voxel_Head

He decidido seguir el experimento. Para ello he creado un simple código para convertir el archivo .v con compression “Zlib” a simple tabla de coordenadas sin ninguna compresión.

v2csv

Descargar Air Converter c2csv, Descargar Proyecto comprimido en Zip

Después de la conversión de archivos toca representar los resultados obtenidos. He usado misma Tecnologia “Flash”  pero con ligera molificación en código, ya que en el proyecto Voxel_Head el Mr. Doob ha usado cálculos matemáticos para obtener el radio de una esfera imaginatoria, y luego ha colocado los pixels correspondientes alrededor de ella. Mi código interpreta las coordenadas directamente en el espacio 3D gracias al componente PaperVison3D. Final mente he obtenido un resultados algo penoso. Ya que con las mismas condiciones que el Voxel_Head, solo he conseguido renderizar con una media de 5fps – 7fps.

vox_test_pv3d_v0001_3
vox_test_pv3d_v0001_2
vox_test_pv3d_v0001_1
Descargar Proyecto en Zip

Vox (PV3D Pixel3D – Processing)

Hace ya un tiempo se han publicado los Archivos Open Source del proyecto del video clip RADIOHEAD House o_f Cards que fue realizado con herramientas Open Source como Lenguaje

Processing es un lenguaje y entorno de programación de código abierto basado en Java, de fácil utilización, y que sirve como medio para la enseñanza y producción de proyectos multimedia e interactivos de diseño digital. Fue iniciado por Ben Fry y Casey Reas a partir de reflexiones en el Aesthetics and Computation Group del MIT Media Lab.

Processing es desarrollado por artistas y diseñadores como una herramienta alternativa al software propietario. Puede ser utilizado tanto para aplicaciones locales así como aplicaciones para la web (Applets).

Al estar basado en Java, puede heredar todas sus funcionalidades, convirtiéndose en una herramienta poderosa a la hora de encarar proyectos complejos.

El ví­deo clip fue grabado con unas cameras y sensores especiales que emiten y vuelven a captar ultrasonido, registrando todo su alrededor. Si nos descargamos los archivos zip de la página nos encontramos con unos dos-mil archivos de texto (.csv). Bien cada archivos corresponde a un fotograma que se reproduce a unos (30 fps). Dentro de cada archivo encontramos unos números separados por comas, cada número corresponde a coordenadas X,Y,Z y Intensidad de cada Pixel que final mente forma una imagen en entorno 3D.

Una vez interpretado todos los coordenadas aparece una imágen como acontinuación…

[SWF]/wp-content/uploads/2009/08/vox.swf, 400, 400[/SWF]

El proyecto se ha elaborado con Tecnologia Flash Action Script 3 (AS3) y con PaperVision3D que me servio como entorno 3D para interpretar coordenadas 3D.

Seguir leyendo Vox (PV3D Pixel3D – Processing)