<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="http://www.esedeerre.com/rss.php" rel="self" type="application/rss+xml" />
		<title><![CDATA[SdR: Tutoriales Flash, Papervision...]]></title>
		<description><![CDATA[Tutoriales y ejemplos de Flash, Actionscript 3.0 y 2.0, Papervision3D, Away3D]]></description>
		<language>es</language>
		<link>http://www.esedeerre.com</link>
				<item><title><![CDATA[Experimentos con ThreeJS y Kinect]]></title><description><![CDATA[<p><ul class="listado_imagenes">
	<li><a href="http://www.esedeerre.com/ejemplos/threejs/experimientos/kinect_dots.html" target="_blank"><img alt="ThreeJS y Kinect ParticleSystem" src="http://www.esedeerre.com/ejemplos/experimentos/resumen_kinect/dots.jpg"/></a></li>
	<li><a href="http://www.esedeerre.com/ejemplos/threejs/experimientos/kinect_lines.html" target="_blank"><img  alt="ThreeJS y Kinect Lines" src="http://www.esedeerre.com/ejemplos/experimentos/resumen_kinect/lines.jpg"/></a></li>
	<li><a href="http://www.esedeerre.com/ejemplos/threejs/experimientos/kinect_ribbons.html" target="_blank"><img  alt="ThreeJS y Kinect Ribbons" src="http://www.esedeerre.com/ejemplos/experimentos/resumen_kinect/ribbons.jpg"/></a></li>
</ul>
<div style="clear: both;"></div>
<p>Este post es un resumen de tres experimentos que hicimos hace unos meses con <b>TheeJS</b> e información capturada con un Kinect.</p>
</p>La parte de kinect la hicimos en Processing, con la libreria <a class="referencia" href="https://code.google.com/p/simple-openni/" target="_blank">SimpleOpenNI</a> para kinect. Con ella guardamos un archivo en formato .ply, que guarda las coordenadas x,y,z y color (canales r,g,b y alpha) de cada punto capturado por la cámara.Algo tipo:</p>
<p>
<code lang="xml">
-72.922615 287.8525 1105.0 177 187 177 1
-67.8342 290.718 1116.0 169 165 160 1
-86.35575 285.93344 1105.0 159 150 174 1
</code>
</p>
<p>Los ejemplos muestran la visualización de este archivo en <b>ThreeJS</b>, utilizando lineas, puntos o ribbons. Podéis verlo en movimiento haciendo click en cada imagen.</p></p>]]></description><link><![CDATA[http://www.esedeerre.com/ejemplo/20/195/experimentos-con-threejs-y-kinect]]></link><guid><![CDATA[http://www.esedeerre.com/ejemplo/20/195/experimentos-con-threejs-y-kinect]]></guid></item><item><title><![CDATA[Generar terrenos con Perlin Noise y ThreejS]]></title><br />
<b>Deprecated</b>:  Function split() is deprecated in <b>/home/km100runner/esedeerre.com/rss.php</b> on line <b>53</b><br />
<description><![CDATA[<p><p></p><img src='http://www.esedeerre.com/ejemplos/threejs/experimentos/terrain_miniatura_th.jpg' title='Generar terrenos con Perlin Noise y ThreejS' . alt='Generar terrenos con Perlin Noise y ThreejS'/></p><p><a href="http://www.esedeerre.com/ejemplos/threejs/experimentos/noise.html" target="_blank" class="ver_ejemplo">Ver ejemplo en movimiento</a></p>
<p>Este ejemplo consiste en generar un terreno en 3 dimensiones con <a href="http://mrdoob.github.com/three.js/" target="_blank" class="referencia">ThreeJS</a> a partir de una imagen generada con Perlin Noise. El Perlin Noise es una función matemática que utiliza gradientes precalculados para generar valores pseudoaleatorios que pueden generar a su vez (por ejemplo) imágenes. Por ejemplo, un par de imágenes generadas a partir de Perlin Noise:</p>
<p class="articulo_imagen"><img src="http://www.esedeerre.com/ejemplos/threejs/experimentos/ejemplos_noise.jpg" alt="Ejemplo de Perlin Noise"/></p>
<p>Como se puede ver en la imagen, el Perlin Noise genera imágenes con apariencia aleatoria, pero con cambios de color progresivos entre pixel. Es decir, no vemos un pixel negro junto a uno blanco, sino que los pixels aparecen "difuminados", sin cambios de color bruscos entre ellos.</p>
<p>En este ejemplo he utilizado la libería <a href="https://github.com/hapticdata/toxiclibsjs" target="_blank" class="referencia">ToxicLibsJS</a>, que tiene un módulo para generar imágenes con Perlin Noise. Al crear la imagen, almaceno el valor de color de cada pixel generado en una matriz para utilizarlo posteriormente. Después creo un plano con tantos vértices como pixels tiene la imagen. Como la imagen es de 200x200 pixels, necesito un plano de 200x200 vértices. Viendo la estructura de un plano: </p>
<p class="articulo_imagen"><img src="http://www.esedeerre.com/ejemplos/threejs/experimentos/threejs_plano.jpg" alt="ThreeJS Plano"/></p>
<p>Vemos que por ejemplo un plano de 3x3 segmentos tiene 4x4 vértices, es decir, un plano de nxn vértices tendrá (n-1)x(n-1) segmentos (el tercer y cuarto parámetro del constructor de un plano en ThreeJS son los segmentos de ancho y de alto), por lo que generamos nuestro plano con:</p>
<code lag="javascript>">plano_suelo_general = new THREE.PlaneGeometry(1000,1000,lado-1,lado-1);</code>
<p>Hecho esto, recorremos la matriz de vértices y colocamos cada uno en una altura proporcional al color del pixel que le corresponde(en color hexadecimal, el blanco sería 0, y el negro 1)</p>
<code lag="javascript>">
for(var i = 0; i < puntos_noise.length; i++) {
	plano_suelo_general.vertices[i].z = Math.max(0,altura * puntos_noise[i]/20);
}
</code>
<p>Y ya está! a partir de aquí podemos hacer lo que queramos con el terreno generado. En este caso yo he dejado fija la cámara y giro el terreno para generar la sensación de movimiento, y he añadido unos sliders (con <a href="http://www.bit-101.com/blog/?p=3359" target="_blank" class="referencia">MinimalCompsJS</a>) para hacer modificaciones sobre el terreno. El código del ejemplo está comentado, cualquier duda, comentario o propuesta la podéis hacer en los comentarios del post. </p></p>]]></description><link><![CDATA[http://www.esedeerre.com/ejemplo/22/194/generar-terrenos-con-perlin-noise-y-threejs]]></link><guid><![CDATA[http://www.esedeerre.com/ejemplo/22/194/generar-terrenos-con-perlin-noise-y-threejs]]></guid></item><item><title><![CDATA[Compatibilidad de ThreeJS con navegadores]]></title><description><![CDATA[<p><p>ThreeJS puede renderizar de dos modos: <strong>canvas</strong> y <strong>WebGL</strong>. El rendimiento de <strong>WebGL</strong> es muy superior, pero canvas tiene la ventaja de que está soportado en la mayoria de navegadores, incluidos los móbiles. </p>
<p>En la página <a href="http://caniuse.com/">http://caniuse.com</a> podemos ver el soporte de los distintos navegadores para desktop y mobile de la etiqueta <strong>canvas</strong>: </p>
<p><img src="http://www.esedeerre.com/ejemplos/threejs/ejemplos/canvas-compatibilidad.jpg" width="700" height="473" alt="Compatibilidad Canvas" /></p>
<p></p>
<p>Como se puede ver esta etiqueta está soportada por la mayoria de navegadores, incluso por los de móvil. En el caso de Internet Explorer 7 y 8, no son compatibles con esta etiqueta, pero existe la posibilidad de utilizar la libreria <a target="_blank"  class="enlace" href="http://code.google.com/p/explorercanvas/">http://code.google.com/p/explorercanvas/</a> para que el contenido se visualice en estos navegadores. </p>
<p>En el caso de <strong>WebGL</strong> tenemos la siguiente tabla de compatibilidades: </p>
<p><img src="http://www.esedeerre.com/ejemplos/threejs/ejemplos/webgl-compatibilidad.jpg" width="700" height="477" alt="Compatibilidades WebGL" /></p>
<p>El soporte total se limita a Chrome en escritorio, aunque la mayoria de cosas funcionan también en Firefox y Opera. En Mobile hay compatibilidad en Firefox para Android, aunque el rendimiento es bastante pobre (un cubo rotando en un Samsung galaxy S3 se mueve a 20fps).</p>
<p>Para IE hay una opción llamada <a class="enlace" target="_blank" href="http://iewebgl.com/">http://iewebgl.com/</a> que permite instalar un plugin para el navegador y poder visualizar asi contenido WebGL en Explorer, pero esta instalación hay que realizarla en cada dispositivo. </p></p>]]></description><link><![CDATA[http://www.esedeerre.com/ejemplo/22/193/compatibilidad-de-threejs-con-navegadores]]></link><guid><![CDATA[http://www.esedeerre.com/ejemplo/22/193/compatibilidad-de-threejs-con-navegadores]]></guid></item><item><title><![CDATA[Hola Mundo en ThreeJS]]></title><br />
<b>Deprecated</b>:  Function split() is deprecated in <b>/home/km100runner/esedeerre.com/rss.php</b> on line <b>53</b><br />
<description><![CDATA[<p><p></p><img src='http://www.esedeerre.com/ejemplos/threejs/ejemplos/threejs-hola-mundo.jpg' title='Hola Mundo en ThreeJS' . alt='Hola Mundo en ThreeJS'/></p><p>Este ejemplo de ThreeJS va a ser el primero de una serie sobre esta librería. ThreeJS es un motor de 3D para Javascript, "parecido" a Papervision o Away3D para Actionscript. </p>

<p>Podéis bajar ThreeJS de aquí: <a class="enlace" target="_blank" href="http://mrdoob.github.com/three.js/">THREEJS</a></P>

<P>Dentro de la descarga de ThreeJS viene una carpeta de ejemplos y varios JS adjuntos, como el Detector.js (para ver capacidades del navegador y mostrar mensajes en caso de que alguna funcionalidad no esté disponible).</p> 

<p>En este primer ejemplo veremos cual es la estructura básica de una escena 3D y creamos un cubo. </p>

<p>Podéis ver el ejemplo en movimiento en el siguiente enlace:</p>
<p><a class="enlace" target="_blank" href="http://www.esedeerre.com/ejemplos/threejs/ejemplos/hola_mundo.html">VER EJEMPLO EN MOVIMIENTO</a></p>
<P> y el código comentado tras el salto.</p></p>]]></description><link><![CDATA[http://www.esedeerre.com/ejemplo/22/192/hola-mundo-en-threejs]]></link><guid><![CDATA[http://www.esedeerre.com/ejemplo/22/192/hola-mundo-en-threejs]]></guid></item><item><title><![CDATA[Geolocalización por Javascript sobre Google Maps]]></title><br />
<b>Deprecated</b>:  Function split() is deprecated in <b>/home/km100runner/esedeerre.com/rss.php</b> on line <b>53</b><br />
<description><![CDATA[<p><p></p><img src='http://www.esedeerre.com/ejemplos/js/googlemaps/geolocation.jpg' title='GeolocalizaciÃ³n por Javascript sobre Google Maps' . alt='GeolocalizaciÃ³n por Javascript sobre Google Maps'/></p>    <p>La API de geolocalización de Javascript permite obtener la geoposición del usuario. Este ejemplo muestra como obtener la posición (latitud y longitud) del usuario y posicionarla sobre un mapa de GoogleMaps.</p>
    <p>Algunas cosas a tener en cuenta a la hora de utilizar esta API son:</p>
    <ul>
        <li>La geolocalización es compatible con la mayoría de navegadores modernos, tanto de mobile como de escritorio. Los casos mas "problemáticos" de incompatibilidad pueden ser IE8 e inferiores, y Opera Mini</li>
        <li>La precisión de este método depende del navegador/dispositivo. Por ejemplo Chrome utiliza los Google Location Services e Internet Explorer los Microsoft Locacion Service, por lo que los resultados pueden variar en un mismo dispositivo de un navegador a otro.</li>
        <li>Cuando se llama al método getCurrentPosition el navegador mostrará una ventana al usuario solicitando permiso para obtener su posición.</li>
    </ul>
    <p>Algunos enlaces de interes:</p>
    <ul>
        <li><a href="http://dev.w3.org/geo/api/spec-source.html" target="_blank">Especificación W3C de la API de geolocalización</a></li>
        <li><a href="https://developer.mozilla.org/en/Using_geolocation" target="_blank">Artículo de Mozilla</a></li>
        <li><a href="http://www.andygup.net/?p=600">Precisión y funcionamiento de la API de geolocalización</a></li>
        <li><a href="http://caniuse.com/#feat=geolocation">Compatibilidad con navegadores</a></li>
    </ul>
    <p class="ver_ejemplo"><a href="http://www.esedeerre.com/ejemplos/js/googlemaps/mapa.html" class="ver_ejemplo" target="_blank">Ejemplo en Movimiento</a></p>
    <p>El código comentado:</p></p>]]></description><link><![CDATA[http://www.esedeerre.com/ejemplo/20/191/geolocalizacion-por-javascript-sobre-google-maps]]></link><guid><![CDATA[http://www.esedeerre.com/ejemplo/20/191/geolocalizacion-por-javascript-sobre-google-maps]]></guid></item><item><title><![CDATA[MonsterDebugger: herramienta de depuración para Actionscript 3.0]]></title><br />
<b>Deprecated</b>:  Function split() is deprecated in <b>/home/km100runner/esedeerre.com/rss.php</b> on line <b>53</b><br />
<description><![CDATA[<p><p></p><img src='http://www.esedeerre.com/ejemplos/librerias/monsterdebugger/monster_debugger.jpg' title='MonsterDebugger: herramienta de depuraciÃ³n para Actionscript 3.0' . alt='MonsterDebugger: herramienta de depuraciÃ³n para Actionscript 3.0'/></p><p><strong>Monster Debugger</strong> es un depurador open source para Adobe Flash, Flex y Air.</p>
<p>Como introduccíón para uso, la gente de De Monsters ha preparado un juego que tenemos que completar modificando variables y accediendo a métodos. </p>
<p>Lo mejor es verlo, podéis descargaros la líbreria y jugar, aquí:</p>
<p><a href="http://demonsterdebugger.com/game" title="Descarga del MonsterDebugger" target="_blank" class="referencia">http://demonsterdebugger.com/game</a></p></p>]]></description><link><![CDATA[http://www.esedeerre.com/ejemplo/13/190/monsterdebugger-herramienta-de-depuracion-para-actionscript-30]]></link><guid><![CDATA[http://www.esedeerre.com/ejemplo/13/190/monsterdebugger-herramienta-de-depuracion-para-actionscript-30]]></guid></item><item><title><![CDATA[Modificar valores de una imagen con la clase AdjustColor]]></title><br />
<b>Deprecated</b>:  Function split() is deprecated in <b>/home/km100runner/esedeerre.com/rss.php</b> on line <b>53</b><br />
<description><![CDATA[<p><p></p><img src='http://www.esedeerre.com/ejemplos/as3/brillo_imagen/modificar_foto.jpg' title='Modificar valores de una imagen con la clase AdjustColor' . alt='Modificar valores de una imagen con la clase AdjustColor'/></p><p>Las clase <strong>AdjustColor</strong> permite crear un filtro para modificar las propiedades brillo, contraste, matiz y saturación de cualquier elemento de visualización. Esto nos permite, por ejemplo, pasar una imagen a blanco y negro (poniendo la saturación al mínimo(-100)) o ajustar los colores de una foto. 
</p>
<p>La clase <strong>AdjustColor</strong> está disponible para Flash Player 9 o superior.</p>
<p>El código comentado y los fuentes a continuación:</p></p>]]></description><link><![CDATA[http://www.esedeerre.com/ejemplo/4/189/modificar-valores-de-una-imagen-con-la-clase-adjustcolor]]></link><guid><![CDATA[http://www.esedeerre.com/ejemplo/4/189/modificar-valores-de-una-imagen-con-la-clase-adjustcolor]]></guid></item><item><title><![CDATA[¿Qué es Stage3D y para qué sirve?]]></title><description><![CDATA[<p><p>La versión 11 del player incluye, entre otras novedades, las APIs para aceleración GPU lanzadas en su día bajo el nombre de &quot;<strong>Molehill</strong>&quot; (ahora Stage3D). Dicho de forma muy resumida, estas APIs permiten al player el acceso a la GPU (unidad de procesamiento gráfico), que es mucho mas rápida que la CPU (unidad central de procesamiento). Por poner un ejemplo práctico, con los motores 3D hechos para Flash Player 10 (<strong>Papervision3D</strong>, <strong>Away3D 3.x</strong> o <strong>Alternativa3D 7</strong>), el límite de polígonos en una escena estaba en unos 10.000 (y ya iba la cosa regular), mientras que con estas nuevas librerias, podemos tener en escena cientos de miles de polígonos con un rendimiento superior (en la wiki de <strong>Alternativa</strong> hablan de 3 millones de polígonos). </p>
<p>Aunque estas APIs están disponibles para cualquier persona, al ser de muy bajo nivel lo mas probable es que a no ser que queramos programar algo muy específico nos sea mas cómodo utilizar alguna de las librerías que hay ahora mismo en desarrollo y que traducen estas instrucciones a &quot;lenguaje humano&quot;. </p>
<p>Algunas de las librerías que ya hacen uso de <strong>Stage3D</strong> son:</p>
<p>-<a href="http://alternativaplatform.com/en/" title="Alternativa 3D 8" target="_blank">Alternativa3D (a partir de la versión 8)</a></p>
<p><a href="http://away3d.com/" title="Away3D 4" target="_blank">-Away3D (a partir de la versión 4)</a></p>
<p><a href="http://www.flare3d.com/" title="Flare 3D" target="_blank">-Flare3D</a></p>
<p>Otros enlaces de ayuda sobre <strong>Flash Player 11</strong> y <strong>Stage3D</strong> son:</p>
<p><a href="http://www.adobe.com/devnet/flashplayer/stage3d.html" title="Flash Player Developer Center" target="_blank">-Flash Player Developer Center - Stage 3D</a></p>
<p><a href="http://tv.adobe.com/watch/max-2011-envision/flash-player-11-and-adobe-air-3-changing-the-game/" title="Adobe Max 2011" target="_blank">-Adobe Max 2011: Flash Player 11 and Adobe Air 3: Changing the game</a></p>
<p><a href="http://www.bytearray.org/?p=3561" title="Stage3D Molehill" target="_blank">-Stage3D (Molehill): The History</a></p></p>]]></description><link><![CDATA[http://www.esedeerre.com/ejemplo/21/188/que-es-stage3d-y-para-que-sirve]]></link><guid><![CDATA[http://www.esedeerre.com/ejemplo/21/188/que-es-stage3d-y-para-que-sirve]]></guid></item><item><title><![CDATA[Obtener coordenadas de un punto en Google Maps]]></title><br />
<b>Deprecated</b>:  Function split() is deprecated in <b>/home/km100runner/esedeerre.com/rss.php</b> on line <b>53</b><br />
<description><![CDATA[<p><p></p><img src='http://www.esedeerre.com/ejemplos/html5/gmaps/gmaps.jpg' title='Obtener coordenadas de un punto en Google Maps' . alt='Obtener coordenadas de un punto en Google Maps'/></p><p>Este truco sirve para cuando necesitamos obtener las coordenadas de un punto en <strong>Google Maps</strong> (por ejemplo para utilizarlas luego para mostrar ese mismo punto en un mapa que montemos nosotros en <strong>Flash</strong> con la <strong>API</strong> de <strong>Google</strong>). Para obtener estas coordenadas basta con que busquemos la dirección que queramos en <strong>Google Maps</strong> y después, en la barra de dirección pongamos esta linea de <strong>javascript</strong>:
</p>
<p><code lang="javascript">javascript:void(prompt('',gApplication.getMap().getCenter()));</code>
  
</p>
<p>Pulsamos intro, y nos saltará una ventana con las dos coordenadas del punto que hemos buscado. </p></p>]]></description><link><![CDATA[http://www.esedeerre.com/ejemplo/20/187/obtener-coordenadas-de-un-punto-en-google-maps]]></link><guid><![CDATA[http://www.esedeerre.com/ejemplo/20/187/obtener-coordenadas-de-un-punto-en-google-maps]]></guid></item><item><title><![CDATA[Away3D 4 : Editor de clicks]]></title><br />
<b>Deprecated</b>:  Function split() is deprecated in <b>/home/km100runner/esedeerre.com/rss.php</b> on line <b>53</b><br />
<description><![CDATA[<p><p></p><img src='http://www.esedeerre.com/ejemplos/experimentos/away3d4/clicks001/captura.jpg' title='Away3D 4 : Editor de clicks' . alt='Away3D 4 : Editor de clicks'/></p><p>Ya queda poco para que salga la versión beta de Away3D 4, mientras tanto he estado haciendo pruebas con las últimas actualizaciones y ha salido esto. En cuanto esté en beta publico los fuentes. </p>
<p>Para poder ver esta demo hay que tener instalado FP11.</p>
<p><a href="http://www.esedeerre.com/ejemplos/experimentos/alternativa3d8/clicks_editor/v001/index.html" target="_blank" class="referencia">VER DEMO</a></p>]]></description><link><![CDATA[http://www.esedeerre.com/ejemplo/6/186/away3d-4-editor-de-clicks]]></link><guid><![CDATA[http://www.esedeerre.com/ejemplo/6/186/away3d-4-editor-de-clicks]]></guid></item>	
	</channel>
</rss>