ciao.
Utilizzo un engine grafico di nome wild magic .
Attualmente l'engine utilizza uno scenegraph , un grafo a cui attaccare / rimuovere nodi(ragruppamenti di mesh)e mesh 3d per svariati motiviche non sto qui ad elencare.
La classe renderer semplificando non fa altro che attraversare il grafo e raccogliere le mesh 3d e (geometria e effetto)e i nodi per accumularle in uno stack e poi renderizzarle alla fine.
Il mio problema è che ho in una classe CMarker la rappresentazione grafica sotto forma di puntatore ad un nodo a cui sono attaccate le mesh proprie del oggetto marker instanziato da visualizzare.
ora , il nodo viene successivamente collegato allo scenegraph e i suoi dati delle mesh di rappresentazione vengono accumulati dalla classe renderer.
PAssando al problema:
mi piacerebbe utilizzare il pattern decorator per aggiungere /rimuovere runtime rappresentazioni al mio nodo nella classe ad es un rettangolo intorno alla mesh per la selezione o tantissimi altri oggetti tipo quote , id testuali ecc...
Il nodo come ho spiegato non dispone di un metodo draw e viene rendererizzato dopo la raccolta dei dati dalla classe renderer .
pensavo di ereditare dalla classe nodo CNodeDecorable e creare un metodo draw , richiamato dall interno del renderer tipo
codice:
class renderer{
void renderer::raccoltadati(){
DatiNodoRappersentazione = NodeRappresentation->Draw();
}
}
dato che non è possibile creare un metodo che renderizzi il nodo in opengl direttamente , perchè avrei due metodi di renderizzazione separati pensavo di farmi ritornare dal metodo draw() un array di mesh e effetti a seconda di che decorator ho agganciato al mio nodo, e poi fare il render di questo array nella classe renderer.
E' diverso da aggiungere rimuovere mesh direttamente sul puntatore del nodo , in quanto separo la logica di visualizzazione in varie funzioni draw dei decorator e posso gestirle a modo mio.
Sarebbero rappresentazioni "intelligenti".
Un altro metodo sarebbe quello di passare l'istanza del renderer alla classe CNodeDecorable ed eseguire il render del nodo grazie a questa classe richiamando il draw del renderer dal draw del decorator , a me personalmente questa soluzione piace di piu .
codice:
class renderer{
void renderer::raccoltadati(){
NodeRappresentation->Draw(This);
}
}
voi come fareste?
grazie