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 😉

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *