Eraser|85
06-11-2006, 20:18
Salve
sto lavorando ad un progetto che prevede il disegno di diverse poligonali. Questi sono i requisiti:
[x] Possibilità di aggiungere un numero non precisato di poligonali
[x] Possibilità di aggiungere un numero non precisato di punti per ogni poligonale
[x] Possibilità di selezionare un punto o una poligonale con un singolo click
[x] Possibilità di modificare la posizione dei punti per ciascuna poligonale
[ ] Implementare rotazione, scalatura e traslazione per ciascuna curva
Come facilmente intuibile, attualmente sono fermo all'ultimo dei requisiti.
Fin'ora ho realizzato un programma che si basa su questo schema:
http://img74.imageshack.us/img74/4973/schemavm0.th.jpg (http://img74.imageshack.us/my.php?image=schemavm0.jpg)
Ho una classe chiamata "curves" in cui ho una lista di "shape" (list<shape> in c++). Ogni "shape" a sua volta contiene una lista di puntatori a "dot2D" (list<dot2D *> sempre in c++). Memorizzo i puntatori invece che gli oggetti veri e propri perchè successivamente mi serve fare alcune operazioni su di loro.
Ogni punto ha inoltre un riferimento sottoforma di puntatore in un albero binario che uso per fare la ricerca dei punti quando clicco sulla viewport.
Il problema è.. quando io ruoto una singola shape in base al centro del suo convex hull (faccio una glTranslate per spostarmi alle coordinate (0,0), poi la glRotate e infine un'altra glTranslate per riportarmi alle coordinate originali) i punti avranno ovviamente su schermo coordinate diverse da quelle memorizzate nell'albero binario.. rendendo di fatto la ricerca dei punti impossibile.
La mia domanda quindi è.. come faccio a modificare le coordinate dei punti a seguito di una trasformazione (glRotate o glScale)?
sto lavorando ad un progetto che prevede il disegno di diverse poligonali. Questi sono i requisiti:
[x] Possibilità di aggiungere un numero non precisato di poligonali
[x] Possibilità di aggiungere un numero non precisato di punti per ogni poligonale
[x] Possibilità di selezionare un punto o una poligonale con un singolo click
[x] Possibilità di modificare la posizione dei punti per ciascuna poligonale
[ ] Implementare rotazione, scalatura e traslazione per ciascuna curva
Come facilmente intuibile, attualmente sono fermo all'ultimo dei requisiti.
Fin'ora ho realizzato un programma che si basa su questo schema:
http://img74.imageshack.us/img74/4973/schemavm0.th.jpg (http://img74.imageshack.us/my.php?image=schemavm0.jpg)
Ho una classe chiamata "curves" in cui ho una lista di "shape" (list<shape> in c++). Ogni "shape" a sua volta contiene una lista di puntatori a "dot2D" (list<dot2D *> sempre in c++). Memorizzo i puntatori invece che gli oggetti veri e propri perchè successivamente mi serve fare alcune operazioni su di loro.
Ogni punto ha inoltre un riferimento sottoforma di puntatore in un albero binario che uso per fare la ricerca dei punti quando clicco sulla viewport.
Il problema è.. quando io ruoto una singola shape in base al centro del suo convex hull (faccio una glTranslate per spostarmi alle coordinate (0,0), poi la glRotate e infine un'altra glTranslate per riportarmi alle coordinate originali) i punti avranno ovviamente su schermo coordinate diverse da quelle memorizzate nell'albero binario.. rendendo di fatto la ricerca dei punti impossibile.
La mia domanda quindi è.. come faccio a modificare le coordinate dei punti a seguito di una trasformazione (glRotate o glScale)?