Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Necesito Usar Patrones? Que Leches Necesito? Xd

Iniciado por Sergio, 02 de Septiembre de 2003, 05:13:54 PM

« anterior - próximo »

Sergio

 Estoy haciendo un (intento de) engine 3D en DirectGraphics en C++, metiendo todo en clases, ordenadito, etc. El caso es que, logicamente, para dibujar las mallas que cree/cargue, no voy a ir una por una manualmente especificando la clase de la malla y llamando a su metodo 'Render', de modo que tendria que hacer un bucle que siguiera una lista enlazada de las mallas para recorrerlas una a una para dibujarlas (lo logico, vamos).
El problema es... si las clases del motor (la que crea la ventana, inicializa DirectGraphics, etc) y de las mallas no estan relacionadas, como puede saber la clase del motor (que es la que renderiza) el puntero al primer objeto de la lista enlazada?? :blink:
Tener en la clase del motor un puntero al primer objeto (el cual habria que actualizar cuando se eliminen objetos) para tener todo controlado me parece bastante guarro (todas las mallas tendrian que tener un puntero a la clase del motor para actualizar el puntero al primer objeto de la lista y, como leeis, es un lio xD).
Entonces, he leido algo sobre patrones pero poco (porque lo que he encontrado estaba incompleto O_O) asi que no se si estos son necesarios. Tambien, en los tutoriales de 32bit, ponia de usar herencia (con unas variables estaticas en las clases derivadas que se correspondan con el primer y el ultimo objeto de la lista), pero derivar de la misma clase base a la clase del motor y las clases de mallas y sprites... no me parece correcto, no?

Que opinais?? Algun sitio donde pueda encontrar buena informacion sobre patrones??

Bueno, perdonad por este 'peaso' de rollo xDD

Gracias de antemano por la info.

Un saludoooo!!!
here are only 10 types of people: those who understand binary and those who don't

Zaelsius

 No creo que sean patrones lo que necesitas, sino información general sobre la arquitectura de motores. En gamedev.net tiene una serie reciente de tutoriales sobre el diseño de un motor 3d(son algo avanzados, pero por mirarlos no pasa nada). Hay muchos más recursos sobre el tema, pero ahora mismo no recuerdo ninguno.

Tambien se aprende consultando el código fuente de motores. Te recomiendo que eches un vistazo al Irrlicht, en http://irrlicht.sourceforge.net. El diseño es MUY bueno, mira la jerarquía de clases y los tutoriales para ver cómo está estructurado, luego si te pica la curiosidad ya puedes sumergirte en los fuentes.

El código fuente de engines como Quake,Quake2 y Quake3(parcial) tb están disponibles, pero mejor no los mires pq son buenos ejemplos de diseño  :rolleyes: . El de Unreal sí está bastante bien(tb disponible), para consultar ciertos aspectos.

Astat

 Por lo que creo entender, tu problema podria solucionarse de una forma elegante usando un interface basico para todo lo que sea un "nodo de escena", entendiendo por "nodo de escena" todo objeto que se vea por pantalla.

Basicamente seria algo como:


class iSceneNode
{
public:
   iSceneNode(const std::strind &strName = "", iSceneNode *pNodeParent = NULL);
   virtual ~iSceneNode();

   virtual void Update(float fDeltaTime) = 0;

   virtual HRESULT Render() = 0;

   __inline bool isVisible() { return m_bVisible; }
   __inline void setVisible(bool bVisible = true) { m_bVisible = bVisible; }

protected:
   bool m_bVisible;
};


Heredando todos tus objetos "rendeables" de esta clase, y teniendo una lista de estos en tu manager de escena, deberias poder manejarte con soltura. Un saludo.


Sergio

 Lo primero de todo muchas gracias a los dos por contestarme :rolleyes:
ZaelSiuS: a lo mejor es que soy muy torpe (cosa muy posible xD) pero no encuentro los articulos que dices en gamedev.net y no encuentro para buscar. En cuanto al Irrlicht, estoy bajandome el SDK (de la version 0.3, que la 0.4 no tira) para verlo, a ver si entiendo algo :D
Astat: Esa es la parte que mas o menos tengo clara, el problema es lo que dices al final, como tener la lista de los nodos en la clase del manager de escena de manera poco guarra xD. Porque todo lo que se me ocurre es actualizando 5.000 punteros en distindos lados que apuntan al mismo sitio xDD.

Bueno, de nuevo gracias a los dos  :)  
here are only 10 types of people: those who understand binary and those who don't

Zaelsius

 MIra en:
http://www.gamedev.net/reference/features.asp
Mira a ver si encuentras otros artículos que te puedan ser útiles.

El enlace directo sobre programación de motores es:
http://www.gamedev.net/reference/programmi...res/enginuity1/
(hay cuatro partes por ahora)

Por cierto, pq dices que no te funciona la versión 0.4 de Irrlicht? Está mucho más  depurada y completa que la 0.3, pero si sólo vas a ver el código fuente te servirá. (Insisto, intenta bajar la 0.4 :))  

Sergio

 Muchas gracias ZaelSiuS!!
Me voy a leer los tutoriales a ver de que me entero jejeje.
Ah, lo del IrrLicht me he bajado la version 0.3 porque no tira la descarga de la 0.4, ahora probare :) pero de todas formas no me he enterado de nada xDDDD
Esta lleno de INoseque de las que derivan las clases y eso... es muy complicado para mi, vamos xDD cuando suba mi nivel en C++ y engines le echare un vistazo :)

Pues eso, ya os contare.

Un saludo!
here are only 10 types of people: those who understand binary and those who don't






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.