<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://labloguera.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>XNACommunity Blog</title><link>http://labloguera.net/blogs/xnacommunity/default.aspx</link><description>XNAndo todo lo XNAble</description><dc:language /><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Reflexiones en tiempo real con cubemaps</title><link>http://labloguera.net/blogs/xnacommunity/archive/2009/12/31/reflexiones-en-tiempo-real-con-cubemaps.aspx</link><pubDate>Thu, 31 Dec 2009 12:58:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:105080</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>1</slash:comments><comments>http://labloguera.net/blogs/xnacommunity/comments/105080.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/xnacommunity/commentrss.aspx?PostID=105080</wfw:commentRss><description>&lt;P&gt;Hola a tod@s,&lt;/P&gt;
&lt;P&gt;para terminar el año, Rodrigo Díaz Tajada nos deja un ejemplo en XNACommunity sobre reflexiones y refracciones de superficies.&lt;/P&gt;
&lt;P&gt;Os dejo a continuación la descripción del ejemplo y el enlace para la descarga:&lt;/P&gt;
&lt;P&gt;Un ejemplo para simular la reflexión y refracción de superficies mediante el uso de cubemaps. La demo permite seleccionar entre cubemap estático (generado al inicio de la aplicación) y cubemap dinámico (regenerado a cada frame). Además, se puede alternar entre un efecto de reflexión y de refracción.&lt;BR&gt;&lt;BR&gt;Controles: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Arrastrar con el botón izquierdo: rotar cámara. 
&lt;LI&gt;Arrastrar con el botón derecho: mover cámara. 
&lt;LI&gt;Tecla 1: Seleccionar cubemap estático. 
&lt;LI&gt;Tecla 2: Seleccionar cubemap dinámico. 
&lt;LI&gt;Tecla 3: Seleccionar reflexión. 
&lt;LI&gt;Tecla 4: Seleccionar refracción.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;En enlace de descarga lo podeis encontrar &lt;A href="http://xnacommunity.codeplex.com/wikipage?title=Reflexiones%20en%20tiempo%20real&amp;amp;referringTitle=Home" target=_blank&gt;aquí&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Saludetes y ¡¡ Feliz Año Nuevo!! &lt;img src="http://labloguera.net/emoticons/emotion-11.gif" alt="Cool" /&gt;&lt;/P&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=105080" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/noticias/default.aspx">noticias</category><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/xna/default.aspx">xna</category><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/XNACommunity/default.aspx">XNACommunity</category></item><item><title>XNA Skin Model View, visualizador de modelos 3D</title><link>http://labloguera.net/blogs/xnacommunity/archive/2009/12/28/xna-skin-model-view-visualizador-de-modelos-3d.aspx</link><pubDate>Mon, 28 Dec 2009 20:30:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:105058</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>1</slash:comments><comments>http://labloguera.net/blogs/xnacommunity/comments/105058.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/xnacommunity/commentrss.aspx?PostID=105058</wfw:commentRss><description>
&lt;p&gt;Hola a tod@s,&lt;/p&gt;
&lt;p&gt;hoy Tyler Gasve nos deja en XNACommunity un visualizador de modelos 3D. A continuación os dejo la descripción que el mismo a dejado escrita, junto con un video de la aplicación y los enlaces de descarga:&lt;/p&gt;
&lt;p&gt;"Visualizador de modelos 3D (.x y .fbx) permitiendo mostrar y listar sus mesh, bones y animaciones.&lt;br&gt;Los
modelos cargados pueden ser rotados, escalados y trasladados en su eje
-Y-, las animaciones ralentizadas, aceleradas y pausadas.&lt;br&gt;XNA Skin
Model View genera los archivos .xnb en tiempo de ejecución utilizando
para ello un Build, requiere para ello de Visual Studio y XNA
instalados.&lt;br&gt;&lt;br&gt;Una parte importante del código de XNA Skin Model View se extrajo de:&lt;br&gt;&lt;a href="http://creators.xna.com/en-US/tutorial/skinnedmodelextensions" class="externalLink"&gt;http://creators.xna.com/en-US/tutorial/skinnedmodelextensions&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br&gt;&lt;a href="http://creators.xna.com/en-US/sample/winforms_series2" class="externalLink"&gt;http://creators.xna.com/en-US/sample/winforms_series2&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;No
todos los archivos .x/.fbx con animaciones van a funcionar
correctamente en la aplicación, esta tiene las mismas limitaciones que
el Content Pipeline Skinned Model original. Para probar su
funcionamiento se acompaña a la aplicación de unos modelos animados
"Skinned Model", en particular "fox anim skin", al que me entretuve a
generar unas cutre animaciones desde cero y añadirle un par de mesh
asociados a un bone para probar la correcta exportación desde 3DSMax
(kwxport-1.4.4). "&lt;/p&gt;
&lt;p&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/VAegZQOGGe0&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en_US&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/VAegZQOGGe0&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en_US&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" width="425" height="344"&gt;&lt;/object&gt;&lt;/p&gt;
&lt;p&gt;Los enlaces de descarga los teneis &lt;a href="http://xnacommunity.codeplex.com/wikipage?title=XNASkinModelView&amp;amp;referringTitle=Home" target="_blank"&gt;aquí&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Saludetes&lt;img src="http://labloguera.net/emoticons/emotion-11.gif" alt="Cool" /&gt; &lt;br&gt;&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=105058" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/noticias/default.aspx">noticias</category><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/XNACommunity/default.aspx">XNACommunity</category></item><item><title>OpenCV y XNA</title><link>http://labloguera.net/blogs/xnacommunity/archive/2009/11/28/opencv-y-xna.aspx</link><pubDate>Sat, 28 Nov 2009 16:37:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:100500</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>1</slash:comments><comments>http://labloguera.net/blogs/xnacommunity/comments/100500.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/xnacommunity/commentrss.aspx?PostID=100500</wfw:commentRss><description>&lt;p&gt;Hola a tod@s,&lt;/p&gt;

&lt;p&gt;hoy desde &lt;a href="http://xnacommunity.codeplex.com/" target="_blank"&gt;XNACommunity&lt;/a&gt; os traigo tres proyectos realmente interesantes. Se trata de mezclar una librería de detección de movimiento como es OpenCV y XNA.&lt;/p&gt;

&lt;p&gt;Lo primero de todo ¿que es OpenCV exactamente? pues es una biblioteca libre de visión artificial originalmente desarrollada por &lt;a href="http://es.wikipedia.org/wiki/Intel_Corporation" title="Intel Corporation"&gt;Intel&lt;/a&gt;.
Desde que apareció su primera versión alfa en el mes de enero de 1999,
se ha utilizado en infinidad de aplicaciones. Desde sistemas de
seguridad con detección de movimiento, hasta aplicativos de control de
procesos donde se requiere reconocimiento de objetos. Esto se debe a
que su publicación se da bajo licencia &lt;a href="http://es.wikipedia.org/wiki/BSD" title="BSD" class="mw-redirect"&gt;BSD&lt;/a&gt;, que permite que sea usada libremente para propósitos comerciales y de investigación con las condiciones en ella expresadas.
&lt;/p&gt;

&lt;p&gt;Open CV es multiplataforma, Existiendo versiones para &lt;a href="http://es.wikipedia.org/wiki/Linux" title="Linux" class="mw-redirect"&gt;Linux&lt;/a&gt;, &lt;a href="http://es.wikipedia.org/wiki/Mac_OS_X" title="Mac OS X"&gt;Mac OS X&lt;/a&gt; y &lt;a href="http://es.wikipedia.org/wiki/Microsoft_Windows" title="Microsoft Windows"&gt;Windows&lt;/a&gt;. Contiene mas de 500 funciones que abarcan una gran gama de areas en el proceso de Visión, como reconocimiento de objetos (&lt;a href="http://es.wikipedia.org/w/index.php?title=Reconocimiento_facial&amp;amp;action=edit&amp;amp;redlink=1" class="new" title="Reconocimiento facial (aún no redactado)"&gt;reconocimiento facial&lt;/a&gt;), calibración de camaras, vision estereo y visión robótica.&lt;/p&gt;

&lt;p&gt;
Como metas el proyecto pretende proveer un "Tool-Kit" o Marco de
desarrollo fácil de utilizar y altamente eficiente. Esto se ha logrado,
realizando su programación en código c y c++ optimizados, aprovechando
además las capacidades que proveen los procesadores multi nucleo. Open
CV puede además utilizar el sistema las Primitivas de Rendimiento
Integradas de Intel. Que es un conjunto de rutinas de bajo nivel
especìficas para procesadores Intel. (Sacado de la wikipedia).&lt;/p&gt;

&lt;p&gt;Bien, pues entre Javier Cantón que realizó el primer proyecto de ejemplo y Jesús Bosh que por lo que veo le está sacando rendimiento y aumentando los ejemplos con OpenCV han colgado sus respectivos proyectos en esta nuestra comunidad, &lt;a href="http://xnacommunity.codeplex.com/" target="_blank"&gt;XNACommunity&lt;/a&gt;. Son realmente interesantes y merece la pena bajarlos y echarles un vistazo.&lt;/p&gt;

&lt;p&gt;Estos son los proyectos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://xnacommunity.codeplex.com/wikipage?title=OpenCV%26XNA&amp;amp;referringTitle=Home" target="_blank"&gt;&lt;i&gt;Mexcla OpenCV con XNA para tus juegos más innovadores&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="http://xnacommunity.codeplex.com/wikipage?title=Detecci%u00f3n%20movimientos&amp;amp;referringTitle=Home" target="_blank"&gt;&lt;i&gt;Detección de movimientos con una webcam&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="http://xnacommunity.codeplex.com/wikipage?title=Detecci%u00f3n%20movimientos%20II&amp;amp;referringTitle=Home" target="_blank"&gt;&lt;i&gt;Detección de movimientos con una webcam (2a parte)&lt;/i&gt;&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Os dejo los videos de los dos últimos proyectos para que veais todo lo que se puede hacer:&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;object width="425" height="344"&gt;
&lt;param name="movie" value="http://www.youtube.com/v/fKZ1Vsbi7pM&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en_US&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;
&lt;param name="allowFullScreen" value="true"&gt;
&lt;param name="allowScriptAccess" value="always"&gt;
&lt;embed src="http://www.youtube.com/v/fKZ1Vsbi7pM&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en_US&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" width="425" height="344"&gt;&lt;/object&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Saludetes&lt;img src="http://labloguera.net/emoticons/emotion-11.gif" alt="Cool" /&gt;&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=100500" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/noticias/default.aspx">noticias</category><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/XNACommunity/default.aspx">XNACommunity</category></item><item><title>&#191;Quieres ver cosas chulas en XNA? pues aqu&#237; las tienes</title><link>http://labloguera.net/blogs/xnacommunity/archive/2009/10/31/quieres-ver-cosas-chulas-en-xna-pues-aqu-las-tienes.aspx</link><pubDate>Sat, 31 Oct 2009 13:01:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:95046</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>0</slash:comments><comments>http://labloguera.net/blogs/xnacommunity/comments/95046.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/xnacommunity/commentrss.aspx?PostID=95046</wfw:commentRss><description>
&lt;p&gt;Últimamente se ha generado mucho contenido dentro de XNACommunity, así que os dejo una recopilación de las ultimas actualizaciones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://xnacommunity.codeplex.com/wikipage?title=Simulador%20Sem%u00e1foro%20Tr%u00e1fico&amp;amp;referringTitle=Home" target="_blank"&gt;&lt;i&gt;Simulador de semáforos de tráfico en 3D&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;

&lt;li&gt; &lt;a href="http://xnacommunity.codeplex.com/wikipage?title=Frustum-xna&amp;amp;referringTitle=Home" target="_blank"&gt;&lt;i&gt;Implementación técnica Frustum Culling&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="http://xnacommunity.codeplex.com/wikipage?title=Algoritmo-flocking&amp;amp;referringTitle=Home" target="_blank"&gt;&lt;i&gt;Flocking o movimientos colectivos&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="http://xnacommunity.codeplex.com/wikipage?title=F%u00edsica%20con%20p%u00e9ndulos&amp;amp;referringTitle=Home" target="_blank"&gt;&lt;i&gt;Física con péndulo&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Y como siempre unos videos que dejan claro todo lo que hacen &lt;img src="http://labloguera.net/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/p&gt;

&lt;p&gt;
&lt;object width="425" height="344"&gt;
&lt;param name="movie" value="http://www.youtube.com/v/kJbf-4p-iuk&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;
&lt;param name="allowFullScreen" value="true"&gt;
&lt;param name="allowScriptAccess" value="always"&gt;
&lt;embed src="http://www.youtube.com/v/kJbf-4p-iuk&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" width="425" height="344"&gt;&lt;/object&gt;
&lt;br&gt;&lt;br&gt;
&lt;object width="425" height="344"&gt;
&lt;param name="movie" value="http://www.youtube.com/v/OGz7jCYVv3E&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;
&lt;param name="allowFullScreen" value="true"&gt;
&lt;param name="allowScriptAccess" value="always"&gt;
&lt;embed src="http://www.youtube.com/v/OGz7jCYVv3E&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" width="425" height="344"&gt;&lt;/object&gt;
&lt;br&gt;&lt;br&gt;
&lt;object width="425" height="344"&gt;
&lt;param name="movie" value="http://www.youtube.com/v/tD43IbPGj8s&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;
&lt;param name="allowFullScreen" value="true"&gt;
&lt;param name="allowScriptAccess" value="always"&gt;
&lt;embed src="http://www.youtube.com/v/tD43IbPGj8s&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" width="425" height="344"&gt;&lt;/object&gt;
&lt;/p&gt;

&lt;p&gt;Saludetes &lt;br&gt;&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=95046" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/xna/default.aspx">xna</category><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/XNACommunity/default.aspx">XNACommunity</category><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/tutorial/default.aspx">tutorial</category></item><item><title>Aprende a utilizar la t&#233;cnica Render To Texture</title><link>http://labloguera.net/blogs/xnacommunity/archive/2009/09/01/aprende-a-utilizar-la-t-cnica-render-to-texture.aspx</link><pubDate>Tue, 01 Sep 2009 19:52:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:90092</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>3</slash:comments><comments>http://labloguera.net/blogs/xnacommunity/comments/90092.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/xnacommunity/commentrss.aspx?PostID=90092</wfw:commentRss><description>&lt;h1&gt;Render To Texture&lt;/h1&gt;
&lt;b&gt;Introducción&lt;/b&gt;&lt;br&gt;&lt;br&gt;Hola a todos, en el siguiente tutorial/artículo intentaré enseñaros como hacer la técnica conocida como “Render to Texture” con la ayuda del 3D Studio. &lt;br&gt;Pero antes de nada veamos qué es esta técnica y cuando puede venir  bien utilizarla. &lt;br&gt;La idea básica del render to texture consiste en utilizar como textura de un modelo una imagen renderizada previamente de ese modelo, si lo leemos así parece algo inútil… ¿para qué vamos a querer poner como textura de un objeto la misma textura que ya tiene?  La razón es que en esa textura no sólo vamos a tener la misma textura anterior, si no que podremos aplicar efectos de iluminación avanzados, reflexiones, sombras etc.  Ahora es cuando se le empieza a ver la utilidad de esta técnica, ya que podemos modelar nuestra escena en 3D Studio u otro programa similar, con varias luces, sombras, reflexiones… para posteriormente generar un render to texture y tener toda la información de la escena en una textura sin necesidad de tener que aplicar shaders en tiempo real, que por lo general, bajarán el rendimiento de la aplicación, es por eso que esta técnica suele usarse en su mayoría para aplicaciones en tiempo real, como los videojuegos. &lt;br&gt;&lt;br&gt;Parece obvio que si esto es así todo el mundo usaría el render to texture para sus aplicaciones gráficas en tiempo real, pero quizás algunos de vosotros os preguntéis, vale sí, todo esto está muy bien, ¿pero qué ocurre si tenemos iluminación dinámica? ¿y si tenemos objetos moviéndose por el escenario, se verán afectados por la iluminación? Lamentablemente esta técnica no sirve para estos casos, al tener luces que cambien de posición u otro tipo de objetos móviles no se verán afectados ya que la escena tiene toda la iluminación precalculada en una textura y ésta no se actualizará, es por eso que esta técnica sólo es útil para modelar escenarios estáticos, que sabemos que no cambiarán durante la ejecución del programa.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Comenzando&lt;/b&gt;&lt;br&gt;&lt;br&gt;Pues bueno, una vez comentado todo esto, vamos a ponernos manos a la obra, como punto de partida tomaré el ejemplo de Javi de generación de terrenos con 3D Studio, que lo podéis encontrar en la sección de artículos también, cuando lo terminemos tendremos algo como esto:&lt;br&gt;&lt;br&gt;&lt;a href="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=81342" target="_blank"&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=81342" alt="captura1.JPG" title="captura1.JPG" width="548" height="327"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;El siguiente paso que vamos a hacer es añadir una luz a la escena para generar unas sombras, para ello debéis hacer click en el botón de luces bajo el menú de crear, lo podéis ver en esta imagen:&lt;br&gt;&lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=81343" alt="captura2.JPG" title="captura2.JPG"&gt;&lt;br&gt;&lt;br&gt;Elegimos Estándar en la pestaña y hacemos click sobre Target Direct, ahora nos vamos a algún viewport y pinchamos y arrastramos para crear la luz. Una vez creada quizás nos interese moverla para que enfoque bien a nuestro terreno, a mi me ha quedado algo tal que así:&lt;br&gt;&lt;br&gt;&lt;a href="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=81344" target="_blank"&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=81344" alt="captura3.JPG" title="captura3.JPG" width="557" height="333"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;Bien, una vez que ya tenemos la iluminación vamos a tocar algunos parámetros para tener sombras en la escena, hacemos click en selección por nombre (círculo rojo en el dibujo) y elegimos la luz que acabamos de crear:&lt;br&gt;&lt;br&gt;&lt;a href="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=81345" target="_blank"&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=81345" alt="captura4.JPG" title="captura4.JPG" width="554" height="310"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;Con la luz seleccionada nos vamos al panel de la izquierda donde creamos la luz y elegimos la pestaña de modificación (Círculo azul en la imagen) , como se observa en el panel hay que activar la casilla donde pone ON para las sombras (shadows) y si queréis también podéis tocar algún parámetro más, yo he modificado ligeramente la zona de penumbra y la zona que reciba luz:&lt;br&gt;&lt;br&gt;&lt;a href="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=81346" target="_blank"&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=81346" alt="captura5.JPG" title="captura5.JPG" width="562" height="338"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;Si hacemos ahora un render de la escena tenemos algo asi:&lt;br&gt;&lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=81355" alt="render1.jpg" title="render1.jpg" width="559" height="419"&gt;&lt;br&gt;&lt;br&gt;Pues bien, ya tenemos nuestra escena configurada para realizar el render to texture, el siguiente paso es ir al menú render y elegir la opción de render to texture:&lt;br&gt;&lt;br&gt;&lt;a href="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=81347" target="_blank"&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=81347" alt="captura6.JPG" title="captura6.JPG" width="557" height="336"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;A continuación se nos abre una ventana:&lt;br&gt;&lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=81349" alt="captura7.JPG" title="captura7.JPG"&gt;&lt;br&gt;&lt;br&gt;Es importante tener seleccionado el plano para indicar que vamos a aplicar el render to texture sobre ese objeto, si no lo tuviéramos seleccionado no aparecería nada en el cuadro donde aparece Plane01. En maping coordinates elegimos las opciones que tengo marcadas, use automatic unwrap (esto generará en el plano unas coordenadas para la textura) y  dejad el channel 3, que luego lo utilizaremos.&lt;br&gt;Hacemos click sobre Add debajo de output:&lt;br&gt;&lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=81350" alt="captura8.JPG" title="captura8.JPG"&gt;&lt;br&gt;&lt;br&gt;Seleccionamos Complete Map y le damos a Add Elements&lt;br&gt;&lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=81351" alt="captura9.JPG" title="captura9.JPG"&gt;&lt;br&gt;&lt;br&gt;Se nos aparece la pantalla anterior de nuevo, a la derecha de file name and type podemos elegir donde guardar la textura y con qué formato, a continuación debajo podemos definir la altura y la anchura de la textura, seleccionamos shadows aunque por defecto viene seleccionada y en el menú baked material hacemos click sobre output into source. Ya está todo listo, hacemos click sobre render y nos aparecerá  un render algo extraño jeje, estará guardado en donde se lo indicastéis.&lt;br&gt;Una vez hecho esto vamos a crear un nuevo material, para ello pulsad la tecla M del teclado y se abrirá el editor de materiales, elegimos un material vacío y al lado diffuse color hacemos click (justo donde aparece la M vosotros no deberíais tenerla)&lt;br&gt;&lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=81352" alt="captura10.JPG" title="captura10.JPG"&gt;&lt;br&gt;&lt;br&gt;A continuación elegimos bitmap y buscamos la textura que generó el render to texture:&lt;br&gt;&lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=81353" alt="captura11.JPG" title="captura11.JPG"&gt;&lt;br&gt;&lt;br&gt;Se nos abrirán más opciones en el editor, sólo tenemos que tocar el canal de la textura, que será el canal 3 ya que fue ahí donde se guardaron las coordenadas que generó el render to texture:&lt;br&gt;&lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=81354" alt="captura12.JPG" title="captura12.JPG"&gt;&lt;br&gt;&lt;br&gt;Una vez hecho esto podemos asignar este material a la escena, eliminar las luces y lanzar un nuevo render del terreno para ver que tenemos luz y sombras incluso habiendo eliminado la luz! :)&lt;br&gt;&lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=81356" alt="render3.jpg" title="render3.jpg" width="447" height="335"&gt;&lt;br&gt;&lt;br&gt;Ya solo falta exportar el proyecto a FBX y cargarlo en XNA para ver como efectivamente tenemos sombras y luz sin necesidad de perder rendimiento por ello.&lt;br&gt;Pues bien, con esto concluye este tutorial, espero que os resulte útil, un saludo y hasta la próxima.&lt;br&gt;&lt;br&gt;&lt;br&gt;David Mariscal Fernández&lt;img src="http://labloguera.net/aggbug.aspx?PostID=90092" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/xna/default.aspx">xna</category><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/XNACommunity/default.aspx">XNACommunity</category><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/render/default.aspx">render</category><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/tutorial/default.aspx">tutorial</category><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/3D+Studio/default.aspx">3D Studio</category></item><item><title>Aprende a crear reflexiones est&#225;ticas 2D para los men&#250;s de tus juegos</title><link>http://labloguera.net/blogs/xnacommunity/archive/2009/08/24/aprende-a-crear-reflexiones-est-ticas-2d-para-los-men-s-de-tus-juegos.aspx</link><pubDate>Sun, 23 Aug 2009 22:02:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:82243</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>0</slash:comments><comments>http://labloguera.net/blogs/xnacommunity/comments/82243.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/xnacommunity/commentrss.aspx?PostID=82243</wfw:commentRss><description>&lt;p&gt;Hola a tod@s,&lt;br&gt;&lt;/p&gt;&lt;p&gt;como en otras ocasiones desde XNACommunity nos llega un ejemplo para ayudarnos a mejorar nuestros juegos en XNA. Se trata &lt;span id="ctl00_ctl00_MasterContent_Content_wikiSourceLabel"&gt;de un ejemplo para aprender a crear reflexiones estáticas 2D para los menús de tus juegos.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="ctl00_ctl00_MasterContent_Content_wikiSourceLabel"&gt; Este
ejemplo muestra como precalcular de forma sencilla una textura usando
Texture.GetData y texture.SetData con un filtro blur aplicado y un
degradado en el canal alpha.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=80203" title="XNACommunity" alt="XNACommunity" width="494" height="367"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;El ejemplo lo ha subido Javier Cantón, podeis descargarlo desde &lt;a href="http://xnacommunity.codeplex.com/Wiki/View.aspx?title=2DReflection" target="_blank"&gt;aquí&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Saludetes&lt;img src="http://labloguera.net/emoticons/emotion-11.gif" alt="Cool" /&gt; &lt;br&gt;&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=82243" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/xna/default.aspx">xna</category><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/XNACommunity/default.aspx">XNACommunity</category></item><item><title>Nueva secci&#243;n en XNACommunity</title><link>http://labloguera.net/blogs/xnacommunity/archive/2009/04/05/nueva-secci-n-en-xnacommunity.aspx</link><pubDate>Sun, 05 Apr 2009 16:21:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:70369</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>0</slash:comments><comments>http://labloguera.net/blogs/xnacommunity/comments/70369.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/xnacommunity/commentrss.aspx?PostID=70369</wfw:commentRss><description>&lt;p&gt;Se ha incluido una nueva sección en la web de XNACommunity, se trata de un apartado de juegos completamente terminados que podemos descargar para jugar (&lt;img src="http://labloguera.net/emoticons/emotion-1.gif" alt="Smile" /&gt;) y ver como están construidos.&lt;/p&gt;&lt;p&gt;De momento están disponibles 5 de los 8 juegos finalistas del concurso de videojuegos del DotNetClub de Alicante. &lt;/p&gt;&lt;p&gt;A continuación os dejo unos pantallazos de los juegos:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=64049" width="202" height="158"&gt;&amp;nbsp;&amp;nbsp; &lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=64050" width="202" height="158"&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=64051" width="202" height="158"&gt;&amp;nbsp;&amp;nbsp; &lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=64052" width="202" height="158"&gt;&lt;/p&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=64053" width="202" height="158"&gt;&lt;br&gt;&lt;br&gt;Tienen muy buena pinta ¿no creeis? &lt;img src="http://labloguera.net/emoticons/emotion-1.gif" alt="Smile" /&gt; podeis leer la descripción de cada uno de ellos desde &lt;a href="http://xnacommunity.codeplex.com/Wiki/View.aspx?title=Juegos&amp;amp;referringTitle=Home" target="_blank"&gt;aquí&lt;/a&gt;.&lt;br&gt;&lt;br&gt;Saludetes&lt;img src="http://labloguera.net/emoticons/emotion-11.gif" alt="Cool" /&gt;&lt;br&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=70369" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/xna/default.aspx">xna</category><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/XNACommunity/default.aspx">XNACommunity</category></item><item><title>Componente barra de progreso en XNA</title><link>http://labloguera.net/blogs/xnacommunity/archive/2009/04/04/componente-barra-de-progreso-en-xna.aspx</link><pubDate>Sat, 04 Apr 2009 18:45:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:70356</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>0</slash:comments><comments>http://labloguera.net/blogs/xnacommunity/comments/70356.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/xnacommunity/commentrss.aspx?PostID=70356</wfw:commentRss><description>&lt;P&gt;José Manuel Silvestre nos ha dejado esta vez en &lt;A class="" href="http://labloguera.net/controlpanel/blogs/www.codeplex.com/xnacommunity" target=_blank&gt;XNACommunity&lt;/A&gt; un componente muy sencillo y fácil de utilizar para nuestros juegos en XNA.&lt;/P&gt;
&lt;P&gt;Se trata de una barra de progreso con la que podemos mostrar la carga de las pantallas, la energía, etc.&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:393px;HEIGHT:464px;" height=589 src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=62886" width=783&gt;&lt;/P&gt;
&lt;P&gt;El componente lo tenéis disponible en &lt;A class="" href="http://xnacommunity.codeplex.com/Wiki/View.aspx?title=Componente%20Barra&amp;amp;referringTitle=Home" target=_blank&gt;XNACommunity&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Saludetes &lt;img src="http://labloguera.net/emoticons/emotion-11.gif" alt="Cool" /&gt;&lt;/P&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=70356" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/xna/default.aspx">xna</category><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/XNACommunity/default.aspx">XNACommunity</category></item><item><title>Componente de LCD para XNA</title><link>http://labloguera.net/blogs/xnacommunity/archive/2009/03/14/componente-de-lcd-para-xna.aspx</link><pubDate>Sat, 14 Mar 2009 13:26:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:69861</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>0</slash:comments><comments>http://labloguera.net/blogs/xnacommunity/comments/69861.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/xnacommunity/commentrss.aspx?PostID=69861</wfw:commentRss><description>&lt;P&gt;José Manuel Silvestre nos trae su primer componente hecho en XNA. Se trata de un visor que simula una pantalla de LCD con el que podremos mejorar el aspecto de nuestros juegos.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;En el paquete se incluyen los archivos .PSD (PhotoShop) por si queremos crear nuestros propios tipos de dígitos.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Este es el aspecto del componente:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=61506" width=385 height=315&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Como siempre podeis descargarlo desde &lt;A href="http://xnacommunity.codeplex.com/Wiki/View.aspx?title=Componente%20LCD&amp;amp;referringTitle=Home" target=_blank&gt;XNACommunity&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Saludetes&lt;img src="http://labloguera.net/emoticons/emotion-11.gif" alt="Cool" /&gt;&lt;/P&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=69861" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/xna/default.aspx">xna</category><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/XNACommunity/default.aspx">XNACommunity</category></item><item><title>Aprende a crear aplicaciones multitouch usando XNA</title><link>http://labloguera.net/blogs/xnacommunity/archive/2009/03/14/aprende-a-crear-aplicaciones-multitouch-usando-xna.aspx</link><pubDate>Sat, 14 Mar 2009 12:47:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:69859</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>0</slash:comments><comments>http://labloguera.net/blogs/xnacommunity/comments/69859.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/xnacommunity/commentrss.aspx?PostID=69859</wfw:commentRss><description>&lt;P&gt;Aquí tenemos un ejemplo de una aplicación para pantallas multitouch desarrollado con XNA.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;IMG title=undefined border=0 alt="" src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=59064" width=300 height=300&gt;&lt;/P&gt;
&lt;P&gt;En el desarrollo han colaborado:&amp;nbsp;&lt;SPAN style="FONT-FAMILY:'Segoe UI';" class=Apple-style-span&gt;Juliet R. Moreiro Bockhop,&amp;nbsp;Sergio Escalada Beltrán y&amp;nbsp;Javier Cantón Ferrero.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Podeis bajaros el código como siempre desde el repositorio de &lt;A href="http://xnacommunity.codeplex.com/Wiki/View.aspx?title=Multitouch&amp;amp;referringTitle=Home" target=_blank&gt;XNACommunity&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Bueno lo mejor de esto es verlo en vivo:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OBJECT width=425 height=344&gt;&lt;PARAM NAME="movie" VALUE="http://www.youtube.com/v/_jEK1SXKOUY&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;PARAM NAME="allowFullScreen" VALUE="true"&gt;
&lt;embed src="http://www.youtube.com/v/_jEK1SXKOUY&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash" width="425" height="344"&gt;&lt;/embed&gt;&lt;/OBJECT&gt;
&lt;P&gt;Tambíen tenemos la suerte de contar con los videos de la presentación de este proyecto &lt;img src="http://labloguera.net/emoticons/emotion-2.gif" alt="Big Smile" /&gt;.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OBJECT width=425 height=344&gt;&lt;PARAM NAME="movie" VALUE="http://www.youtube.com/v/jJoh69Hfq3A&amp;amp;hl=es&amp;amp;fs=1"&gt;&lt;PARAM NAME="allowFullScreen" VALUE="true"&gt;&lt;PARAM NAME="allowscriptaccess" VALUE="always"&gt;
&lt;embed src="http://www.youtube.com/v/jJoh69Hfq3A&amp;hl=es&amp;fs=1" type="application/x-shockwave-flash" width="425" height="344"&gt;&lt;/embed&gt;&lt;/OBJECT&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OBJECT width=425 height=344&gt;&lt;PARAM NAME="movie" VALUE="http://www.youtube.com/v/Z-288xcE2gQ&amp;amp;hl=es&amp;amp;fs=1"&gt;&lt;PARAM NAME="allowFullScreen" VALUE="true"&gt;&lt;PARAM NAME="allowscriptaccess" VALUE="always"&gt;
&lt;embed src="http://www.youtube.com/v/Z-288xcE2gQ&amp;hl=es&amp;fs=1" type="application/x-shockwave-flash" width="425" height="344"&gt;&lt;/embed&gt;&lt;/OBJECT&gt;
&lt;P&gt;Felicidades al equipo por este proyecto tan chulo.&lt;/P&gt;
&lt;P&gt;Saludetes&lt;img src="http://labloguera.net/emoticons/emotion-11.gif" alt="Cool" /&gt;&lt;/P&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=69859" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/xna/default.aspx">xna</category><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/XNACommunity/default.aspx">XNACommunity</category><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/multitouch/default.aspx">multitouch</category></item><item><title>Sombras omnidireccionales</title><link>http://labloguera.net/blogs/xnacommunity/archive/2009/01/15/sombras-omnidireccionales.aspx</link><pubDate>Thu, 15 Jan 2009 10:04:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:66049</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>0</slash:comments><comments>http://labloguera.net/blogs/xnacommunity/comments/66049.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/xnacommunity/commentrss.aspx?PostID=66049</wfw:commentRss><description>
&lt;p&gt;&lt;span id="ctl00_ctl00_MasterContent_Content_wikiSourceLabel"&gt;En este
ejemplo se muestran sombras omnidireccionales usando 'dual-paraboloid
mapping'.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span id="ctl00_ctl00_MasterContent_Content_wikiSourceLabel"&gt; Este tipo de proyección permite representar las profundidades
de todos los puntos de la escena en sólo dos texturas, a diferencia de
otros métodos como las sombras hechas con cubemaps que requieren
actualizar seis superficies, dando como resultado una técnica bastante
óptima aunque con ciertas fallos en la calidad de imagen.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=54856" height="290" width="387"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Como siempre video y código:&lt;/p&gt;
&lt;p&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/_mliL_qiy_M&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/_mliL_qiy_M&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" height="344" width="425"&gt;&lt;/object&gt;&lt;/p&gt;
&lt;p&gt;El código lo podéis bajar de &lt;a href="http://www.codeplex.com/XNACommunity/Wiki/View.aspx?title=OmnidirectionalShadows&amp;amp;referringTitle=Home" target="_blank"&gt;XNACommunity&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Saludetes&lt;img src="http://labloguera.net/emoticons/emotion-11.gif" alt="Cool" /&gt; &lt;br&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=66049" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/xna/default.aspx">xna</category><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/XNACommunity/default.aspx">XNACommunity</category></item><item><title>Empieza a crear tu propio Guitar Hero</title><link>http://labloguera.net/blogs/xnacommunity/archive/2008/11/12/empieza-a-crear-tu-propio-guitar-hero.aspx</link><pubDate>Tue, 11 Nov 2008 23:16:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:63836</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>1</slash:comments><comments>http://labloguera.net/blogs/xnacommunity/comments/63836.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/xnacommunity/commentrss.aspx?PostID=63836</wfw:commentRss><description>
&lt;p&gt;¿Ya te has pasado el Guitar Hero mil veces? pues ahora puedes hacerte tu propia versión con ayuda del ejemplo que Javier Cantón ha subido a XNACommunity.&lt;/p&gt;

&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/i4Kv2sGTc1E&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/i4Kv2sGTc1E&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;fs=1" type="application/x-shockwave-flash" width="425" height="344"&gt;&lt;/object&gt;

&lt;p&gt;&amp;nbsp; &lt;br&gt;&lt;/p&gt;
&lt;p&gt;Podeis descargar el archivo con el proyecto desde la web de XNACommunity.&lt;/p&gt;&lt;p&gt;Saludetes&lt;img src="http://labloguera.net/emoticons/emotion-11.gif" alt="Cool" /&gt; &lt;br&gt;&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=63836" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/XNACommunity/default.aspx">XNACommunity</category></item><item><title>ToonShading o como hacer que tu juego parezca un comic</title><link>http://labloguera.net/blogs/xnacommunity/archive/2008/10/28/toonshading-o-como-hacer-que-tu-juego-parezca-un-comic.aspx</link><pubDate>Tue, 28 Oct 2008 19:05:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:57788</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>0</slash:comments><comments>http://labloguera.net/blogs/xnacommunity/comments/57788.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/xnacommunity/commentrss.aspx?PostID=57788</wfw:commentRss><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Pues eso mismo, aquí os dejo la info sobre el último ejemplo que Alex Urbano ha hecho para XNACommunity.&lt;/p&gt;&lt;p&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=47267" alt="toonsec.jpg" width="486" height="254"&gt;&lt;/p&gt;

&lt;p&gt;&lt;span id="ctl00_ctl00_MasterContent_TabContentPanel_Content_wikiSourceLabel"&gt;Este
ejemplo muestra una mezcla de técnicas destinadas a pintar una escena
3D simulando que es un dibujo animado hecho a mano. Se mezclan cosas
tales como cel shading usando una textura para modular la intensidad de
la luz, siluetas mediante geometría y detección de las mismas en un
post-proceso, y una simulación de trazos a lápiz en las zonas
sombreadas.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span id="ctl00_ctl00_MasterContent_TabContentPanel_Content_wikiSourceLabel"&gt;&lt;br&gt;&amp;nbsp; &lt;/span&gt;&lt;br&gt;&lt;/p&gt;

&lt;object width="425" height="344"&gt;
&lt;param name="movie" value="http://www.youtube.com/v/cs9xUmu3aMA&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;fs=1"&gt;
&lt;param name="allowFullScreen" value="true"&gt;
&lt;embed src="http://www.youtube.com/v/cs9xUmu3aMA&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;fs=1" type="application/x-shockwave-flash" width="425" height="344"&gt;&lt;/object&gt;


&lt;br&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;El ejemplo lo podeis descargar desde &lt;a href="http://www.codeplex.com/XNACommunity/%20" target="_blank"&gt;XNACommunity&lt;/a&gt; en la sección de ejemplos. &lt;br&gt;&lt;/p&gt;&lt;p&gt;Saludetes&lt;img src="http://labloguera.net/emoticons/emotion-11.gif" alt="Cool" /&gt; &lt;br&gt;&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=57788" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/xna/default.aspx">xna</category><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/XNACommunity/default.aspx">XNACommunity</category></item><item><title>Generaci&#243;n de terrenos usando 3D studio max </title><link>http://labloguera.net/blogs/xnacommunity/archive/2008/10/19/generaci-n-de-terrenos-usando-3d-studio-max.aspx</link><pubDate>Sun, 19 Oct 2008 10:36:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:53124</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>0</slash:comments><comments>http://labloguera.net/blogs/xnacommunity/comments/53124.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/xnacommunity/commentrss.aspx?PostID=53124</wfw:commentRss><description>&lt;p&gt;&lt;br&gt;Bueno la idea de este tutorial es aprender a crear modelos de terrenos para nuestras demos XNA con 3D Studio Max. La generación de Terrains en los videojuegos se suele hacer mediante código durante el tiempo de carga o de forma dinámica durante el juego. Uno de los últimos videojuegos comerciales que presentan un sistema de terrenos muy avanzado es BattleField Bad Company, en el cual los terrenos se modifican en tiempo de juego a causa de explosiones provocadas por las armas de los jugadores. &lt;br&gt;Sin embargo muchas veces no se necesitan sistemas de generación de terrenos tan complejos, por lo que podemos precalcular estos y añadirlos en forma de content directamente a nuestros proyectos. Y esto precisamente es lo que vamos a explicar en este tutorial.&lt;br&gt; &lt;br&gt;&lt;b&gt;Manos a la obra&lt;/b&gt;&lt;br&gt; &lt;br&gt;Bueno lo primero que vamos a necesitar será una textura para nuestro terreno, está podéis crearla ustedes o buscar alguna por internet, yo para este ejemplo voy a usar esta:&lt;br&gt; &lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=46555" alt="Landscape.jpg"&gt;&lt;br&gt; &lt;br&gt;Bien lo siguiente que vamos a necesitar es una textura de alturas (heightMap), es decir, una textura con tonalidades que van de blanco a negro y que luego usaremos para establecer las alturas de nuestro terreno. Los pixeles negros estarán a nivel de mar y los pixeles de color blanco serán los picos más altos de nuestro terreno. Posiblemente podáis encontrar también algunos heightMap buscando por internet, pero en mi caso voy a generarlo mediante Photoshop. &lt;br&gt; &lt;br&gt;Bien nos vamos a Photoshop y creamos un nuevo fichero de dimesiones 512x512, ya que nuestro terreno será cuadrado:&lt;br&gt; &lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=46540" alt="Image1.jpg"&gt;&lt;br&gt; &lt;br&gt;Y luego pintaremos el fondo completamente de negro para que inicialmente todo esté a nivel del mar:&lt;br&gt; &lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=46541" alt="Image2.jpg"&gt;&lt;br&gt; &lt;br&gt;El siguiente paso será usar la brocha para pintar las zonas de nuestro terreno que estarán sobre el nivel del mar. Seleccionamos la herramienta y configuramos algunas propiedades para que la brocha al pintar genere degradados en los bordes y de esa forma el terreno que generemos esté suavizado.&lt;br&gt; &lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=46542" alt="Image3.jpg"&gt;&lt;br&gt; &lt;br&gt;Y por último nos ponemos a pintar las alturas, esto es a gusto del consumidor, según lo que necesitéis para vuestro proyecto. Os recomiendo para la mayoría de los casos dibujar una especie de muralla rodeando toda la imagen pero dejando un margen negro, entonces si colocamos una cámara en el centro del terreno nunca veamos el final de este, sino montañas que no nos dejan ver más allá. Yo he dibujado esto XD:&lt;br&gt; &lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=46556" alt="heightMap.jpg"&gt;&lt;br&gt; &lt;br&gt;Bien ya tenemos las texturas que necesitábamos, ahora nos vamos al 3d Studio Max y lo primero que vamos a hacer es crear un plano en el centro del mundo.  Para ello dentro de la pestaña Create del menú de la derecha y teniendo seleccionada Geometric podremos ver un botón en el que pone Plane.&lt;br&gt; &lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=46543" alt="Image4.jpg"&gt;&lt;br&gt; &lt;br&gt;Presinamos el botón de plane y manteniendo pulsada la tecla control para que nos salga un plano cuadrado, creamos un plano en el centro del mundo.&lt;br&gt; &lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=46544" alt="Image5.jpg"&gt;&lt;br&gt; &lt;br&gt;Para asegurarnos que está en el centro, haremos click con el botón derecho del ratón sobre el botón mover del toolbar superior y en la ventana que nos aparecerá colocaremos todas las coordenadas a 0.&lt;br&gt; &lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=46545" alt="Image6.jpg"&gt;&lt;br&gt; &lt;br&gt;Ahora nos vamos a la pestaña modify y en un cuadro blanco de debajo aparecerá solo plane. Bien más abajo están las propiedades de creación de este plano, las cuales vamos a modificar para darle mayor número de vértices de forma que luego el terreno tenga un aspecto más suavizado. Para ello modificaremos los parámetros length segs y width segs, yo les voy a poner 40 a cada uno pero este valor difiere según el tamaño del terrain y del suavizado que necesitéis, lo óptimo sería tener un vértice para cada pixel de la textura del heigthMap.&lt;br&gt; &lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=46546" alt="Image7.jpg"&gt;&lt;br&gt; &lt;br&gt;Lo siguiente será irnos a la lista de modificadores y añadirle uno a nuestro plano llamado Displace:&lt;br&gt; &lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=46547" alt="Image8.jpg"&gt;&lt;br&gt; &lt;br&gt;Luego en sus propiedades nos iremos a Map y le aplicaremos el heigthMap que hemos generado con el photoshop.&lt;br&gt; &lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=46548" alt="Image9.jpg"&gt;&lt;br&gt; &lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=46549" alt="Image10.jpg"&gt;&lt;br&gt; &lt;br&gt;Y por último para apreciar las alturas de nuestro heightMap sobre el plano le indicaremos mediante el parámetro Strength cuál será la altura de aquellos pixeles que esté en blanco:&lt;br&gt; &lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=46550" alt="Image11.jpg"&gt;&lt;br&gt; &lt;br&gt;Bien ya tenemos nuestro terreno generado, solo falta aplicarle la textura. Para ello abrimos el editor de materiales ( la forma más fácil es presionando la tecla ‘M’). Sobre cualquier material por defecto seleccionamos en la pestaña Maps, y le añadimos una textura al canal diffuse.&lt;br&gt; &lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=46558" alt="Image12.jpg"&gt;&lt;br&gt; &lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=46552" alt="Image13.jpg"&gt;&lt;br&gt; &lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=46553" alt="Image14.jpg"&gt;&lt;br&gt; &lt;br&gt;Y para aplicar la textura al plano realizamos los siguientes pasos que se muestran en la imagen (debemos tener el plano seleccionado).&lt;br&gt; &lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=46554" alt="Image15.jpg"&gt;&lt;br&gt; &lt;br&gt;Ok, pues aquí termina este tutorial, lo único que nos faltaría sería exportar ya dicho modelo en fbx o en el formato que se quiera. &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt;Created by Javier Cantón Ferrero.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Saludetes&lt;img src="http://labloguera.net/emoticons/emotion-11.gif" alt="Cool" /&gt; &lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=53124" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/xna/default.aspx">xna</category><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/XNACommunity/default.aspx">XNACommunity</category></item><item><title>Primeros pasos en Inteligencia Artificial</title><link>http://labloguera.net/blogs/xnacommunity/archive/2008/10/13/primeros-pasos-en-inteligencia-artificial.aspx</link><pubDate>Mon, 13 Oct 2008 10:58:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:49392</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>0</slash:comments><comments>http://labloguera.net/blogs/xnacommunity/comments/49392.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/xnacommunity/commentrss.aspx?PostID=49392</wfw:commentRss><description>
&lt;p&gt;Hola a tod@s, tenemos un nuevo artículo en XNACommunity, en esta ocasión va sobre inteligencia artificial en los videojuegos, se la ha currado Marc García. Podeis también bajaros el código y leerlo en &lt;a href="http://www.codeplex.com/XNACommunity" target="_blank"&gt;XNACommunity&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span id="ctl00_ctl00_MasterContent_TabContentPanel_Content_wikiSourceLabel"&gt;&lt;/span&gt;&lt;/i&gt;&lt;br&gt;&lt;/p&gt;

Primeros pasos en Inteligencia Artificial: 
&lt;h1&gt;
Modelos de comportamiento usando máquinas de estados
&lt;/h1&gt; &lt;br&gt;En el mundo de los videojuegos, está muy bien que los enemigos parezca que piensen y actúen en consecuencia a nuestros actos.&lt;br&gt;Básicamente si no lo hicieran, luchar contra un enemigo o contra una palmera no tendría diferencia alguna (los cocos, quizás).&lt;br&gt; &lt;br&gt;En este artículo pretendo explicar qué hace decidir a un enemigo actuar de una manera o de otra, y poner un ejemplo práctico.&lt;br&gt;Mi intención es, que alguien que no sepa nada del tema, después de leer el artículo pueda jugar a un juego y entender porqué ese enemigo viene corriendo hacia mí cuando claramente tengo un bazooka en la mano.&lt;br&gt; &lt;br&gt;&lt;b&gt;CONTENIDO&lt;/b&gt;&lt;br&gt;&lt;ul&gt;
&lt;li&gt;Máquinas de Estados&lt;/li&gt;&lt;li&gt;Montando el tinglado&lt;/li&gt;&lt;ul&gt;

&lt;li&gt;Patrullar&lt;/li&gt;&lt;li&gt;Buscar&lt;/li&gt;&lt;li&gt;Seguir&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Conclusiones&lt;/li&gt;&lt;li&gt;Ejemplo&lt;/li&gt;
&lt;/ul&gt; &lt;br&gt; &lt;br&gt;&lt;h2&gt;
Máquinas de Estados
&lt;/h2&gt;Me referiré a ellas como autómatas. Hay de muchos tipos, de estados finitos, infinitos, con transiciones lambda/epsilon etc. etc.&lt;br&gt; &lt;br&gt;La mejor manera de explicar su funcionamiento es con el siguiente diagrama:&lt;br&gt; &lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=45907" alt="fsm1.jpg"&gt;&lt;br&gt;Los autómatas cuentan con términos propios (lenguaje, palabra, estado, ...), pero como eso es más complicado, vamos a lo básico.&lt;br&gt;Simplificando: empezamos en un estado, y cuando se cumple una condición, saltamos a otro estado.&lt;br&gt;Tanto las condiciones como los estados pueden ser abstracciones de cosas más complejas. De hecho, hasta pueden ser tratados como otros autómatas aparte.&lt;br&gt; &lt;br&gt; &lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=45908" alt="fsm2.jpg"&gt;&lt;br&gt;Esto nos puede ayudar a ser organizados y no acabar con tiras y tiras y tiras de papel/hojas de &amp;lt;mi procesador de texto&amp;gt;. Ya sabéis, divide y vencerás.&lt;br&gt; &lt;br&gt; &lt;br&gt;Sabiendo eso, se puede hacer un esquema parecido al siguiente...&lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=45909" alt="fsm3.jpg"&gt;&lt;br&gt;... en el que dejamos externa la parte de inicio/fin. Si además lo llamamos, por ejemplo, 'soldado'... pues supongo que ya se empieza a ver por dónde van los tiros.&lt;br&gt; &lt;br&gt; &lt;br&gt;Y hasta aquí la parte teórica, que no quiere decir ni por asomo que no exista nada más que explicar (je). Simplemente he contado lo básico que creo que es necesario para entenderlo.&lt;br&gt;De todos modos, si alguien siente curiosidad, wikipedia es tu amiga -&amp;gt;&lt;br&gt;   &lt;a href="http://en.wikipedia.org/wiki/Automata_theory" class="externalLink"&gt;http://en.wikipedia.org/wiki/Automata_theory&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br&gt;   &lt;a href="http://en.wikipedia.org/wiki/Finite_state_machine" class="externalLink"&gt;http://en.wikipedia.org/wiki/Finite_state_machine&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br&gt; &lt;br&gt;Pasemos al ejemplo práctico&lt;br&gt; &lt;br&gt;&lt;h2&gt;

Montando el tinglado
&lt;/h2&gt;Para nuestro ejemplo contamos con un par de modelos, a los que asignaremos diferentes comportamientos.&lt;br&gt; &lt;br&gt;Ya que el comportamiento puede variar, creamos una clase base, de la que heredarán el resto.&lt;br&gt;&lt;pre&gt;public class CBehaviourModel
{
	public CBehaviourModel() { }
	public virtual void Update(GameTime gameTime, ref Vector3 position, ref Vector3 direction, ref Vector3 rotation) { }
}
&lt;/pre&gt; &lt;br&gt; &lt;br&gt;El método importante es el &lt;i&gt;Update&lt;/i&gt; (bueno, estando sólo el constructor y un método tampoco queda mucho más).&lt;br&gt;Como alguno de los comportamientos modificará la posición, etc. de su modelo, lo pasamos por referencia en el &lt;i&gt;Update&lt;/i&gt;.&lt;br&gt; &lt;br&gt;Teniendo ya la clase base, podemos crear el resto.&lt;br&gt;El planning es que uno de los modelos estará en modo patrulla, y el otro estará buscándolo. Cuando lo vea, lo seguirá.&lt;br&gt; &lt;br&gt;Hacemos 3 clases entonces: &lt;b&gt;CPatroller&lt;/b&gt;, &lt;b&gt;CStraightSearcher&lt;/b&gt; y &lt;b&gt;CFollower&lt;/b&gt;.&lt;br&gt;Además, hacemos una cuarta &lt;b&gt;CStandStiller&lt;/b&gt;, que no hace nada. Realmente es como la clase base, pero con el nombre adecuado a lo que hace, quedarse quieto.&lt;br&gt; &lt;br&gt;Para las explicaciones me centraré en los métodos "importantes", básicamente los &lt;i&gt;Update&lt;/i&gt;. Ya que en los métodos &lt;i&gt;Draw&lt;/i&gt;, &lt;i&gt;Load&lt;/i&gt;, etc. no hay nada excesivamente raro, no los comentaré.&lt;br&gt; &lt;br&gt;&lt;h2&gt;

Patrullar
&lt;/h2&gt;Se trata de una clase muy simple.&lt;br&gt;Contiene un array de &lt;i&gt;N&lt;/i&gt; posiciones, que le indican la ruta a seguir. El punto &lt;i&gt;N&lt;/i&gt; conecta con el primero, de manera que hace un recorrido cerrado.&lt;br&gt; &lt;br&gt;En el Update, va guardando el tiempo pasado entre frame y frame (&lt;i&gt;cumul_time&lt;/i&gt;) para determinar la distancia que avanza.&lt;br&gt;Hace un Lerp entre 2 vectores: pilla vector1, pilla vector2, y con un factor alpha [0..1] devuelve un nuevo vector. Si alpha = 0.5f, devuelve el vector medio entre v1 y v2. Como va de 0 a 1, usamos el tiempo para determinar alpha.&lt;br&gt;Una vez llegado al destino (&lt;i&gt;cumul_time = 1&lt;/i&gt;), se avanzan los corners (si es el final se vuelve al principio).&lt;br&gt;&lt;pre&gt;public override void Update(GameTime gameTime, ref Vector3 position, ref Vector3 direction, ref Vector3 rotation)
{
	// update time: takes X seconds to go from corner to corner
	cumul_time += (float)gameTime.ElapsedGameTime.TotalSeconds / corner_to_corner_time;
 
	if (cumul_time &amp;gt; 1f)    // reached max?
	{
		cumul_time = 0f;
 
		// Change corners
		++actual_corner;
		rotation.Y -= 90f;
		if (actual_corner &amp;gt;= corner_points.Length)
		{
			actual_corner = 0;
			rotation.Y = 0f;
		}
	}
 
	// patrolling
	int next_corner = actual_corner + 1;
	if (next_corner &amp;gt;= corner_points.Length)
		next_corner = 0;
 
	Vector3 from = corner_points[actual_corner];
	Vector3 to = corner_points[next_corner];
	position = Vector3.Lerp(from, to, cumul_time);
}

&lt;/pre&gt; &lt;br&gt; &lt;br&gt;Apunte: siempre suelo decir que a la hora de calcular cualquier cosa en videojuegos hay que tener en cuenta tanto los números como los gráficos.&lt;br&gt;Es decir, que hay que cuadrar los valores de los elementos con los de las meshes que se van a pintar.&lt;br&gt;Por eso cuando se cambia de esquina se actualiza la rotación del modelo. Si no, iría pululando por el escenario sin más (ver el caso de &lt;b&gt;CFollower&lt;/b&gt;).&lt;br&gt; &lt;br&gt; &lt;br&gt;&lt;h2&gt;
Buscar
&lt;/h2&gt;Esta clase está hecha a modo de alarma típica de láser infrarrojo. Tenemos el modelo quieto, que "emite" un rayo; si alguien cruza ese rayo se cambia de comportamiento a &lt;b&gt;CFollower&lt;/b&gt;.&lt;br&gt;Para simular el rayo usaremos dos planos. El segundo se usa para limitar la "altura" del primero, ya que un plano es infinito y por tanto cualquier cosa que estuviera por detrás del modelo se detectaría también.&lt;br&gt; &lt;br&gt;Aunque no se vea, en la escena tenemos&lt;br&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=XNACommunity&amp;amp;DownloadId=45910" alt="scene.jpg"&gt;&lt;br&gt;las rayas de colores son los dos planos.&lt;br&gt; &lt;br&gt;En el &lt;i&gt;Update&lt;/i&gt; se hace la comprobación que el objeto esté por delante del plano rojo, y que intersecte con el plano amarillo.&lt;br&gt;&lt;pre&gt;public bool Intersects(BoundingSphere sphere)
{
	intersection_front = false;
	intersection_straight = false;
 
	// check0: front of plane
	if (Front.Intersects(sphere) != PlaneIntersectionType.Front)
	{
		return false;
	}
 
	intersection_front = true;
 
	// check1: straight plane
	if (Straight.Intersects(sphere) == PlaneIntersectionType.Intersecting)
	{
		intersection_straight = true;
	}
 
	return (intersection_front &amp;amp;&amp;amp; intersection_straight);
}

&lt;/pre&gt; &lt;br&gt; &lt;br&gt;&lt;h2&gt;
Seguir
&lt;/h2&gt;Finalmente, esta clase se encarga de seguir una posición con una distancia de seguridad (para no montar un modelo con otro).&lt;br&gt;Cada &lt;i&gt;Update&lt;/i&gt; se ha de actualizar la posición a seguir, por lo que se hace desde el &lt;i&gt;Update&lt;/i&gt; del juego principal.&lt;br&gt;&lt;pre&gt;if (dino.Behaviour is CFollower)
{
	((CFollower)dino.Behaviour).TargetPosition = sword.Position;
}
 
dino.Update(gameTime);
sword.Update(gameTime);
&lt;/pre&gt; &lt;br&gt; &lt;br&gt;y en el update correspondiente, se calcula la nueva posición&lt;br&gt;&lt;pre&gt;public override void Update(GameTime gameTime, ref Vector3 position, ref Vector3 direction, ref Vector3 rotation)
{
	Vector3 dir = target_position - position;
	dir = dir - dir / 10; // security distance = 1/10;
 
	position += dir * (float)gameTime.ElapsedGameTime.TotalSeconds;
	dir.Normalize();
	direction = dir;
}

&lt;/pre&gt; &lt;br&gt; &lt;br&gt;En este modelo no se actualiza la rotación del modelo, por lo que se ve "mal" cuando se mueve. Este es el ejemplo que comentaba en la clase &lt;b&gt;CPatroller&lt;/b&gt;.&lt;br&gt; &lt;br&gt;&lt;h2&gt;
Conclusiones
&lt;/h2&gt;&lt;p&gt;Con todo lo anterior se puede conseguir lo que se ve en el ejemplo, que es muy básico.&lt;br&gt;Con algo más de complejidad, se podría hacer, por ejemplo, que si un elemento se escapa a más de una distancia &lt;i&gt;X&lt;/i&gt;, el otro elemento cambia a &lt;b&gt;CSearcher&lt;/b&gt;.&lt;br&gt;También &lt;b&gt;CStraightSearcher&lt;/b&gt; se podría convertir en &lt;b&gt;CSearcher&lt;/b&gt;, haciendo no sólo una línea recta, si no que vaya rotando en un arco para ampliar la búsqueda, añadir un cono de visión, etc.&lt;br&gt; &lt;br&gt;Los controles básicos son &lt;i&gt;WASDZX + mouse&lt;/i&gt; para la cámara, &lt;i&gt;espacio&lt;/i&gt; para iniciar el comportamiento de patrulla, &lt;i&gt;R&lt;/i&gt; para resetear y &lt;i&gt;ESC&lt;/i&gt; para salir.&lt;br&gt; &lt;br&gt;Finalmente, espero que este artículo haya ayudado a alguien a entender, o entender mejor, como funcionan algunas de las Inteligencias Artificiales en los videojuegos.&lt;br&gt;Hay que tener en cuenta que las máquinas de estados se usaban hace mil millones de años, y que los juegos next-gen usan algoritmos muchos más complejos.&lt;br&gt;Pero bueno, que de algún lado ha venido todo.&lt;br&gt; &lt;br&gt;Lo dicho, que espero que haya sido útil.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Saludetes&lt;img src="http://labloguera.net/emoticons/emotion-11.gif" alt="Cool" /&gt; &lt;br&gt;&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=49392" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/xna/default.aspx">xna</category><category domain="http://labloguera.net/blogs/xnacommunity/archive/tags/XNACommunity/default.aspx">XNACommunity</category></item></channel></rss>