Jesús Bosch

XNA, programación gráfica y desarrollo de videojuegos por un Microsoft Student Partner

March 2010 - Artículos

[OT] Emulador de Windows Phone 7 Series desbloqueado

El hecho es que ya hace varios días que está disponible... pero os lo pongo por si os habéis quedado despistados :-) Si queréis disponer de un emulador de WP7Series ahora podéis descargarlo en este enlace. El autor del desbloqueo se ha asustado un poco y ha retirado el enlace directo a la descarga en su blog... pero podéis descargarlo en los enlaces que aparecen en los últimos comentarios que existen del artículo. Siguiendo esos sencillos pasos vuestro emulador será completo!

Información obtenida del grupo Estudiantes.Net en Facebook

Posted: 23/3/2010 15:40 por Jesús Bosch | con 1 comment(s)
Archivado en: ,,
[MIX] Herramientas de desarrollo para windows phone 7 ya disponibles!

Lo acaba de anunciar Scott Guthrie en el MIX2010... ya podemos descargar las herramientas de desarrollo para Phone 7!! Estas herramientas se basan en desarrollo Silverlight y XNA. Podéis descargarlas en http://developer.windowsphone.com/windows-phone-7-series/ La descarga de Visual Studio 2010 Express for Windows Phone (uf) es gratuita.

Todo esto en riguroso directo desde Las Vegas.. :-) enjoy!



[OT] XNA Game Studio 4.0: Nos vemos en Las Vegas!

Desde hace unos días ya es oficial... XNA Game Studio 4.0 será un poco más portable... esta vez sobre Windows Phone 7! Y además con todo su esplendor... portabilidad "total", juegos 3D, XBOX Live, etc. El caso es que se ha estado hablando de ello en el GDC, y puede encontrarse información de ello en los blogs oficiales, como el de Michael Klucher. Otro tema interesante es que soporta la integración con Visual Studio 2010.

El caso es que en el MIX 2010 se van a mostrar más detalles al respecto, en sesiones específicas de desarrollo de XNA 4 sobre la plataforma windows Phone. Allí voy a estar, y os lo iré narrando a diario! :-)

[XNA] Introducción al trazado de rayos con XNA

Los rayos son usados en desarrollo de videojuegos para trazar líneas imaginarias entre un punto y otro en el espacio tridimensional, y valorar si hay intersecciones entre el vector que une ambos. Puede servir para detectar si un disparo intersecciona con su objetivo o no, y para calcular la distancia entre este y quien ha disparado... o también puede ser útil para pintar un texto encima de un modelo en el espacio 3D... o para hacer un Drag & Drop de modelos en un espacio tridimensional. De hecho, el trazado de rayos puede ser utilizado incluso para renderizar escenas... pero no se usa en videojuegos a tiempo real porque consume muchos recursos.

Con un poco de álgebra se puede calcular la intersección entre un rayo y una esfera, entre un rayo y un plano, un cubo, o incluso un triángulo... las matemáticas para hacer estos cálculos pueden llegar a ser más o menos complicadas... pero si programas en XNA, se te va a caer la lagrimita de lo fácil que es utilizar técnicas de trazado de rayos. A pesar de esta ventaja, hay que decir que la documentación en MSDN acerca de la estructura Ray es escueta... por decirlo de forma amable. Así que voy a compartir con vosotros algunos experimentos que he hecho con ella y os puede interesar conocer.

En este ejemplo lo que hacemos es crear un rayo a partir de la posición del puntero del ratón sobre la pantalla, y calcular el destino del rayo a partir de la vista y proyección de la camara -pero creas que es gran cosa, porqué aquí XNA vuelve a socorrernos-.

Así pues, en el método update, "refrescaremos" el rayo llamando al método siguiente:

   1: private Ray posicionarRayo() 
   2:         {
   3:             Vector2 posicionMouse = new Vector2(Mouse.GetState().X, Mouse.GetState().Y);
   4:  
   5:             // Calculamos a qué posiciones del World corresponden las del mouse con Unproject
   6:             Vector3 puntoCercano = GraphicsDevice.Viewport.Unproject(new Vector3(posicionMouse, 0f),
   7:                 camara.projection, camara.view, Matrix.Identity);
   8:  
   9:             Vector3 puntoLejano = GraphicsDevice.Viewport.Unproject(new Vector3(posicionMouse, 1f),
  10:                 camara.projection, camara.view, Matrix.Identity);
  11:  
  12:  
  13:             Vector3 direccion = puntoLejano - puntoCercano;
  14:  
  15:             direccion.Normalize();
  16:  
  17:             return new Ray(puntoCercano, direccion);
  18:         }

El método realmente interesante de este código es Unproject. Lo que hace es proyectar el un vector a partir de la posición del mouse, en una posición de la escena en 3D.

Después, para saber si hay intersección entre el rayo y el BoundingSphere, sería algo tan sencillo como utilizar un método de la propia estructura Ray:

   1: rayo.Intersects(ref esfera, out distancia);

Donde esfera es un boundingSphere y la distancia es la longitud a la que existe la intersección entre el rayo y el boundingsphere.

Finalmente, para pintar el texto encima del modelo 3D (en este caso las primitivas de un BoundingSphere), tenemos que traducir la posición en el world del modelo (en este caso hemos puesto Matrix.Identity) a lo que es la pantalla:

   1: string mensaje = "Rayo intersecciona con la esfera!";
   2:                 
   3: // Calculamos la posición en pantalla del boundingSphere gracias al método Project del Viewport
   4: Vector3 posicionenPantalla = graphics.GraphicsDevice.Viewport.Project(
   5: Vector3.Zero, camara.projection, camara.view, Matrix.Identity);
   6:  
   7: // Obtenemos el centro del texto
   8: Vector2 centroTexto = this.fuente.MeasureString(mensaje) / 2;
   9:  
  10: Vector2 posicionTexto = new Vector2(posicionenPantalla.X, posicionenPantalla.Y - (esfera.Radius + 50));
  11:  
  12: spriteBatch.DrawString(fuente, mensaje, posicionTexto - centroTexto, Color.White);

El resultado de este ejemplo sencillo sería el siguiente, donde estamos pintando un boundingsphere (aparece rojo si ponemos el mouse “sobre él”, y blanco si el mouse queda “fuera” de él, además aparece el texto en blanco por encima):

Además, en XNA Creators Club Online hay un par de ejemplos interesantes relacionados con el trazado de rayos donde podrás ampliar conocimientos:

Rayos con modelos
http://creators.xna.com/en-US/sample/picking

Rayos a nivel de triangulos
http://creators.xna.com/en-US/sample/pickingtriangle

Posted: 8/3/2010 10:10 por Jesús Bosch | con 2 comment(s)
Archivado en: ,
[XNA] Aprende a programar C# con XNA

XNA Game Studio se está convirtiendo cada vez más en una plataforma para introducir el mundo de la programación en C# a los estudiantes. Este libro gratuito no da por supuesto ningún conocimiento previo de programación. No solo se aprende C# sinó que es una perfecta introducción, muy básica, al desarrollo de videojuegos. Sin duda una lectura muy interesante para jóvenes programadores.



Podéis descargar el libro en PDF aquí:

http://www.lulu.com/product/download/a-simple-introduction-to-game-programming-with-c%23-and-xna-31/5438606

También existe una versión online en esta URL:

http://xnagamemaking.com/

Posted: 4/3/2010 13:19 por Jesús Bosch | con 5 comment(s)
Archivado en:
[XNA] Game Engines para XNA

Hoy os presento una recopilación de Game Engines para XNA. Como sabéis, la plataforma XNA ofrece facilidades para el renderizado de gráficos, carga de contenidos y demás, pero en videojuegos completos es necesaria la utilización de un engine que extienda y facilite estas funcionalidades, y añada otras, como pueden ser los motores de física o animación de modelos 3D. Cualquier engine importante que detectéis que falta en la lista me lo decís y lo añado ipso facto :-)

Tomahawk XNA Game Engine


Completo framework open source compatible con XNA 3.1 para XBOX 360 y Windows. Internamente se basa en otros engines para la física y animaciones, lo que lo hacen muy potente y desacoplado. Uno de los problemas que le veo es la documentación del proyecto.

http://www.assembla.com/wiki/show/tomahawkengine/

 CAROT Engine


Todavía en versión Alpha, y orientado a 2D, parece tener como punto fuerte un foro bastante activo, lo cual es una garantía para la continuidad del proyecto. Para proyectos basados en Windows usa un wrapper de las librerías de sonido Audiere, en C++. La descarga es gratuita.

http://carotengine.com/

Ox Game Engine for XNA


Open Source. Se autodefine como un engine ya maduro para proyectos 3D, incluye un editor de escenas 3D visual, facilidad en renderizado de GUI en 2D, también con un editor visual, física basada en JigLibX, animaciones, y un sistema de scripting basado en C#.  

http://oxgameengine.codeplex.com/

QuickStart Engine
Engine 3D, open source. Se autodefine como potente y fácil de usar. Además puedo deciros que lo he probado, y es realmente sencillo de utilizar, además de tener una comunidad que atiende a las peticiones de mejoras, si van en beneficio de todos. Permite gestionar física, animaciones, renderizado, etc.

http://www.codeplex.com/QuickStartEngine

JigLibX Physics Engine

Excelente motor de física Open Source. Es un port a XNA del proyecto JigLib.

http://www.codeplex.com/JigLibX


Klib Engine (2D)
Engine open source para juegos 2D basados en XBOX 360 y Windows. Este framework quiere facilitar operaciones comunes como físicas, escenas, partículas, efectos de post-procesado, gestión del input y más.

http://klibenginexna.codeplex.com/


DEngine - C# XNA 2D Game Engine
Engine 2D gratuito que se basa en la lectura de XML para la gestión de niveles, facilita la animación de sprites, física basada en FarseerPhysics, editor de niveles, controles GUI, algoritmo A*, y un ejemplo de videojuego RTS basado en este engine.

http://dengine.codeplex.com/


Phoenix XNA Engine
Un engine gratuito todavía en desarrollo pero bastante prometedor, ya que su desarrollo se basa en una comunidad bastante activa. Tiene funcionalidades como generación de terrenos a partir de texturas, gestión de Input, texturas, cámaras, Networking, etc. 

http://phoenixxna.codeplex.com/


XEN Graphics API for XNA
xen
Engine 3D que se esfuerza en ser fácil de utilizar y a su vez ofrecer un alto rendimiento. Muy interesante es el hecho de su completa documentación y tutoriales que demuestran la facilidad de uso.

http://xen.codeplex.com/


SilverSprite
No se podría definir exactamente como un engine XNA… pero es interesante mencionarlo. Permite ejecutar juegos 2D basados en XNA en Silverlight, en sus versiones 2 y 3. 

http://silversprite.codeplex.com/


Garage Games Torque X

Engine comercial para el desarrollo de  videojuegos para varias plataformas. Tiene muchos años de historia y es bastante famoso. Tienen un framework tan trabajado que programar bajo esta plataforma se parece poco a desarrollar en XNA (para lo bueno y para lo malo que ello conlleva). Tiene editores de niveles 2D y 3D y un montón de utilidades más.

http://www.torquepowered.com/

Mercury particle engine
Open source. Motor de partículas para Windows PC y XBOX 360.

http://www.codeplex.com/mpe


SubBurn
Comercial. Engine gráfico para 3D focalizado en iluminación y el renderizado.

http://www.synapsegaming.com/products/sunburn/


bEpUphysics
Otra librería gratuíta (siempre que no se use para obtener beneficios económicos) de físicas para XNA. Contiene documentación y algunos tutoriales.

http://www.bepu-games.com/BEPUphysics/downloads.htm

Posted: 3/3/2010 8:57 por Jesús Bosch | con 7 comment(s)
Archivado en: ,,,