SceneGraphs en XNA


Hoy en día cuando queremos hacer un videojuego relativamente grande con gráficos 3D es muy complicado manejar los objetos necesitamos actualizar de uno por uno, para resolver este problema existe una estructura de datos muy utilizada llamada SceneGraphs, que básicamente son estructuras que almacenan toda la información de manera jerárquica dentro de un grafo o árbol y nos permite “olvidarnos” de cada objeto, ya que esta estructura se encargará de clasificarlos y manejarlos automáticamente.


Bloom Cubemap


Para este ejemplo vamos a utilizar una implementación muy sencilla que solo requerirá que almacenemos nuestros datos dentro de una colección linear de elementos esto es que cada nodo contendrá solamente un nodo hijo, con esto vamos a poder viajar a través del SG por medio de iteraciones lineares.

Durante estos recorridos nosotros vamos a poder actualizar el estado de nuestro SG, y además vamos a poder dibujar el contenido que necesite ser mostrado.


Bloom Cubemap



En nuestro ejemplo cada nodo representara un elemento gráfico del juego, este elemento puede ser un modelo, un terreno, un shader, un sistema de partículas, en fin, prácticamente cualquier objeto que podamos dibujar en la pantalla, claro en este ejemplo nos limitaremos a un modelo 3D.

Para esto lo primero que debemos de definir es nuestra Clase Objeto, que es la clase base de donde partirán todas las entidades, en este caso vamos a dejarlas con los elementos más comunes, a su vez vamos a crear una clase Modelo la cual será heredará a la clase objeto y tendrá implementada una interfaz IRendereable, que nos permitirá saber que nuestro modelo se puede dibujar.


Bloom Cubemap




Por ahora el elemento model es el único que vamos a utilizar en nuestro SG, así que vayamos a la parte interesante de este tutorial, el scene graph:


Bloom Cubemap



Como podemos observar en el diagrama anterior nuestro SG contine un nodo principal que será nuestra raíz, y un método que nos permite agregar más elementos al mismo, después tenemos nuestra clase que contiene la información a nuestra clase object, de la cual se derivan todas las clases que podemos ingresar al SceneGraph para se dibujas, además tenemos una clase que es el nodo básico de cada escena, esta clase nos permite accesar a los nodos de nuestro SG para poder hacer las llamas a los objetos correspondientes a cada nodo.


:D, El código esta disponible en mi skydrive por si alguien quiere hecharle un ojo ;)

0 comentarios:

Publicar un comentario

About Me

Mi foto
carlos
Guadalajara, Jalisco, Mexico
Ver mi perfil completo

Twitter

Carlos Rivera's Facebook profile