<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-34355436</id><updated>2011-11-27T19:59:51.024-05:00</updated><category term='C++'/><category term='Rockstar'/><category term='Game Studio'/><category term='Games'/><category term='Windows Live'/><category term='Microsoft'/><category term='DirectX'/><category term='ASP.NET Dynamic Data'/><category term='XNA'/><category term='ASP.NET MVC'/><category term='ASP.NET'/><title type='text'>My Gaming Notes</title><subtitle type='html'>En este blog encontrarás información sobre tecnologías como XNA, DirectX, Gaming y otras cositas relacionadas con el mundo del desarrollo de video juegos.
Bienvenid@!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mygamingnotes.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mygamingnotes.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Willy R.</name><uri>http://www.blogger.com/profile/15693245798904203785</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_TtTfLPkaaFw/R_BEKK5HSnI/AAAAAAAAAD4/j6nqAg2AzIA/S220/Willly+Apto+2.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-34355436.post-1513714089110642458</id><published>2009-07-07T14:52:00.001-05:00</published><updated>2009-07-07T14:54:08.088-05:00</updated><title type='text'>Nuevo blog</title><content type='html'>Este blog ha sido migrado a &lt;a href="http://mygamingnotes.wordpress.com/"&gt;&lt;span style="font-size:180%;"&gt;http://mygamingnotes.wordpress.com/&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Espero tu visita.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34355436-1513714089110642458?l=mygamingnotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mygamingnotes.blogspot.com/feeds/1513714089110642458/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34355436&amp;postID=1513714089110642458&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/1513714089110642458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/1513714089110642458'/><link rel='alternate' type='text/html' href='http://mygamingnotes.blogspot.com/2009/07/nuevo-blog.html' title='Nuevo blog'/><author><name>Willy R.</name><uri>http://www.blogger.com/profile/15693245798904203785</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_TtTfLPkaaFw/R_BEKK5HSnI/AAAAAAAAAD4/j6nqAg2AzIA/S220/Willly+Apto+2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34355436.post-8663236084795660048</id><published>2009-03-24T12:08:00.002-05:00</published><updated>2009-03-24T12:15:09.210-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNA'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Reseña corazon virtual revista Cambio</title><content type='html'>Hola, quiero compartir esta nueva reseña del proyecto de Corazón Virtual con XNA que publicó la revista Cambio.&lt;br /&gt;&lt;br /&gt;Descargar artículo en pdf:&lt;br /&gt;&lt;br /&gt;&lt;iframe scrolling="no" marginheight="0" marginwidth="0" frameborder="0" style="width:240px;height:66px;margin:3px;padding:0;border:1px solid #dde5e9;background-color:#ffffff;" src="http://cid-37be7b8912605b31.skydrive.live.com/embedrowdetail.aspx/XNA/2009-03-19-Cambio-CorazonVirtual.pdf"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Ver artículo oline &lt;a href="http://www.cambio.com.co/salud_cambio/820/ARTICULO-WEB-NOTA_INTERIOR_CAMBIO-4885630.html" target="_blank"&gt;aquí&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Willy R.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34355436-8663236084795660048?l=mygamingnotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mygamingnotes.blogspot.com/feeds/8663236084795660048/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34355436&amp;postID=8663236084795660048&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/8663236084795660048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/8663236084795660048'/><link rel='alternate' type='text/html' href='http://mygamingnotes.blogspot.com/2009/03/resena-corazon-virtual-revista-cambio.html' title='Reseña corazon virtual revista Cambio'/><author><name>Willy R.</name><uri>http://www.blogger.com/profile/15693245798904203785</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_TtTfLPkaaFw/R_BEKK5HSnI/AAAAAAAAAD4/j6nqAg2AzIA/S220/Willly+Apto+2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34355436.post-5678396232558114135</id><published>2009-03-05T17:49:00.006-05:00</published><updated>2009-03-05T18:06:07.467-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNA'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Reseña corazon virtual con XNA</title><content type='html'>Quiero compartir esta nota que la prensa hizo sobre la primera demo del proyecto de Corazón Virtual con XNA en la que estoy trabajando con el doctor &lt;a href="http://es.wikipedia.org/wiki/Jorge_Reynolds_Pombo" target="_blank"&gt;Jorge Reynolds&lt;/a&gt; (ingeniero colombiano inventor del marcapasos), con la cual se pretende apoyar las investigaciones que él viene adelantando en torno a su proyecto de creación del nanopuente y a futuro ser usuada como herramienta de entrenamiento y simulación.&lt;br /&gt;&lt;br /&gt;Nota del periódico &lt;a href="http://www.elnuevosiglo.com.co/" target="_blank"&gt;El Nuevo Siglo&lt;/a&gt; en pdf:&lt;br /&gt;&lt;br /&gt;&lt;iframe scrolling="no" marginheight="0" marginwidth="0" frameborder="0" style="width:240px;height:66px;margin:3px;padding:0;border:1px solid #dde5e9;background-color:#ffffff;" src="http://cid-37be7b8912605b31.skydrive.live.com/embedrowdetail.aspx/XNA/2009-03-03-NuevoSiglo-CorazonVirtual.pdf"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Nota del periódico El Universal:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eluniversal.com.co/noticias/20090302/ctg_vsn_cirujanos_podran_aprender_a_operar_con_u.html" target="_blank"&gt;Ver nota&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Willy R.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34355436-5678396232558114135?l=mygamingnotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mygamingnotes.blogspot.com/feeds/5678396232558114135/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34355436&amp;postID=5678396232558114135&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/5678396232558114135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/5678396232558114135'/><link rel='alternate' type='text/html' href='http://mygamingnotes.blogspot.com/2009/03/resena-corazon-virtual-con-xna.html' title='Reseña corazon virtual con XNA'/><author><name>Willy R.</name><uri>http://www.blogger.com/profile/15693245798904203785</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_TtTfLPkaaFw/R_BEKK5HSnI/AAAAAAAAAD4/j6nqAg2AzIA/S220/Willly+Apto+2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34355436.post-1148324113407413885</id><published>2009-03-02T15:03:00.003-05:00</published><updated>2009-03-02T15:09:11.654-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET Dynamic Data'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Workshop ASP.NET 3.5</title><content type='html'>El pasado jueves 26 de Febrero, en Microsoft Colombia, fuí el speaker del Workshop de ASP.NET 3.5 y hable un poco sobre temas como características de ASP.NET 2.0, ASP.NET AJAX, ASP.NET MVC y ASP.NET Dynamic Data.&lt;br /&gt;&lt;br /&gt;Si asististe al evento o estas interesado en descargar la presentación, la puedes conseguir aca:&lt;br /&gt;&lt;br /&gt;&lt;iframe scrolling="no" marginheight="0" marginwidth="0" frameborder="0" style="width:240px;height:66px;margin:3px;padding:0;border:1px solid #dde5e9;background-color:#ffffff;" src="http://cid-37be7b8912605b31.skydrive.live.com/embedrowdetail.aspx/Microsoft%20.NET/2009-02-26-Workshop%7C_ASP.NET%203.5.pdf"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Willy R.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34355436-1148324113407413885?l=mygamingnotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mygamingnotes.blogspot.com/feeds/1148324113407413885/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34355436&amp;postID=1148324113407413885&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/1148324113407413885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/1148324113407413885'/><link rel='alternate' type='text/html' href='http://mygamingnotes.blogspot.com/2009/03/workshop-aspnet-35.html' title='Workshop ASP.NET 3.5'/><author><name>Willy R.</name><uri>http://www.blogger.com/profile/15693245798904203785</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_TtTfLPkaaFw/R_BEKK5HSnI/AAAAAAAAAD4/j6nqAg2AzIA/S220/Willly+Apto+2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34355436.post-8350293083185387157</id><published>2008-11-25T17:17:00.004-05:00</published><updated>2008-11-25T17:47:35.405-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Game Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='XNA'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>XNA Game Studio 3.0</title><content type='html'>El 30 de Octubre se lanzó el tan esperado XNA Game Studio 3.0 que expande lo ya mostrado en las versiones anteriores para incluir nueva funcionalidad que entre otras cosas permite a los desarrolladores de juegos de distintos niveles crear juegos y distribuirlos a traves de &lt;a target="_blank" href="http://creators.xna.com/XboxLIVECommunityGames"&gt;Xbox LIVE Community Games&lt;/a&gt; para la Xbox 360, todo esto apuntando a apoyar lo que se ha denominado la &lt;a href="http://www.xbox.com/en-US/live/nxe/"&gt;Nueva Experiencia XBox&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Pero esto no para ahi, no solo se va a poder desarrollar para las plataformas XBox y Windows, ahora tambien se incluye el soporte para crear juegos para el reproductor de medios de Microsoft, el Zune. Esto amplia las posibilidades que tenemos para crear todos los juegos que algunas ves soñamos.&lt;br /&gt;&lt;br /&gt;Algunas otras nuevas características que se incluyen con el Game Studio 3.0 son:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Probar antes de vender&lt;/b&gt;: Esta característica permite a los desarrolladores adicionar la característica de version de prueba o "trial" a los juegos, de modo que se facilite la tarea de entregar a la comunidad una version restringida del juego antes de comprar la version completa.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Invitar amigos&lt;/b&gt;: Ahora los desarrolladores pueden aprovechar mas que nunca las características de multi-jugador de Xbox Live para facilmente incluir la opción de invitar amigos desde el juego.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Integracíón con Visual Studio&lt;/b&gt;: Como era de esperarse, el Game Studio 3.0 soporta C# 3.0, LINQ y la mayoria de versiones de Visual Studio 2008 para dar muchas mas herramientas al desarrollador.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Otras características&lt;/b&gt;: Fácil portabilidad de los juegos entre las plataformas Windows, Xbox 360 y Zune, asistentes de migracion de 2.0 a 3.0 para asegurar la compatibilidad con Xbox LIVE Community Games, instalacion 1-click para los juegos para Windows, compresion mejorada de los recursos y contenido para mejorar los tiempos de descarga, entre muchas otras mejoras en el Framework.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;Solo me resta decir... Enjoy!!!&lt;br /&gt;&lt;br /&gt;Referencia: &lt;a target="_blank" href="http://creators.xna.com/en-us/xnags_islive"&gt;http://creators.xna.com/en-us/xnags_islive&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Willy R.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34355436-8350293083185387157?l=mygamingnotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mygamingnotes.blogspot.com/feeds/8350293083185387157/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34355436&amp;postID=8350293083185387157&amp;isPopup=true' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/8350293083185387157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/8350293083185387157'/><link rel='alternate' type='text/html' href='http://mygamingnotes.blogspot.com/2008/11/xna-game-studio-30.html' title='XNA Game Studio 3.0'/><author><name>Willy R.</name><uri>http://www.blogger.com/profile/15693245798904203785</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_TtTfLPkaaFw/R_BEKK5HSnI/AAAAAAAAAD4/j6nqAg2AzIA/S220/Willly+Apto+2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34355436.post-4832458200239180</id><published>2008-10-15T11:15:00.005-05:00</published><updated>2008-10-15T11:32:07.387-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Game Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='XNA'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Charlas XNA</title><content type='html'>He tenido un poco descuidado mi blog por asuntos laborales y otros mas, pero no he estado inactivo en el tema de desarrollo de video juegos. Esta son algunas charlas que he dado en universidades y hay algunas nuevas proyectadas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;9 de Abril:&lt;/b&gt; Universidad Manuela Beltran (Bogotá)&lt;/li&gt;&lt;li&gt;&lt;b&gt;29 de Agosto:&lt;/b&gt; Universidad Distrital (Bogotá)&lt;/li&gt;&lt;li&gt;&lt;b&gt;16 de Septiembre:&lt;/b&gt; Universidad del Bosque (Bogotá)&lt;/li&gt;&lt;/ul&gt;Esta es la invitación a la charla que hizo la gente de la Universidad del Bosque, muy chevere por cierto.&lt;br /&gt;&lt;a target="_blank" href="http://3.bp.blogspot.com/_TtTfLPkaaFw/SPYadbwhKII/AAAAAAAAAEw/-ksRY4U38DI/s1600-h/Charla+U+El+Bosque.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_TtTfLPkaaFw/SPYadbwhKII/AAAAAAAAAEw/-ksRY4U38DI/s400/Charla+U+El+Bosque.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5257418707971418242" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;Willy R.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34355436-4832458200239180?l=mygamingnotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mygamingnotes.blogspot.com/feeds/4832458200239180/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34355436&amp;postID=4832458200239180&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/4832458200239180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/4832458200239180'/><link rel='alternate' type='text/html' href='http://mygamingnotes.blogspot.com/2008/10/charlas-xna.html' title='Charlas XNA'/><author><name>Willy R.</name><uri>http://www.blogger.com/profile/15693245798904203785</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_TtTfLPkaaFw/R_BEKK5HSnI/AAAAAAAAAD4/j6nqAg2AzIA/S220/Willly+Apto+2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_TtTfLPkaaFw/SPYadbwhKII/AAAAAAAAAEw/-ksRY4U38DI/s72-c/Charla+U+El+Bosque.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34355436.post-2473272116799224281</id><published>2008-06-09T13:25:00.005-05:00</published><updated>2008-06-10T09:51:58.353-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Game Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='XNA'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Dream-Build-Play 2008</title><content type='html'>¿Tienes un buen juego para XBox 360 en mente? ¿Estas dispuesto a implementarlo y ponerlo a competir contra otros juegos? ¿Quieres que tu juego sea reconocido como el mejor y hacer dinero con él? Si tu respuesta es SI, entonces el &lt;a href="http://www.dreambuildplay.com/" target="_blank"&gt;Build-Dream-Play&lt;/a&gt; es para tí. Este concurso organizado por Microsoft busca premiar el mejor juego desarrollado para XBox 360 usando el Game Studio 2.0. Los premios son:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1er puesto : US$ 40,000&lt;br /&gt;2do puesto : US$ 20,000&lt;br /&gt;3er puesto : US$ 10,000&lt;br /&gt;4to puesto : US$ 5,000&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Además no debes preocuparte por la membresía del XNA Creators Club, pues por registrarte en el concurso obtienes una gratis por 12 meses.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Willy R.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34355436-2473272116799224281?l=mygamingnotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mygamingnotes.blogspot.com/feeds/2473272116799224281/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34355436&amp;postID=2473272116799224281&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/2473272116799224281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/2473272116799224281'/><link rel='alternate' type='text/html' href='http://mygamingnotes.blogspot.com/2008/06/dream-build-play-2008.html' title='Dream-Build-Play 2008'/><author><name>Willy R.</name><uri>http://www.blogger.com/profile/15693245798904203785</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_TtTfLPkaaFw/R_BEKK5HSnI/AAAAAAAAAD4/j6nqAg2AzIA/S220/Willly+Apto+2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34355436.post-7617566929771969494</id><published>2008-05-30T10:41:00.002-05:00</published><updated>2008-05-30T10:46:08.672-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Game Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='XNA'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>WebCast: Usando animación y texturas en XNA</title><content type='html'>La Animación y el uso de Texturas son dos factores clave a la hora de dar vida a las creaciones en el mundo de los video juegos. Te invitamos a participar en este evento busca abordar algunos conceptos involucrados en estas labores, como son el sistema de coordenadas, lógica de matrices y transformaciones, vectores, uso de texturas, transparencias y losas.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Fecha&lt;/b&gt; : 19 de junio de 2008, 11:00 a.m. (Hora Colombia)&lt;br /&gt;&lt;b&gt;Dirección de registro&lt;/b&gt; : &lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032380382&amp;Culture=es-AR" target="_blank"&gt;http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032380382&amp;Culture=es-AR&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;Willy R.&lt;/b&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34355436-7617566929771969494?l=mygamingnotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mygamingnotes.blogspot.com/feeds/7617566929771969494/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34355436&amp;postID=7617566929771969494&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/7617566929771969494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/7617566929771969494'/><link rel='alternate' type='text/html' href='http://mygamingnotes.blogspot.com/2008/05/webcast-usando-animacin-y-texturas-en.html' title='WebCast: Usando animación y texturas en XNA'/><author><name>Willy R.</name><uri>http://www.blogger.com/profile/15693245798904203785</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_TtTfLPkaaFw/R_BEKK5HSnI/AAAAAAAAAD4/j6nqAg2AzIA/S220/Willly+Apto+2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34355436.post-5230927092478085256</id><published>2008-04-30T11:22:00.002-05:00</published><updated>2008-04-30T11:28:52.281-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='Rockstar'/><title type='text'>Llega Grand Theft Auto IV</title><content type='html'>Ya salió a la venta el tan esperado juego &lt;b&gt;Grand Theft Auto IV&lt;/b&gt;, del que se espera venga mucho mas cargado de violencia, sexo y mucha diversion. Aquí hay un pequeño adelanto de lo que se podrá hacer en este nuevo título de Rockstar Games, que sin lugar a duda dará mucho de que hablar...&lt;br /&gt;&lt;br /&gt;&lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"  codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" id="gtembed" width="480" height="392"&gt; &lt;param name="allowScriptAccess" value="sameDomain" /&gt; &lt;param name="allowFullScreen" value="true" /&gt; &lt;param name="movie" value="http://www.gametrailers.com/remote_wrap.php?mid=33330"/&gt; &lt;param name="quality" value="high" /&gt; &lt;embed src="http://www.gametrailers.com/remote_wrap.php?mid=33330" swLiveConnect="true" name="gtembed" align="middle" allowScriptAccess="sameDomain" allowFullScreen="true" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="480" height="392"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Willy R.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34355436-5230927092478085256?l=mygamingnotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mygamingnotes.blogspot.com/feeds/5230927092478085256/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34355436&amp;postID=5230927092478085256&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/5230927092478085256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/5230927092478085256'/><link rel='alternate' type='text/html' href='http://mygamingnotes.blogspot.com/2008/04/llega-grand-theft-auto-iv.html' title='Llega Grand Theft Auto IV'/><author><name>Willy R.</name><uri>http://www.blogger.com/profile/15693245798904203785</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_TtTfLPkaaFw/R_BEKK5HSnI/AAAAAAAAAD4/j6nqAg2AzIA/S220/Willly+Apto+2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34355436.post-2794867736860808711</id><published>2008-04-10T14:36:00.007-05:00</published><updated>2008-04-10T14:45:35.260-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Game Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='XNA'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Grabación WebCast: Primeros pasos con XNA y Game Studio 2.0</title><content type='html'>Si te perdiste la presentación del WebCast "Primeros pasos con XNA y Game Studio 2.0" en línea, aún puedes verlo accediendo a esta página: &lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032374567&amp;Culture=es-AR" target="_blank"&gt;http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032374567&amp;Culture=es-AR&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Willy R.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34355436-2794867736860808711?l=mygamingnotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mygamingnotes.blogspot.com/feeds/2794867736860808711/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34355436&amp;postID=2794867736860808711&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/2794867736860808711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/2794867736860808711'/><link rel='alternate' type='text/html' href='http://mygamingnotes.blogspot.com/2008/04/on-demand-webcast-primeros-pasos-con.html' title='Grabación WebCast: Primeros pasos con XNA y Game Studio 2.0'/><author><name>Willy R.</name><uri>http://www.blogger.com/profile/15693245798904203785</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_TtTfLPkaaFw/R_BEKK5HSnI/AAAAAAAAAD4/j6nqAg2AzIA/S220/Willly+Apto+2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34355436.post-1418985825970479384</id><published>2008-03-31T14:47:00.002-05:00</published><updated>2008-03-31T14:56:22.752-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Game Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='XNA'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>WebCast: Primero pasos con XNA y Game Studio 2.0</title><content type='html'>En este WebCast abordaremos los conceptos básicos que se deben tener en cuenta para desarrollar una aplicación de juego en XNA usando el Game Studio 2.0.&lt;br /&gt;&lt;br /&gt;Te invito a registrarte para el evento &lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032374566&amp;EventCategory=4&amp;culture=es-AR&amp;CountryCode=AR" target="_blank"&gt;aquí&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Willy R.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34355436-1418985825970479384?l=mygamingnotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mygamingnotes.blogspot.com/feeds/1418985825970479384/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34355436&amp;postID=1418985825970479384&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/1418985825970479384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/1418985825970479384'/><link rel='alternate' type='text/html' href='http://mygamingnotes.blogspot.com/2008/03/webcast-primero-pasos-con-xna-y-game.html' title='WebCast: Primero pasos con XNA y Game Studio 2.0'/><author><name>Willy R.</name><uri>http://www.blogger.com/profile/15693245798904203785</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_TtTfLPkaaFw/R_BEKK5HSnI/AAAAAAAAAD4/j6nqAg2AzIA/S220/Willly+Apto+2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34355436.post-8149425465651875594</id><published>2008-03-10T12:07:00.004-05:00</published><updated>2008-03-10T12:15:25.663-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Game Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='XNA'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Artículo en la Revista Técnica de Ineta LATAM</title><content type='html'>Hola. Quiero compartir con ustedes el artículo &lt;i&gt;&lt;b&gt;"Comenzando con XNA y Game Studio 2.0"&lt;/b&gt;&lt;/i&gt; que escribí recientemente y que fué publicado en la edición de Febrero de 2008 de la revista técnica de Ineta LATAM, la cual pueden descargar de &lt;a target="_blank" href="http://www.inetalatam.org/Revista/Revista.aspx"&gt;http://www.inetalatam.org/Revista/Revista.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Willy R.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34355436-8149425465651875594?l=mygamingnotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mygamingnotes.blogspot.com/feeds/8149425465651875594/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34355436&amp;postID=8149425465651875594&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/8149425465651875594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/8149425465651875594'/><link rel='alternate' type='text/html' href='http://mygamingnotes.blogspot.com/2008/03/artculo-en-la-revista-tcnica-de-ineta.html' title='Artículo en la Revista Técnica de Ineta LATAM'/><author><name>Willy R.</name><uri>http://www.blogger.com/profile/15693245798904203785</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_TtTfLPkaaFw/R_BEKK5HSnI/AAAAAAAAAD4/j6nqAg2AzIA/S220/Willly+Apto+2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34355436.post-8258909279888609673</id><published>2007-08-26T22:34:00.000-05:00</published><updated>2007-08-27T22:14:38.882-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='DirectX'/><title type='text'>Crear una aplicación Direct3D con Visual C++ 2005 - Parte 4: Luces</title><content type='html'>&lt;div align="justify"&gt;Hola. En esta ocasión quiero continuar con la serie de post sobre como "Crear una aplicación Direct3D usando Visual C++ 2005". Ahora vamos a revisar los pasos necesarios para adicionar luces a nuestra escena 3D.&lt;br /&gt;&lt;br /&gt;Las luces son una importante característica de las aplicaciones Direct3D, ya que ayudan a mejorar la apariencia y el realismo de las escenas. Para esto, es necesario revisar el concepto matemático de los vectores normales, quienes finalmente definen como inciden las luces de la escena en un punto o vértice de los objetos que se estén dibujando.Un vector normal es un vector unidad que describe la dirección hacia la que está mirando un vértice o polígono. En la siguiente gráfica se observa el vector normal &lt;b&gt;&lt;i&gt;N&lt;/i&gt;&lt;/b&gt;, que representa “el lado del frente” o “vector normal” del vértice representado por el punto &lt;b&gt;&lt;i&gt;P0&lt;/i&gt;&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_TtTfLPkaaFw/RtOJtAFu0hI/AAAAAAAAADM/5SUcfx6q-uk/s1600-h/Normal+vector.jpg" target="_blank"&gt;&lt;img id="BLOGGER_PHOTO_ID_5103574208952062482" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp3.blogger.com/_TtTfLPkaaFw/RtOJtAFu0hI/AAAAAAAAADM/5SUcfx6q-uk/s400/Normal+vector.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Cuando el motor gráfico de Direct3D procesa un conjunto de vértices que contienen información de sus vectores normales, usa dichos datos para calcular como afecta la luz a cada vértice y de esta manera determinar la intensidad con que se dibuja finalmente cada uno de ellos.&lt;br /&gt;&lt;br /&gt;En nuestra aplicación debemos cambiar el tipo &lt;i&gt;CUSTOMVERTEX&lt;/i&gt; para que contenga las coordenadas &lt;i&gt;(X, Y, Z)&lt;/i&gt; del vértice y la información del vector normal, así como también la definición del formato flexible de vértice:&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;/* Estructura para almacenar la informacion de los vértices */&lt;br /&gt;struct CUSTOMVERTEX&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;D3DXVECTOR3 position; // Posición 3D para el vértice&lt;br /&gt;&amp;nbsp;&amp;nbsp;D3DXVECTOR3 normal;   // Vector normal del vértice&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;/* Formato de Vertice Flexible para CUSTOMVERTEX */&lt;br /&gt;#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_NORMAL)&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;En esta ocasión vamos a dibujar un cilindro, el cual es una figura que requiere muchos más vértices que un triangulo simple, así que cambiamos la creación e inicialización del buffer de vértices como se ve en el siguiente fragmento de código.&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;// Crea el buffer de vértices&lt;br /&gt;if (FAILED (m_pD3DDevice-&gt;CreateVertexBuffer (50*2*sizeof (CUSTOMVERTEX),&lt;br /&gt;&amp;nbsp;&amp;nbsp;0 /*Usage*/, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &amp;m_pVertexBuffer, NULL)))&lt;br /&gt;&amp;nbsp;&amp;nbsp;return 0;&lt;br /&gt;&lt;br /&gt;CUSTOMVERTEX* pVertices;&lt;br /&gt;&lt;br /&gt;// Bloquea el buffer y obtiene un puntero a su memoria&lt;br /&gt;if (FAILED (m_pVertexBuffer-&gt;Lock (0, 0, (void**)&amp;pVertices, 0)))&lt;br /&gt;&amp;nbsp;&amp;nbsp;return E_FAIL;&lt;br /&gt;&lt;br /&gt;// Crea los puntos del cilindro&lt;br /&gt;for (DWORD i=0; i&lt;50; i++)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;FLOAT theta = (2*D3DX_PI*i)/(50-1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;pVertices[2*i+0].position = D3DXVECTOR3 (sinf(theta),-1.0f, cosf(theta));&lt;br /&gt;&amp;nbsp;&amp;nbsp;pVertices[2*i+0].normal   = D3DXVECTOR3 (sinf(theta), 0.0f, cosf(theta));&lt;br /&gt;&amp;nbsp;&amp;nbsp;pVertices[2*i+1].position = D3DXVECTOR3 (sinf(theta), 1.0f, cosf(theta));&lt;br /&gt;&amp;nbsp;&amp;nbsp;pVertices[2*i+1].normal   = D3DXVECTOR3 (sinf(theta), 0.0f, cosf(theta));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Desbloquea el buffer&lt;br /&gt;m_pVertexBuffer-&gt;Unlock ();&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;Para iluminar la escena 3D podemos usar 1 o varias luces. Para determinar el color que refleja un objeto cuando una luz golpea en él, usamos un material declarándolo mediante el tipo estructurado &lt;i&gt;D3DMATERIAL9&lt;/i&gt; y fijamos el color difuso y de ambiente a amarillo. Luego lo asignamos al dispositivo mediante una llamada al método &lt;i&gt;IDirect3DDevice9::SetMaterial&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;/* Crea un material para la luz */&lt;br /&gt;D3DMATERIAL9 mtrl;&lt;br /&gt;ZeroMemory (&amp;mtrl, sizeof(mtrl));&lt;br /&gt;mtrl.Diffuse.r = mtrl.Ambient.r = 1.0f;&lt;br /&gt;mtrl.Diffuse.g = mtrl.Ambient.g = 1.0f;&lt;br /&gt;mtrl.Diffuse.b = mtrl.Ambient.b = 0.0f;&lt;br /&gt;mtrl.Diffuse.a = mtrl.Ambient.a = 1.0f;&lt;br /&gt;m_pD3DDevice-&gt;SetMaterial (&amp;mtrl);&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;El siguiente paso es crear y asignar las luces que vamos a usar. En Direct3D podemos hacer uso de 3 tipos de luces:&lt;ul&gt;&lt;li&gt;Luz de punto: Este tipo de luz tiene un color y una posición en la escena, pero no tiene una dirección definida, es decir, emite luz igualmente en todas las direcciones. Este tipo de luz es similar a la emitida por una bombilla en una habitación.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Luz direccional: La luz direccional únicamente tiene color y dirección, pero no posición. Esto es, la luz viaja en la misma dirección a través de toda la escena. Esta luz es comparable con la luz del sol en la tierra, ya que por la distancia a la que se encuentra el sol, todos sus rayos llegan casi paralelos a la tierra.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Luz de foco o SpotLight. Esta luz se define mediante un color, posición y dirección en la que se emite. Es similar a la luz emitida por una linterna, la cual disminuye su intensidad con respecto a la distancia al punto de luz y al centro del chorro de luz definido por el vector de dirección.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;En nuestro ejemplo vamos a crear una luz direccional de color blanco y vamos a hacer que gire alrededor del eje Y modificando el vector de dirección con relación al tiempo actual.&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;/* Crea una luz direccional */&lt;br /&gt;D3DLIGHT9 light;&lt;br /&gt;ZeroMemory (&amp;light, sizeof(light));&lt;br /&gt;light.Type = D3DLIGHT_DIRECTIONAL; &lt;br /&gt;&lt;br /&gt;/* Fija el color difuso para esta luz a blanco */&lt;br /&gt;light.Diffuse.r = 1.0f;&lt;br /&gt;light.Diffuse.g = 1.0f;&lt;br /&gt;light.Diffuse.b = 1.0f;&lt;br /&gt;&lt;br /&gt;/* Rota la luz alrededor del eje Y */&lt;br /&gt;D3DXVECTOR3 vecDir;&lt;br /&gt;vecDir = D3DXVECTOR3 (cosf(timeGetTime()/350.0f),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0.0f,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sinf(timeGetTime()/350.0f));&lt;br /&gt;D3DXVec3Normalize ((D3DXVECTOR3*)&amp;light.Direction, &amp;vecDir);&lt;br /&gt;&lt;br /&gt;/* Range de alcance de la luz */&lt;br /&gt;light.Range = 1000.0f;&lt;br /&gt;&lt;br /&gt;/* Fija la luz en el dispositivo */&lt;br /&gt;m_pD3DDevice-&gt;SetLight (0, &amp;light);&lt;br /&gt;&lt;br /&gt;/* Habilita la luz anterior */&lt;br /&gt;m_pD3DDevice-&gt;LightEnable (0, TRUE);&lt;br /&gt;&lt;br /&gt;/* Indica al dispositivo que se van a usar luces */&lt;br /&gt;m_pD3DDevice-&gt;SetRenderState (D3DRS_LIGHTING, TRUE);&lt;br /&gt;&lt;br /&gt;/* Fija un color para la luz de ambiente */&lt;br /&gt;m_pD3DDevice-&gt;SetRenderState (D3DRS_AMBIENT, 0x00202020);&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;Observe que el primer parámetro en la llamada a los métodos &lt;i&gt;IDirect3DDevice9::SetLight&lt;/i&gt; y &lt;i&gt;IDirect3DDevice9::LightEnable&lt;/i&gt; se pasa un cero (0), esto se debe a que podemos tener varias luces definidas en una escena y encenderlas o apagarlas a nuestro antojo usando dicho índice. Finalmente se habilita el uso de luces llamando al método &lt;i&gt;IDirect3DDevice9::SetRenderState&lt;/i&gt; con la constante &lt;i&gt;D3DRS_LIGHTING&lt;/i&gt; y el valor &lt;i&gt;TRUE&lt;/i&gt;, y también se fija la luz de ambiente a un color gris llamando al mismo método usando la constante &lt;i&gt;D3DRS_AMBIENT&lt;/i&gt; y el valor &lt;i&gt;0x00202020&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Al ejecutar el ejemplo podemos ver nuestro cilindro girando en torno al eje X y también que la luz que lo ilumina gira en torno al eje Y. Para modificar el movimiento del cilindro debes modificar el código para fijar la transformación de mundo en el método &lt;i&gt;SetupMatrices&lt;/i&gt; y si deseas modificar el movimiento de la luz debes modificar el vector de dirección de la misma en el método &lt;i&gt;SetupLights&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" href="http://bp2.blogger.com/_TtTfLPkaaFw/RtOOPwFu0iI/AAAAAAAAADU/j0FZfkKWJa4/s1600-h/Output.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_TtTfLPkaaFw/RtOOPwFu0iI/AAAAAAAAADU/j0FZfkKWJa4/s400/Output.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5103579203999027746" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Como ya es costumbre, puedes descargar el código de este ejemplo desde &lt;a href="http://www.unicauca.edu.co/~warivera/files/2007-08-27-MyDirect3DApp.zip"&gt;aquí&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Espero que esta información haya sido útil y de tu agrado. Hasta la próxima.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Willy R.&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34355436-8258909279888609673?l=mygamingnotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mygamingnotes.blogspot.com/feeds/8258909279888609673/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34355436&amp;postID=8258909279888609673&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/8258909279888609673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/8258909279888609673'/><link rel='alternate' type='text/html' href='http://mygamingnotes.blogspot.com/2007/08/crear-una-aplicacin-direct3d-con-visual.html' title='Crear una aplicación Direct3D con Visual C++ 2005 - Parte 4: Luces'/><author><name>Willy R.</name><uri>http://www.blogger.com/profile/15693245798904203785</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_TtTfLPkaaFw/R_BEKK5HSnI/AAAAAAAAAD4/j6nqAg2AzIA/S220/Willly+Apto+2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_TtTfLPkaaFw/RtOJtAFu0hI/AAAAAAAAADM/5SUcfx6q-uk/s72-c/Normal+vector.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34355436.post-7470826081572162259</id><published>2007-07-04T23:14:00.000-05:00</published><updated>2007-07-05T14:30:22.953-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='DirectX'/><title type='text'>Crear una aplicación Direct3D con Visual C++ 2005 - Parte 3: Transformaciones</title><content type='html'>&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;Continuando con la serie de posts sobre cómo crear una aplicación Direct3D con Visual C++ 2005 y habiendo aprendido a dibujar vértices transformados, es hora de abordar el dibujado de vértices propiamente en 3D para lo cual es necesario conocer y manejar el concepto de transformaciones, mediante las cuales se indica al sistema de Direct3D el lugar en el espacio con respecto a un origen en el que se encuentran los vértices, el punto y orientación desde el cual se están mirando y finalmente como se va a realizar la transformación de esa vista en 3D para proyectarla en una pantalla 2D.&lt;br /&gt;&lt;br /&gt;La primera transformación, denominada Transformación de Mundo, nos permite Trasladar, Escalar y Rotar la geometría (los vértices) en el espacio 3D. Cada transformación es matemáticamente definida mediante una matriz de 16x16 especificada en C++ usando el tipo D3DXMATRIXA16. Para inicializar una matriz con los valores adecuados, la API de Direct3D provee una serie de funciones que nos ayudan con esta tarea. En nuestro ejemplo vamos a crear una matriz que represente una rotación de los vértices en torno al eje Y según el tiempo actual usando la función D3DXMatrixRotationY.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;/* Declara la matriz para la transformacion de mundo */&lt;br /&gt;D3DXMATRIXA16 matWorld;&lt;br /&gt;&lt;br /&gt;/* Calcula el ángulo basado en el tiempo transcurrido para realizar un giro de 180° cada segundo */&lt;br /&gt;UINT  iTime  = timeGetTime() % 1000;&lt;br /&gt;FLOAT fAngle = iTime * (2.0f * D3DX_PI) / 1000.0f;&lt;br /&gt;&lt;br /&gt;/* Inicializa la matriz con una transformacion de rotacion alrededor del eje Y */&lt;br /&gt;D3DXMatrixRotationY (&amp;matWorld, fAngle);&lt;br /&gt;&lt;br /&gt;/* Fija la transformación de mundo para el dispositivo */&lt;br /&gt;m_pD3DDevice-&gt;SetTransform (D3DTS_WORLD, &amp;matWorld);&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;Otras funciones para trabajar con la matriz de transformación de mundo son: D3DXMatrixRotationY, D3DXMatrixRotationAxis, D3DXMatrixTranslation, D3DXMatrixScaling, entre otras.&lt;br /&gt;&lt;br /&gt;La siguiente transformación, la Transformación de Vista, define la posición y rotación de la vista. Esta transformación puede ser vista como la cámara de la escena y generalmente es calculada a partir de 3 vectores: el punto de vista, el punto a mirar, y la dirección “arriba”. Cómo su nombre lo indica el punto de vista es la ubicación de la cámara o del ojo que está mirando la escena, el punto a mirar representa el punto hacia el cual está apuntando la cámara desde su ubicación, y finalmente la dirección arriba es un vector que define cómo esta rotada la cámara, por ejemplo, la escena puede estar siendo observada con la cámara boca abajo o girada hacia un costado en un ángulo dado.&lt;br /&gt;&lt;br /&gt;El siguiente fragmento de código define una matriz de Transformación de Vista usando como punto de vista la posición (0.0, 3.0, -5.0) del espacio (X, Y, Z) respectivamente, como punto a mirar la posición (0.0, 0.0, 0.0) y como vector arriba el vector (0.0, 1.0, 0.0) que define el eje Y positivo como el lado arriba de la cámara.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;/* Vector punto de vista */&lt;br /&gt;D3DXVECTOR3 vEyePt (0.0f, 3.0f, -5.0f);&lt;br /&gt;&lt;br /&gt;/* Vector punto a mirar */&lt;br /&gt;D3DXVECTOR3 vLookatPt (0.0f, 0.0f, 0.0f);&lt;br /&gt;&lt;br /&gt;/* Vector lado arriba */&lt;br /&gt;D3DXVECTOR3 vUpVec (0.0f, 1.0f, 0.0f);&lt;br /&gt;&lt;br /&gt;/* Declara la matriz de vista */&lt;br /&gt;D3DXMATRIXA16 matView;&lt;br /&gt;D3DXMatrixLookAtLH (&amp;matView, &amp;vEyePt, &amp;vLookatPt, &amp;vUpVec);&lt;br /&gt;&lt;br /&gt;/* Fija la transformacion de vista para el dispositivo */&lt;br /&gt;m_pD3DDevice-&gt;SetTransform (D3DTS_VIEW, &amp;matView);&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;Cuando dibujamos una escena 3D en DirectX, en realidad lo que hacemos es una proyección del espacio de vista 3D a un espacio o puerto de vista 2D, en ultimas, nuestra pantalla del PC. Para definir cómo se debe hacer esa proyección usamos la Transformación de Proyección. Típicamente la matriz para aplicar esta transformación se calcula usando la función D3DXMatrixPerspectiveFovLH como se muestra en siguiente ejemplo.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;/* Declara la matriz para la transformación de proyección */&lt;br /&gt;D3DXMATRIX matProj;&lt;br /&gt;&lt;br /&gt;/* Inicializa la matriz con un campo de vista de PI/4, relacion de aspecto de 1.0, plano cercano de 1.0 y plano lejano de 100.0 */&lt;br /&gt;D3DXMatrixPerspectiveFovLH (&amp;matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f);&lt;br /&gt;&lt;br /&gt;/* Fija la transformación de proyección para el dispositivo */&lt;br /&gt;m_pD3DDevice-&gt;SetTransform (D3DTS_PROJECTION, &amp;matProj);&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;Los parámetros pasados a la función D3DXMatrixPerspectiveFovLH son: la referencia a la matriz a inicializar, el campo de vista, la relación de aspecto y los planos cercano y lejano respectivamente. El campo de vista es el ángulo de visualización de la escena en el eje Y (o vector arriba) definido en la transformación de vista. La relación de aspecto es definida como el campo de vista divido entre la altura (típicamente 1.0). El plano cercano es la distancia mínima necesaria a la que un objeto se debe encontrar de la cámara para poder ser “dibujado” y el plano lejano es la distancia máxima en que los objetos se dibujan en la escena.&lt;br /&gt;&lt;br /&gt;Este es el proceso necesario para fijar las transformaciones de Mundo, Vista y Proyección y en nuestro ejemplo este código se encuentra definido en la función SetupMatrices de la clase MyD3DApplication y es llamada dentro del método Render, luego de la llamada a BeginEscene. Cuando se hace la llamada a DrawPrimitive, el dispositivo usa la información fijada para las transformaciones y las aplica a las primitivas dibujadas para calcular el resultado final de la operación y guardarlo en el buffer actual (* Las operaciones DrawPrimitive no se dibujan inmediatamente en la pantalla sino en un buffer trasero y es cuando se llama al método Present que se toma la información del siguiente buffer trasero y se muestra en el dispositivo de visualización).&lt;br /&gt;&lt;br /&gt;Adicionalmente para que nuestro ejemplo funcione correctamente vamos a cambiar la definición de nuestro CUSTOMVERTEX y D3DFVF_CUSTOMVERTEX como se muestra a continuación usando la posición no transformada y el color.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;/* Estructura para almacenar la informacion de los vértices */&lt;br /&gt;struct CUSTOMVERTEX&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;FLOAT x, y, z; // Posición 3D NO transformada para el vértice&lt;br /&gt;&amp;nbsp;&amp;nbsp;DWORD color;   // Color del vértice&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;/* Formato de Vertice Flexible para CUSTOMVERTEX */&lt;br /&gt;#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE)&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;Además vamos a cambiar los valores usados para los vértices del triángulo a los siguientes con el fin de que se ubiquen dentro del campo de vista fijado en las transformaciones.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;/* Define los vertices para el triangulo */&lt;br /&gt;CUSTOMVERTEX vertices[] =&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;{ -1.0f, -1.0f, 0.0f, 0xffff0000, },&lt;br /&gt;&amp;nbsp;&amp;nbsp;{ 1.0f, -1.0f, 0.0f, 0xff0000ff, },&lt;br /&gt;&amp;nbsp;&amp;nbsp;{ 0.0f, 1.0f, 0.0f, 0xffffffff, },&lt;br /&gt;};&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;Al ejecutar el código para este ejemplo (que puedes descargar desde &lt;a href="http://www.unicauca.edu.co/~warivera/files/2007-07-04-MyDirect3DApp.zip"&gt;aquí&lt;/a&gt;) podemos ver el siguiente triángulo girando en el espacio 3D.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_TtTfLPkaaFw/Roxz8fsJaTI/AAAAAAAAACk/xsmoAXYrJe0/s1600-h/Triangle.png" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_TtTfLPkaaFw/Roxz8fsJaTI/AAAAAAAAACk/xsmoAXYrJe0/s400/Triangle.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5083565562530457906" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;Este triángulo se está dibujando con coordenadas no transformadas, lo que da más realismo y sensación de 3D al resultado final, sin embargo el color producido por cada vértice es el mismo sin importar su ubicación, esto es porque se está usando el color propio de cada vértice y no se está usando la característica de luces de Direct3D. En una próxima entrada trataremos esta interesante característica que ayuda a realzar el realismo de la escena 3D.&lt;br /&gt;&lt;br /&gt;Código del ejemplo: &lt;a href="http://www.unicauca.edu.co/~warivera/files/2007-07-04-MyDirect3DApp.zip"&gt;Descargar&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hasta la próxima.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Willy R.&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34355436-7470826081572162259?l=mygamingnotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mygamingnotes.blogspot.com/feeds/7470826081572162259/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34355436&amp;postID=7470826081572162259&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/7470826081572162259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/7470826081572162259'/><link rel='alternate' type='text/html' href='http://mygamingnotes.blogspot.com/2007/07/crear-una-aplicacin-direct3d-con-visual.html' title='Crear una aplicación Direct3D con Visual C++ 2005 - Parte 3: Transformaciones'/><author><name>Willy R.</name><uri>http://www.blogger.com/profile/15693245798904203785</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_TtTfLPkaaFw/R_BEKK5HSnI/AAAAAAAAAD4/j6nqAg2AzIA/S220/Willly+Apto+2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_TtTfLPkaaFw/Roxz8fsJaTI/AAAAAAAAACk/xsmoAXYrJe0/s72-c/Triangle.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34355436.post-8937597276250300944</id><published>2007-06-11T20:52:00.000-05:00</published><updated>2007-06-11T21:39:19.904-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='DirectX'/><title type='text'>Crear una aplicación Direct3D con Visual C++ 2005 (Parte 2)</title><content type='html'>&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;En el post anterior vimos como inicializar una ventana para una aplicación usando la API de Windows y luego como adquirir los objetos IDirect3D9 e IDirect3DDevice9, los cuales son necesarios para dibujar escenas en 3D usando DirectX 9. Sin embargo, no vimos como usar dichos objetos para mostrar nuestra escena en la pantalla.&lt;br /&gt;&lt;br /&gt;En esta ocasión quiero mostrar algunos de los conceptos básicos usados para trabajar en 3D y realizar un demo simple para dibujar vértices en la pantalla.&lt;br /&gt;&lt;br /&gt;En mi concepto, la finalidad de una aplicación Direct3D es mostrar en una pantalla plana (2D) “la imagen de cómo se vería una escena en 3 dimensiones vista desde cierto punto y bajo ciertas condiciones de luz y otras”. Para lograr esto las aplicaciones Direct3D usan muchos vértices, los cuales son “puntos” de un objeto que al agruparse, generalmente formando triángulos, pueden dar forma a un objeto en 3 dimensiones.&lt;br /&gt;&lt;br /&gt;Para hacerlo práctico y por cuestiones de simplicidad vamos a comenzar por dibujar un triángulo usando vértices transformados. Un vértice transformado en realidad está en coordenadas 2D de la ventana, lo cual quiere decir que el punto (0,0) está en la esquina superior izquierda de la ventana, el eje X positivo esta a la derecha y el eje Y positivo es hacia abajo. Este tipo de vértices no usan luces de Direct3D porque ellos proporcionan su propio color.&lt;br /&gt;&lt;br /&gt;Lo primero que hacemos es definir un tipo de estructura en el que podamos almacenar los datos de nuestros vértices (El código de este ejemplo usa la información del post anterior, aunque dicha funcionalidad se encapsulo en las clases WinApplication y D3DApplication; el código de la estructura CUSTOMVERTEX se encuentra en el archivo MyD3DApplication.h donde se define la clase para este ejemplo).&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;/* Estructura para almacenar la informacion de los vértices */&lt;br /&gt;struct CUSTOMVERTEX&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;FLOAT x, y, z, rhw; // Posición transformada para el vértice&lt;br /&gt;&amp;nbsp;&amp;nbsp;DWORD color; // Color del vértice&lt;br /&gt;};&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;Posteriormente debemos definir el FVF (Flexible Vertex Format) para nuestro tipo CUSTOMVERTEX, esto es un valor que indique al motor de Direct3D que información vamos a pasar para cada vértice en las operaciones de dibujado.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;/* Formato de Vertice Flexible para CUSTOMVERTEX */&lt;br /&gt;#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;Aquí D3DFVF_XYZRHW indica un punto transformado y D3DFVF_DIFFUSE indica el color del vértice.&lt;br /&gt;&lt;br /&gt;Una vez que hemos definido el FVF podemos inicializar los valores para los tres (3) vértices del triángulo que queremos dibujar (Esto se hace en el método InitDirect3D en el archivo MyD3DApplication.cpp).&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;// Define los vertices para el triangulo&lt;br /&gt;CUSTOMVERTEX vertices[] =&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;{ 320.0f,  50.0f, 0.5f, 1.0f, 0xffff0000, }, // x, y, z, rhw, color&lt;br /&gt;&amp;nbsp;&amp;nbsp;{ 490.0f, 350.0f, 0.5f, 1.0f, 0xff00ff00, },&lt;br /&gt;&amp;nbsp;&amp;nbsp;{ 150.0f, 350.0f, 0.5f, 1.0f, 0xffff00ff, },&lt;br /&gt;};&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;Esto define tres (3) vértices para nuestro triangulo en las posiciones de pantalla (320, 50), (490, 350) y (150, 350) y de colores rojo, verde y rojo-azul respectivamente. Luego de esto debemos llamar al método IDirect3DDevice9::CreateVertexBuffer para crear el buffer de vértices en el dispositivo.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;// Crea el buffer de vértices&lt;br /&gt;if (FAILED (m_pD3DDevice-&gt;CreateVertexBuffer (3*sizeof (CUSTOMVERTEX),&lt;br /&gt;&amp;nbsp;&amp;nbsp;0 /*Usage*/, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &amp;m_pVertexBuffer, NULL)))&lt;br /&gt;&amp;nbsp;&amp;nbsp;return 0;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;Los parámetros de CreateVertexBuffer indican el tamaño del buffer, el uso (0 o una combinación de constantes D3DUSAGE), el formato de los vértices, la clase de memoria que va a almacenar el buffer y la dirección del puntero al buffer (LPDIRECT3DVERTEXBUFFER9, equivalente a IDirect3DVertexBuffer9 *). El último parámetro es reservado y debe fijarse a NULL. De aquí cabe destacar que D3DPOOL_DEFAULT indica que el buffer se alojará en la memoria más conveniente, generalmente memoria de video.&lt;br /&gt;&lt;br /&gt;Después de crear el buffer, es necesario copiar en él los datos de los vértices. Para hacer esto hay que bloquear el buffer usando el método IDirect3DVertexBuffer9::Lock. Si se puede bloquear, éste método fija en un puntero la dirección de memoria del inicio del buffer, con lo cual se pueden copiar los datos y posteriormente desbloquearlo.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;VOID* pVertices;&lt;br /&gt;&lt;br /&gt;// Bloquea el buffer y obtiene un puntero a su memoria&lt;br /&gt;if (FAILED (m_pVertexBuffer-&gt;Lock (0, sizeof (vertices), (void**)&amp;pVertices, 0)))&lt;br /&gt;&amp;nbsp;&amp;nbsp;return E_FAIL;&lt;br /&gt;&lt;br /&gt;// Copia los datos de los vértices a la memoria del buffer&lt;br /&gt;memcpy (pVertices, vertices, sizeof (vertices));&lt;br /&gt;&lt;br /&gt;// Desbloquea el buffer&lt;br /&gt;m_pVertexBuffer-&gt;Unlock ();&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;Finalmente es hora de renderizar lo hecho. Para esto vamos al método MyD3DApplication::Render en donde se llaman las operaciones IDirect3DDevice9:: BeginScene y IDirect3DDevice9::EndScene entre las cuales se deben realizar todas las operaciones de dibujado. Lo primero es fijar la fuente de datos para el dispositivo llamando al método IDirect3DDevice9::SetStreamSource pasando el puntero a nuestro buffer de vértices.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;/* Fijar la fuente para la operacion de dibujado */&lt;br /&gt;m_pD3DDevice-&gt;SetStreamSource (0, m_pVertexBuffer, 0, sizeof (CUSTOMVERTEX));&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;Luego fijamos el formato de vértice flexible que usa el buffer y llamamos al método IDirect3DDevice9::DrawPrimitive para hacer que el dispositivo “dibuje” el triangulo pasándole el valor constante del tipo de primitiva D3DPT_TRIANGLELIST, el cual indica al dispositivo que se va a dibujar una lista de triángulos desde el buffer (Aunque en nuestro caso es solo un triángulo como se indica en el último parámetro).&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;/* Fijar el formato de vértices de la fuente */&lt;br /&gt;m_pD3DDevice-&gt;SetFVF (D3DFVF_CUSTOMVERTEX);&lt;br /&gt;&lt;br /&gt;/* Dibuja el triangulo desde el buffer */&lt;br /&gt;m_pD3DDevice-&gt;DrawPrimitive (D3DPT_TRIANGLELIST, 0, 1);&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;Con esto terminamos los pasos necesarios para dibujar el triangulo en la pantalla como vemos en la siguiente imagen donde se ve que cada vértice representa una esquina y que cada una tiene un color diferente que se mezcla suavemente en el centro con el color de los demás vértices.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_TtTfLPkaaFw/Rm4CjcmV_MI/AAAAAAAAACc/eFJRwADnrMY/s1600-h/Triangle.png" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_TtTfLPkaaFw/Rm4CjcmV_MI/AAAAAAAAACc/eFJRwADnrMY/s400/Triangle.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5074996638088821954" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Este ejemplo ya hace uso del objeto IDirect3DDevice9 para dibujar objetos en la pantalla aunque en un modo transformado. En un siguiente post veremos cómo usar vértices no transformados y usar transformaciones para modificar la escena 3D.&lt;br /&gt;&lt;br /&gt;El código de este ejemplo para Visual Studio 2005 lo puedes descargar desde &lt;a href="http://www.unicauca.edu.co/~warivera/files/2007-06-11-MyDirect3DApp.zip"&gt;aquí&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Willy R.&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34355436-8937597276250300944?l=mygamingnotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mygamingnotes.blogspot.com/feeds/8937597276250300944/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34355436&amp;postID=8937597276250300944&amp;isPopup=true' title='6 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/8937597276250300944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/8937597276250300944'/><link rel='alternate' type='text/html' href='http://mygamingnotes.blogspot.com/2007/06/crear-una-aplicacin-direct3d-con-visual.html' title='Crear una aplicación Direct3D con Visual C++ 2005 (Parte 2)'/><author><name>Willy R.</name><uri>http://www.blogger.com/profile/15693245798904203785</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_TtTfLPkaaFw/R_BEKK5HSnI/AAAAAAAAAD4/j6nqAg2AzIA/S220/Willly+Apto+2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_TtTfLPkaaFw/Rm4CjcmV_MI/AAAAAAAAACc/eFJRwADnrMY/s72-c/Triangle.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34355436.post-8530130777757033928</id><published>2007-05-03T15:12:00.000-05:00</published><updated>2007-05-03T20:58:12.522-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='DirectX'/><title type='text'>Crear una aplicación Direct3D con Visual C++ 2005</title><content type='html'>&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;En esta ocasión quiero mostrar un ejemplo de cómo usar la API (Application Programming Interface) de DirectX y la API de Windows para crear una aplicación Direct3D. Para esto necesitamos tener el siguiente software instalado:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Microsoft Visual Studio 2005 (o también puedes usar el Visual C++ 2005 Express Edition junto con el Platform SDK que puedes descargar desde &lt;a href="http://msdn.microsoft.com/vstudio/express/visualc/" target="_blank"&gt;http://msdn.microsoft.com/vstudio/express/visualc/&lt;/a&gt;)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;El SDK de DirectX que puedes descargar desde &lt;a href="http://msdn2.microsoft.com/es-co/xna/aa937788.aspx" target="_blank"&gt;http://msdn2.microsoft.com/es-co/xna/aa937788.aspx&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Lo primero que hacemos es crear un proyecto de Aplicación de Consola de Win32 en lenguaje Visual C++ (o también puedes seleccionar proyecto de Aplicación de Windows Forms), como muestra la siguiente imagen.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_TtTfLPkaaFw/RjpD7KNqaEI/AAAAAAAAABs/hWaltbF5g7w/s1600-h/01.+NewProject..png" target="_blank"&gt;&lt;img id="BLOGGER_PHOTO_ID_5060431814937176130" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp2.blogger.com/_TtTfLPkaaFw/RjpD7KNqaEI/AAAAAAAAABs/hWaltbF5g7w/s400/01.+NewProject..png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Luego de esto nos muestra un asistente de configuración de la aplicación en el que seleccionamos las opciones Aplicación de Windows y Proyecto Vacio (es importante aquí seleccionar Aplicación de Windows ya que esto configura algunas directivas en el compilador para que nuestro código funcione).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_TtTfLPkaaFw/RjpE7KNqaFI/AAAAAAAAAB0/Q0yeCBymmFA/s1600-h/02.+AppSettings.png" target="_blank"&gt;&lt;img id="BLOGGER_PHOTO_ID_5060432914448803922" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp2.blogger.com/_TtTfLPkaaFw/RjpE7KNqaFI/AAAAAAAAAB0/Q0yeCBymmFA/s400/02.+AppSettings.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Con esto hemos creado un proyecto vacio, así que lo siguiente que hacemos es agregar un archivo llamado main.cpp y en él vamos a incluir la librería &lt;windows.h&gt;y el método WinMain (que es el punto de entrada de la aplicación de Windows).&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;#include &amp;lt;windows.h&amp;gt;&lt;br /&gt;&lt;br /&gt;int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;return 0;&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;Para poder mostrar una ventana debemos primero definir y registrar la clase de Windows que va a usar.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;/* Inicializar la clase a registrar */&lt;br /&gt;WNDCLASSEX wc =&lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;sizeof(WNDCLASSEX), // Tamaño de la estructura&lt;br /&gt;&amp;nbsp;&amp;nbsp;CS_CLASSDC, // Class style&lt;br /&gt;&amp;nbsp;&amp;nbsp;MsgProc, // Procedimiento de ventana&lt;br /&gt;&amp;nbsp;&amp;nbsp;0L, // Bytes extra. Fijar a 0L&lt;br /&gt;&amp;nbsp;&amp;nbsp;0L, // Bytes extra. Fijar a 0L&lt;br /&gt;&amp;nbsp;&amp;nbsp;hInst, // Instancia que contiene el proc. ventana para la clase&lt;br /&gt;&amp;nbsp;&amp;nbsp;NULL, // Icono&lt;br /&gt;&amp;nbsp;&amp;nbsp;NULL, // Cursor&lt;br /&gt;&amp;nbsp;&amp;nbsp;NULL, // Background brush&lt;br /&gt;&amp;nbsp;&amp;nbsp;NULL, // Menu class&lt;br /&gt;&amp;nbsp;&amp;nbsp;L"MyDirect3DApp", // Class name&lt;br /&gt;&amp;nbsp;&amp;nbsp;NULL // Small icon&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;/* Si falla el registro de la clase termina el programa */&lt;br /&gt;if (!::RegisterClassEx (&amp;wc))&lt;br /&gt;&amp;nbsp;&amp;nbsp;return 0;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;El procedimiento de ventana (MsgProc) es el procedimiento encargado de manejar los mensajes que Windows pasa a la ventana cada que un evento ocurre. En nuestro caso es la siguiente función.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;LRESULT WINAPI MsgProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;switch (msg)&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case WM_DESTROY:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cleanup ();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;::PostQuitMessage (0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case WM_PAINT:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Render ();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;::ValidateRect (hWnd, NULL);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;return ::DefWindowProc (hWnd, msg, wParam, lParam);&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;Luego de registrar la clase de Windows debemos crear y mostrar la ventana donde Direct3D va a realizar el Render.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;/* Crear la ventana de la aplicacion. */&lt;br /&gt;g_hWnd = ::CreateWindow (&lt;br /&gt;&amp;nbsp;&amp;nbsp;L"MyDirect3DApp",&lt;br /&gt;&amp;nbsp;&amp;nbsp;L"Aplicacion Direct3D", &lt;br /&gt;&amp;nbsp;&amp;nbsp;WS_OVERLAPPEDWINDOW,&lt;br /&gt;&amp;nbsp;&amp;nbsp;0,&lt;br /&gt;&amp;nbsp;&amp;nbsp;0,&lt;br /&gt;&amp;nbsp;&amp;nbsp;800,&lt;br /&gt;&amp;nbsp;&amp;nbsp;600,&lt;br /&gt;&amp;nbsp;&amp;nbsp;::GetDesktopWindow (),&lt;br /&gt;&amp;nbsp;&amp;nbsp;NULL,&lt;br /&gt;&amp;nbsp;&amp;nbsp;wc.hInstance,&lt;br /&gt;&amp;nbsp;&amp;nbsp;NULL);&lt;br /&gt;&lt;br /&gt;/* Mostrar la ventana */&lt;br /&gt;::ShowWindow (g_hWnd, nCmdShow);&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;La variable g_hWnd es de tipo HWND y es declarada por fuera del main para que sea global a todas las funciones. Con esto ya tenemos la ventana donde dibujar, pero para ello es necesario inicializar la interfaz Direct3D.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;/* Creacion del objeto Direct3D */&lt;br /&gt;g_pD3D = Direct3DCreate9 (D3D_SDK_VERSION);&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;Aquí g_pD3D también es declarada global y de tipo LPDIRECT3D9 el cual es un tipo de apuntador a una interfaz IDirect3D9. Esta interfaz nos permite entre otras cosas, verificar las capacidades del dispositivo de video e inicializar un dispositivo Direct3D para dibujar en una ventana.&lt;br /&gt;&lt;br /&gt;Para que nuestro proyecto reconozca el tipo LPDIRECT3D9 y la función Direct3DCreate9 debemos incluir la librería &amp;lt;d3d9.h&amp;gt;, pero también debemos decirle a Visual Studio donde buscar las librerías de DirectX. Para hacerlo vamos a las propiedades del proyecto y en la opción Propiedades de Configuración / C++, adicionamos el directorio Include del directorio de instalación del SDK de DirectX a los Directorios de Include Adicionales, como lo muestra la siguiente figura.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_TtTfLPkaaFw/RjpKqqNqaGI/AAAAAAAAAB8/EfSsLlpRfFQ/s1600-h/03.+Include+directories.png" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_TtTfLPkaaFw/RjpKqqNqaGI/AAAAAAAAAB8/EfSsLlpRfFQ/s400/03.+Include+directories.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5060439228050729058" /&gt;&lt;/a&gt;&lt;br /&gt;Luego en la opción Linker adicionamos el directorio Lib/x86 a los Directorios de Library Adicionales así:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_TtTfLPkaaFw/RjpLRaNqaHI/AAAAAAAAACE/soXgiqRRLEo/s1600-h/04.+Library+directories.png" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_TtTfLPkaaFw/RjpLRaNqaHI/AAAAAAAAACE/soXgiqRRLEo/s400/04.+Library+directories.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5060439893770659954" /&gt;&lt;/a&gt;&lt;br /&gt;Finalmente en la opción Input de Linker agregamos d3d9.lib en las Dependencias Adicionales&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_TtTfLPkaaFw/RjpL16NqaII/AAAAAAAAACM/gJr75YBWS_4/s1600-h/05.+Additional+dependencies.png" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_TtTfLPkaaFw/RjpL16NqaII/AAAAAAAAACM/gJr75YBWS_4/s400/05.+Additional+dependencies.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5060440520835885186" /&gt;&lt;/a&gt;&lt;br /&gt;Al inicializar el dispositivo es necesario indicar al motor de Direct3D los parámetros de presentación para nuestra aplicación tal como la ventana donde se va a dibujar, si se quiere mostrar en pantalla completa o en modo ventana y el formato que se va a utilizar y esto se hace mediante una variable del tipo estructura D3DPRESENT_PARAMETERS.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;/* Parámetros de inicializacion */&lt;br /&gt;D3DPRESENT_PARAMETERS pD3DParameters;&lt;br /&gt;&lt;br /&gt;/* Parametros por defecto para crear el dispositivo */&lt;br /&gt;ZeroMemory (&amp;pD3DParameters, sizeof (pD3DParameters));&lt;br /&gt;&lt;br /&gt;pD3DParameters.hDeviceWindow = g_hWnd;&lt;br /&gt;pD3DParameters.EnableAutoDepthStencil = TRUE;&lt;br /&gt;pD3DParameters.AutoDepthStencilFormat = D3DFMT_D16;&lt;br /&gt;pD3DParameters.SwapEffect = D3DSWAPEFFECT_DISCARD;&lt;br /&gt;&lt;br /&gt;/* Cambie a true para pantalla completa */&lt;br /&gt;bool bFullScreen = false;&lt;br /&gt;&lt;br /&gt;/* Si el modo es pantalla completa */&lt;br /&gt;if (bFullScreen)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;/* En fullscreen se debe indicar el tamaño y formato de los back buffers */&lt;br /&gt;&amp;nbsp;&amp;nbsp;pD3DParameters.BackBufferWidth = 800;&lt;br /&gt;&amp;nbsp;&amp;nbsp;pD3DParameters.BackBufferHeight = 600;&lt;br /&gt;&amp;nbsp;&amp;nbsp;pD3DParameters.BackBufferFormat = D3DFMT_R5G6B5;&lt;br /&gt;&amp;nbsp;&amp;nbsp;pD3DParameters.BackBufferCount = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;pD3DParameters.MultiSampleType = D3DMULTISAMPLE_NONE;&lt;br /&gt;&amp;nbsp;&amp;nbsp;pD3DParameters.Windowed = FALSE;&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;pD3DParameters.Windowed = TRUE;&lt;br /&gt;&amp;nbsp;&amp;nbsp;pD3DParameters.BackBufferFormat = D3DFMT_UNKNOWN;&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;Con la estructura D3DPRESENT_PARAMETERS y usando el objeto Direct3D podemos inicializar el dispositivo Direct3D en la variable global g_pD3DDevice la cual es del tipo LPDIRECT3DDEVICE9 que representa un apuntador a una interfaz del tipo IDirect3DDevice9. Esta interfaz es la que luego nos va a permitir invocar una serie de operaciones de dibujado sobre el dispositivo gráfico.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;/* Si no se puede crear el dispositivo retorna 0 */&lt;br /&gt;if (FAILED (g_pD3D-&gt;CreateDevice (&lt;br /&gt;&amp;nbsp;&amp;nbsp;D3DADAPTER_DEFAULT,&lt;br /&gt;&amp;nbsp;&amp;nbsp;D3DDEVTYPE_HAL,&lt;br /&gt;&amp;nbsp;&amp;nbsp;g_hWnd,&lt;br /&gt;&amp;nbsp;&amp;nbsp;D3DCREATE_SOFTWARE_VERTEXPROCESSING,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;pD3DParameters,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;g_pD3DDevice ) ) )&lt;br /&gt;&amp;nbsp;&amp;nbsp;return 0;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;Si se puede crear el dispositivo, la aplicación esta lista para iniciar la ejecución, esto es, verificar constantemente la cola de mensajes y procesarlos hasta que se cierre la ventana.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;MSG msg; &lt;br /&gt;&lt;br /&gt;/* Recibir el mensaje y manejarlo */&lt;br /&gt;ZeroMemory (&amp;msg, sizeof(msg));&lt;br /&gt;while (msg.message != WM_QUIT)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;if (::PeekMessage (&amp;msg, NULL, 0U, 0U, PM_REMOVE))&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;::TranslateMessage( &amp;msg );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;::DispatchMessage( &amp;msg );&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;Como vemos en el procedimiento MsgProc, cuando llega el mensaje WM_PAINT se llama a la función Render, en la cual realmente se realiza el dibujado de los objetos en la pantalla. Para realizar este proceso se debe llamar a la función Clear del dispositivo con el fin de limpiar la pantalla (en este caso a un color azul), luego invocar la función BeginScene, la cual indica el comienzo del proceso de dibujado. Al terminar de dibujar todos los objetos de la escena, es necesario llamar a los métodos EndScene y Present para que se copie toda la información desde el buffer trasero al dispositivo y realmente se pinte en pantalla nuestro contenido.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;VOID Render ()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;/* Limpia el buffer secundario */&lt;br /&gt;&amp;nbsp;&amp;nbsp;g_pD3DDevice-&gt;Clear (0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,255), 1.0f, 0L);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;/* Inicia el rendering */&lt;br /&gt;&amp;nbsp;&amp;nbsp;g_pD3DDevice-&gt;BeginScene ();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;/* Aquí van las operaciones de dibujado */&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;/* Finaliza el dibujado */&lt;br /&gt;&amp;nbsp;&amp;nbsp;g_pD3DDevice-&gt;EndScene ();&lt;br /&gt;&amp;nbsp;&amp;nbsp;g_pD3DDevice-&gt;Present (NULL, NULL, NULL, NULL);&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;En el procedimiento de mensajes también se controla el evento WM_DESTROY que es lanzado luego de cerrar nuestra ventana. Cuando llega este mensaje se llama a la función Cleanup, en donde se libera el dispositivo Direct3D, así como también el objeto Direct3D.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;VOID Cleanup ()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;if (g_pD3DDevice != NULL) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g_pD3DDevice-&gt;Release (); &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;if (g_pD3D != NULL) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g_pD3D-&gt;Release (); &lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;Adicionalmente se debe des-registrar la clase de Windows cuando el programa salga del bucle de mensajes.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="background-color: #CCCCCC; color: #000000; line-height: normal;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;::UnregisterClass (L"MyDirect3DApp", wc.hInstance);&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;Con esto hemos creado una aplicación que inicializa el dispositivo Direct3D y hace que se pinte de azul la ventana como se observa en la siguiente figura.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_TtTfLPkaaFw/RjqJeKNqaJI/AAAAAAAAACU/I98mfJ-t4jo/s1600-h/06.+Running+App.png" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_TtTfLPkaaFw/RjqJeKNqaJI/AAAAAAAAACU/I98mfJ-t4jo/s400/06.+Running+App.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5060508282534914194" /&gt;&lt;/a&gt;&lt;br /&gt;A primera vista esto no debería llevar tanto trabajo, es más, si hubiéramos desarrollado una aplicación de Windows Forms únicamente hubiéramos tenido que fijar la propiedad BackColor al color Blue, pero la diferencia radica en que aquí llevamos a cabo los pasos iniciales necesarios para poder usar el dispositivo Direct3D en el “dibujado” de objetos en 3 dimensiones. Sin embargo esto lo mostraré en un siguiente post, por ahora si tienes dudas sobre como usar la API de Windows para crear aplicaciones puedes visitar &lt;a href="http://winapi.conclase.net/" target="_blank"&gt;http://winapi.conclase.net/&lt;/a&gt; en donde explican de una forma sencilla este proceso.&lt;br /&gt;&lt;br /&gt;El código de este ejemplo para Visual Studio 2005 lo puedes descargar desde &lt;a href="http://www.unicauca.edu.co/~warivera/files/2007-05-03-MyDirect3DApp.zip"&gt;aquí&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Willy R.&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34355436-8530130777757033928?l=mygamingnotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mygamingnotes.blogspot.com/feeds/8530130777757033928/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34355436&amp;postID=8530130777757033928&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/8530130777757033928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/8530130777757033928'/><link rel='alternate' type='text/html' href='http://mygamingnotes.blogspot.com/2007/05/crear-una-aplicacin-direct3d-con-visual.html' title='Crear una aplicación Direct3D con Visual C++ 2005'/><author><name>Willy R.</name><uri>http://www.blogger.com/profile/15693245798904203785</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_TtTfLPkaaFw/R_BEKK5HSnI/AAAAAAAAAD4/j6nqAg2AzIA/S220/Willly+Apto+2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_TtTfLPkaaFw/RjpD7KNqaEI/AAAAAAAAABs/hWaltbF5g7w/s72-c/01.+NewProject..png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34355436.post-5812673749104030623</id><published>2007-03-25T12:28:00.001-05:00</published><updated>2007-04-30T14:31:04.782-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Live'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Conociendo Windows Live</title><content type='html'>&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:85%;"&gt;Hola. Parece que despues de mucho tiempo por fin he sacado el tiempo para sentarme a escribir esta corta presentación de algunos servicios de Windows Live que me parecen muy interesantes. Espero sea de tu agrado.&lt;br /&gt;&lt;br /&gt;Para comenzar a acceder a los servicios de Windows Live necesitas contar con una cuenta de Windows Live, la cual puedes obtener registrandote gratis en: &lt;a href="http://account.live.com/" target="_blank"&gt;http://account.live.com/&lt;/a&gt; o actualizando tu cuenta de hotmail a la version de Windows Live Mail.&lt;br /&gt;&lt;br /&gt;Bueno, quiero comenzar por &lt;a href="http://favorites.live.com/" target="_blank"&gt;Windows Live Favorites&lt;/a&gt;, el cual es un servicio que permite exportar tus favoritos desde el Internet Explorer al sitio Web y luego administrarlos desde alla, de modo que ya no dependas del pc en el cual los tenías guardados. Es muy sencillo de usar, solo tienes que entrar a &lt;a href="http://favorites.live.com/" target="_blank"&gt;http://favorites.live.com/&lt;/a&gt; e iniciar sesión en el sitio (la primera vez te pedira que aceptes los términos de uso del servicio). Una vez hayas ingresado te mostrará una página como la siguiente.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_TtTfLPkaaFw/RgVM15FJ3wI/AAAAAAAAAAM/4R6OgugcwLA/s1600-h/001.jpg" target="_blank"&gt;&lt;img id="BLOGGER_PHOTO_ID_5045523446277725954" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp3.blogger.com/_TtTfLPkaaFw/RgVM15FJ3wI/AAAAAAAAAAM/4R6OgugcwLA/s400/001.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En la parte superior puedes encontrar un cuadro de texto que te permite buscar con facilidad entre todos tus favoritos, al lado aparece tu nombre y la opcion para cerrar la sesión. Luego puedes ver los menus Opciones, Importar, Exportar y Ayuda. En Opciones puedes configurar si quieres que el sitio te muestre una confirmación siempre que quieras eliminar un favorito o una carpeta y tambien si deseas que tus nuevos favoritos sean Compartidos por defecto (mas adelante veras con mas detalle para que sirve esta opción). Ahora viene lo interesante... en Importar tienes 3 opciones: desde Internet Explorer, Nestcape Navigator o Mozilla, o una ubicacion diferente (Del.icio.us). Si eliges importar desde Internet Explorer te pide que instales un complemento en tu navegador, el cual lee todas las entradas de tus favoritos de Intenet Explorer y los sube al sitio organizados tal como los tengas en tu pc. Luego puedes administrar cada uno de tus favoritos y crear nuevos, cambiar el nombre, la url, asignar etiquetas (son como palabras clave, tambien sirven para crear un nivel de clasificacion diferente al de las carpetas), mover a una carpeta diferente o eliminar un favorito o carpeta.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_TtTfLPkaaFw/RgVRPZFJ3xI/AAAAAAAAAAU/Zi1P-VZ8UkQ/s1600-h/002.jpg" target="_blank"&gt;&lt;img id="BLOGGER_PHOTO_ID_5045528282410901266" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp1.blogger.com/_TtTfLPkaaFw/RgVRPZFJ3xI/AAAAAAAAAAU/Zi1P-VZ8UkQ/s400/002.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La opción Exportar es bastante útil tambien ya que mediante esta puedes bajar tus favoritos al Internet Explorer si los quieres tener de modo permanente en el. Cuando eliges Exportar te muestra el dialogo de descargar un archivo con las opciones Abrir, Guardar o Cancelar. Hasta ahora no me ha funcionado la opción Guardar, asi que toca conformarse con la opción Abrir la cual te muestra una página sin estilos y con todos tus favoritos en forma de árbol como en la siguiente figura.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_TtTfLPkaaFw/RgVUf5FJ3yI/AAAAAAAAAAc/psxybE7V8-o/s1600-h/003.jpg" target="_blank"&gt;&lt;img id="BLOGGER_PHOTO_ID_5045531864413626146" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp3.blogger.com/_TtTfLPkaaFw/RgVUf5FJ3yI/AAAAAAAAAAc/psxybE7V8-o/s400/003.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ahora, para importar estos favoritos a tu Internet Explorer debes primero Guardar esta página en tu pc como un archivo htm o html, luego ir al menu Archivo, Importar y Exportar, seguir el asistente para importar favoritos y listo (el se encarga del resto).&lt;br /&gt;&lt;br /&gt;Con esto vemos grandes utilidades de este servicio... desde mi punto de vista te puede servir como un repositorio para tus favoritos, para que nos los pierdas si se daña tu equipo, se piede la configuración o necesitas formatear y te olvidas de salvar esa info. Ademas si estas es un equipo público y necesitas tus favoritos solo vas a tener que ingresar al sitio para disponer de ellos.&lt;br /&gt;&lt;br /&gt;Continuando con los servicios de Windows Live tengo que mencionar al cuasi-omni-presente &lt;a href="http://get.live.com/messenger/overview" target="_blank"&gt;Windows Live Messenger&lt;/a&gt; el cual es quizá el programa de mensajería instantánea mas popular de los últimos tiempos y que por su amplio uso no necesita mucha presentación. Sin embargo me gustaría destacar de este servicio que una vez hayas comenzado a usar Windows Live Favorites puedes aprovechar la integracion de estos dos servicios ya que el Messenger dedica una de sus Fichas (iconos que aparecen en el lado izquierdo de la ventana principal) al servicio Favorites. Si das clic en esa ficha, el Messenger descarga tus favoritos desde el sitio Web y te los muestra en el espacio donde generalmente aparece tu lista de contactos, de modo que puedas navegar por tus favoritos o ir al sitio para administrarlos, tal como lo muestra la siguiente figura.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_TtTfLPkaaFw/RgVaoZFJ3zI/AAAAAAAAAAk/3DnrHGiQWzI/s1600-h/004.jpg" target="_blank"&gt;&lt;img id="BLOGGER_PHOTO_ID_5045538607512280882" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp1.blogger.com/_TtTfLPkaaFw/RgVaoZFJ3zI/AAAAAAAAAAk/3DnrHGiQWzI/s400/004.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Otro servicio con el que se integra el Messenger es &lt;a href="http://spaces.live.com/" target="_blank"&gt;Windows Live Spaces&lt;/a&gt;. Este servicio te permite expresar tus ideas, pensamientos, gustos, fotos y demas mediante un blog, album de fotos y otros contenidos que puedes agregar a él. Desde el Messenger puedes acceder este servicio mediante el botón que se muestra en la siguiente figura.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_TtTfLPkaaFw/RgVeqJFJ30I/AAAAAAAAAAs/PWADjwysx1w/s1600-h/005.jpg" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_TtTfLPkaaFw/RgVeqJFJ30I/AAAAAAAAAAs/PWADjwysx1w/s400/005.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5045543035623563074" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Cuando uses este servicio por primera vez te va a pedir que escojas un Título y un Nombre con el que se pueda identificar el espacio, asi:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_TtTfLPkaaFw/RgVfoZFJ31I/AAAAAAAAAA0/fkys7z8IZRc/s1600-h/006.jpg" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_TtTfLPkaaFw/RgVfoZFJ31I/AAAAAAAAAA0/fkys7z8IZRc/s400/006.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5045544105070419794" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Una vez que hayas creado tu espacio podras personalizar los módulos que quieres agregar o quitar, ademas de los temas, diseño y colores para mostrar. Algo que quiero destacar aquí es la posibilidad de agregar tus favoritos de Windows Live Favorites como un modulo del espacio. Solo debes ir a la opcion Personalizar, buscar la pestaña Modulos y dentro de la categoría Windows Live podrás encontrar la opción para agregar los &lt;b&gt;Favoritos de Window Live&lt;/b&gt;. Hay que tener en cuenta que a los visitantes de tu espacio solo se les mostrarán los favoritos que marcaste como Compartidos (es aquí donde tiene utilidad la opción "Marcar este favorito como compartido"). Y como es mejor ver las cosas en acción, en la siguiente figura se puede apreciar como se ven mis favoritos compartidos como un módulo en mi espacio.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_TtTfLPkaaFw/RgWC6JFJ32I/AAAAAAAAAA8/Dbi8zqM-pYU/s1600-h/007.jpg" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_TtTfLPkaaFw/RgWC6JFJ32I/AAAAAAAAAA8/Dbi8zqM-pYU/s400/007.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5045582892920069986" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Si has llegado hasta aquí puede que estes algo fascinad@ con Windows Live y tambien algo cansad@ de leer, como yo de escribir... pero no quiero cerrar este post sin antes mencionar lo que consideron un punto de encuentro para la mayor parte de contenido e información que usualmente visito en Internet y es la Página personalizada de Windows Live. La idea detras de esta página es que tu puedas, como su nombre lo indica, personalizar el contenido que te gustaría revisar según tus gustos o necesidades y sin tener que visitar muchos sitios independientemente. Imagina que te gusta leer las noticas desde varios diarios cada día. ¿No sería interesante que pudieras hacerlo simplemente visitando un sitio y no tener que ir al sitio de cada diario independientemente? Pues bien, con Windows Live esto es posible.&lt;br /&gt;&lt;br /&gt;Para empezar debes ingresar al sitio &lt;a href="http://www.live.com" target="_blank"&gt;http://www.live.com&lt;/a&gt; en el cual por defecto se muestra la página de búsqueda de Windows Live.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_TtTfLPkaaFw/RgWczpFJ35I/AAAAAAAAABU/5X-JZ-M4UUc/s1600-h/008.jpg" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_TtTfLPkaaFw/RgWczpFJ35I/AAAAAAAAABU/5X-JZ-M4UUc/s400/008.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5045611368553242514" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Luego debes seleccionar la opción "Personalizar la página" que se encuentra en la parte superior derecha. Dicha opción te muestra una página como la siguiente.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_TtTfLPkaaFw/RgWeDJFJ36I/AAAAAAAAABc/M6VvX7D3npE/s1600-h/009.jpg" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_TtTfLPkaaFw/RgWeDJFJ36I/AAAAAAAAABc/M6VvX7D3npE/s400/009.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5045612734352842658" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Esta es ya la página personalizada pero hasta ahora solo tiene información agregada por defecto: un tab (o página) con varios módulos de contenido. A la página por defecto (Nueva página) puedes cambiarle el nombre y/o agregar más páginas de modo tal que puedas agrupar la información por tópicos de interes u otro criterio o simplemente distribuirla para no sobrecargar una página. En cuanto a los módulos de contenido por defecto, puedes simplemente dar clic en la &lt;b&gt;x&lt;/b&gt; para cerrarlos si no te interesan.&lt;br /&gt;&lt;br /&gt;Para agregar nuevos módulos puedes usar la opción "Agregar contenido" que se encuentra en la parte superior izquierda. Dicha opción muestra 3 posibilidades: Directorio, Opciones Avanzadas y Mis cosas. En Directorio puedes encontrar el contenido que podríamos llamar predefinido por Windows Live, dentro del que encontramos Gadgets, Noticias, Entretenimiento, Deportes, etc. Si seleccionas uno de los módulos puedes observarlo en parte derecha de esa área de la página. Para agregarlo a la página activa, solo tienes que dar clic en el botón Agregar o arrastrar el módulo hasta el lugar de la página donde quieras ubicarlo. Por ejemplo, si miras en la categoría Gadgets puedes encontrar el módulo Favoritos, el cual, como era de esperarse, permite ver tus Favoritos de Windows Live. En este momento debo advertir que si deseas que tu configuración personalizada perdure aún si vas a otro equipo es necesario que inicies sesión con tu cuenta de Windows Live antes de agregar contenidos, de modo que toda la información personalizada quede asociada con tu cuenta y pueda ser descargada a otros equipos. Si no lo haces corres el riesgo de perder todo el trabajo de personalización.&lt;br /&gt;&lt;br /&gt;En Opciones Avanzadas es donde encuentro la mayor utilidad, ya que es donde puedes agregar contenidos diversos mediante la opción Suscribirse usando la URL de un recurso RSS (aprende mas sobre RSS &lt;a href="http://es.wikipedia.org/wiki/RSS" target="_blank"&gt;aquí&lt;/a&gt;). Una vez te suscribes a un recurso RSS, éste se agrega automáticamente a la página que se encuentre activa y tambien queda como un item de la sección "Mis cosas", de modo que si accidentalmente lo quitas de la página, puedes volver a arrastrarlo desde allá sin tener que suscribirte nuevamente, y lo mejor, sin tener que volver a escribir la URL.&lt;br /&gt;&lt;br /&gt;En la actualidad muchos sitios de internet (principalmente los de noticias) difunden sus contenidos por medio de RSS y tu puedes usar esa característica para revisar todo el contenido que desees desde un solo sitio. Por estandar de facto, el siguiente ícono te ayudará a ubicar dichos recursos.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_TtTfLPkaaFw/RgWuIJFJ37I/AAAAAAAAABk/hJ78zxUIwEw/s1600-h/Feed-icon.png" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_TtTfLPkaaFw/RgWuIJFJ37I/AAAAAAAAABk/hJ78zxUIwEw/s400/Feed-icon.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5045630412438233010" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Finalmente, si vas a otro equipo y quieres volver a ver tu página personalizada solo tienes que entrar a &lt;a href="http://www.live.com" target="_blank"&gt;http://www.live.com&lt;/a&gt;, seguir el link de Página personalizada y luego de iniciar sesión tendrás de vuelta tu página tal y como la configuraste.&lt;br /&gt;&lt;br /&gt;Los servicios de Windows Live que he mencionado no son los únicos que existen en el momento y seguramente seguiran surgiendo nuevos, pero creo que siempre se perseguirá la misma idea detras de toda la familia Windows Live y es la facilidad de uso y algo que considero impactante: la &lt;i&gt;&lt;b&gt;Integración&lt;/b&gt;&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Espero este post haya sido de utilidad y vuelvas por este blog.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Willy R.&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34355436-5812673749104030623?l=mygamingnotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mygamingnotes.blogspot.com/feeds/5812673749104030623/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34355436&amp;postID=5812673749104030623&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/5812673749104030623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34355436/posts/default/5812673749104030623'/><link rel='alternate' type='text/html' href='http://mygamingnotes.blogspot.com/2007/03/conociendo-windows-live.html' title='Conociendo Windows Live'/><author><name>Willy R.</name><uri>http://www.blogger.com/profile/15693245798904203785</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_TtTfLPkaaFw/R_BEKK5HSnI/AAAAAAAAAD4/j6nqAg2AzIA/S220/Willly+Apto+2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_TtTfLPkaaFw/RgVM15FJ3wI/AAAAAAAAAAM/4R6OgugcwLA/s72-c/001.jpg' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
