Stratos

Autor Tema: scene graph  (Leído 682 veces)

jcjuegos

  • Stratos
  • Mensajes: 12
    • Ver Perfil
scene graph
« en: 24 de Julio de 2009, 10:52:45 pm »
Hol como estan ando buscando un ejemplo sencillo para el desarrollo de una scene graph c++, me e leeido varios articulos del tema y sigo sin entenderle, alguno de ustedes me podrian ayudar  :D

martinbr

  • Stratos
  • Mensajes: 27
    • Ver Perfil
    • http://www.martinbr.com
    • Email
Re: scene graph
« Respuesta #1 en: 25 de Julio de 2009, 12:45:19 am »
Aqui http://www.gamedev.net/reference/programming/features/scenegraph/ tienes un pequeño articulo sore el tema bien explicado y con algo de codigo.
Martin B.R. // martin [at] martinbr [dot] com // www.martinbr.com // LinkedIn

jcjuegos

  • Stratos
  • Mensajes: 12
    • Ver Perfil
Re: scene graph
« Respuesta #2 en: 25 de Julio de 2009, 09:15:49 pm »
Gracias por el link, pero no entendi la parte del render como renderiso todo eso no lo comprendi 8o

martinbr

  • Stratos
  • Mensajes: 27
    • Ver Perfil
    • http://www.martinbr.com
    • Email
Martin B.R. // martin [at] martinbr [dot] com // www.martinbr.com // LinkedIn

jcjuegos

  • Stratos
  • Mensajes: 12
    • Ver Perfil
Re: scene graph
« Respuesta #4 en: 26 de Julio de 2009, 05:26:02 am »
 :D no, me referia a como renderisar el nodo principal,  si conosco las API graficas  :o

martinbr

  • Stratos
  • Mensajes: 27
    • Ver Perfil
    • http://www.martinbr.com
    • Email
Re: scene graph
« Respuesta #5 en: 26 de Julio de 2009, 05:32:54 pm »
Pues, por ejemplo, en XNA podria ser:

La clase principal, Game:
Código: [Seleccionar]
  public class MyGame : Microsoft.Xna.Framework.Game
  {
    // ...

    protected override void Draw(GameTime gameTime)
    {
      foreach (RenderContext renderContext in renderContexts)
        renderContext.Draw(gameTime);

      base.Draw(gameTime);
    }

    // ...
  }


El RenderContext:
Código: [Seleccionar]
  public class RenderContext : DrawableGameComponent
  {
    // ...

    public override void Draw(GameTime gameTime)
    {
      ClearBackBuffer();

      //  3D Render
      foreach (Camera camera in cameras)
      {
          ApplyCamera(camera);

          BaseNode.root.Draw(gameTime);    // Este es el nodo principal del scenegraph
      }

      // 2D Render
      {
      }

      // Render de texto

      base.Draw(gameTime);
    }

    // ...
  }


Y por fin el render de nodo basico del scene graph
Código: [Seleccionar]
  public class BaseNode : IDisposable
  {
    // ...

    public virtual void Draw(GameTime gameTime)
    {
      if (visible)
      {
        //if culling
          OnDraw(gameTime);
      }

      if (listChild != null)
      {
        for (int i = 0; i < listChild.Count; ++i)
          listChild[i].Draw(gameTime);
      }
    }

    public virtual void OnDraw(GameTime gameTime) { }    // Aqui dibujan los distintos tipos de nodos

    public static BaseNode root = new BaseNode();       // Este es el nodo raiz del scenegraph
   
    // ...
  }
« última modificación: 26 de Julio de 2009, 05:35:43 pm por martinbr »
Martin B.R. // martin [at] martinbr [dot] com // www.martinbr.com // LinkedIn