Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Implementación De Modelo3d

Iniciado por Yoshi.css, 02 de Diciembre de 2005, 02:45:21 PM

« anterior - próximo »

Yoshi.css

 Hola.

Tengo una pequeña duda de como implementar unas clases y quería saber si me podríais guiar.

Os pongo en situación:

Quiero implementar una clase muy básica para un modelo en 3D. En ella lo único que tiene es una lista de vértices y otra de polígonos.
Para ello creo dos clases CListaV y CListaP, cada una con un método Push para insertar los vértices y/o polígonos. También creo una clase llamada CModelo que guarda la lista de vértices y polígonos asociado a dicho modelo 3D.

Mi pregunta es, ¿qué es mejor (más correcto) desde vuestro punto de vista, que CModelo derive de CListaV y CListaP, o que CModelo contenga dentro de él mísmo un objeto CListaV y otro CListaP?.

Gracias.

Haddd

 CListaV y CListaP deberían ser una sola: CMesh.

El problema de derivar o no derivar es si tu clase tiene o no posibilidad de cambiar el elemento heredable. Por ejemplo, si tu haces eso:

CObjeto3D:CMesh Cuando crees un objeto tienes que crear su mesh. Además si en un futuro este objeto 3D tiene que tener otro Mesh en lugar de aquel con el que se creó, no podrás hacerlo.

Si haces esto

CObjecto3D

CMesh m_Mesh;

Puedes crear el objeto 3D y cambiar a voluntad despues este Mesh.

Nosotros tenemos:

CObjeto3D: Node

CMesh m_Mesh.

Node es un nodo del scene graph.

Ruben

 Hi,
yo creo que las dos opciones son correctas desde un punto de vista de diseño de poo.
1)Composición: un modelo está compuesto por una lista de vertices y una lista de polígonos.
2) Herencia multiple: pero también, se podría pensar que un modelo(cModelo) es una lista de vertices(cListaV) y tambien es una lista de poligonos(cListaP).

Personalmente prefiero la primera, como Haddd (ole) , a mi me resulta mas sencilla: haces una composición y te dejas de problemas de posibles ambigüedades con la herencia multiple.

A ver que opina el resto de compañeros.

Un saludo,
-Rubén-

zupervaca

 lo correcto es que CListaV y CListaP esten dentro de la clase CModelo ya que puedes usar CListaV y no CListaP en ciertos casos o usar las dos al mismo tiempo, cuando leemos un modelo 3d de un archivo debemos de mirar si sale mas rentable repetir vertices o usar los indices, pero esto es otro tema ;)

Yoshi.css

 Ok, creo que ya lo he pillado. En resumen, te refieres a tener una lista de meshs con los modelos cargados una sola vez en memoria, y luego tener un objeto de tipo CObjeto, cuyo modelo asociado no sea más que una referencia a la lista de modelos, ¿no?

QUOTE (ruben)
yo creo que las dos opciones son correctas desde un punto de vista de diseño de poo.
1)Composición: un modelo está compuesto por una lista de vertices y una lista de polígonos.
2) Herencia multiple: pero también, se podría pensar que un modelo(cModelo) es una lista de vertices(cListaV) y tambien es una lista de poligonos(cListaP).[/quote]
Yo también lo creo, pero me entraba la duda de si es mejor o no el que un objeto herede las propiedades de otro, o tener objetos dentro de objetos. :huh: No se porqué pero ésto último me da la sensación de ser más robusto (en este caso concreto).

tiutiu

 Ten cuidado con la herencia, muchas veces te da mas problemas que soluciones. La composicion en este caso es  una solucion mas adecuada.
Una malla no ES una lista de vertices y poligonos, sino que TIENE vertices, poligonos, normales, ...

Yo un modelo lo partiria en 2 partes al menos: geometria y material. La geometria seria la malla (vertices, poligonos, normales, map channels, ...) y el material tendria la informacion necesaria para dibujar geometria de una determinada manera (shader).
Diseña la clase de geometria para que use vertex buffers que puedas compartir entre instancias, asi ahorraras memoria y tiempo de carga.
El shader o material ya es otro cantar, hay que tener en cuenta que pipeline quieres usar (fixed function, programable o ambas), efectos que puedes llegar a montar, tipo de renderer, scriptable o hard-coded, ...


PD: usa la herencia solo cuando sea necesario, sin abusar B)  
b>:: Pandora's Box project ::
Notas e ideas sobre desarrollo de engines para juegos






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.