The project consists of an interface for the creation of super surfaces of rotation, extrusion, to skinning, Coon and triangular. Besides creation, the application is able to manipulate in real time the surfaces created, changing the features used in construction. In the project are used libraries and Coin 3D ACIS R14.
La seconda guerra mondiale per licei e scuole medie
BS Project
1. Principi di Computer Graphics
Prof. R. De Amicis, Prof. G. Conti
Progetto BS
Nicola Segata matr.117325
Marco Bassetti matr.118090
24 agosto 2005
Sommario
Il progetto consiste in un'interfaccia per la creazione di superci di
rotazione, di estrusione, di skinning, di Coon e triangolari. Oltre alla
creazione, il programma è pensato per poter modicare in tempo reale
le superci create, modicando le features utilizzate nella costruzione.
Nel progetto sono utilizzate le librerie di Coin 3D e di Acis R14.
Il presente documento fornisce una visione generale del progetto,
per dettagli approfonditi e per il codice, riferirsi alla documentazione
Doxygen.
Indice
1 Scopo del progetto 2
2 Caratteristiche tecniche e implementazione 3
2.1 Organizzazione delle classi . . . . . . . . . . . . . . . . . . . . 3
3 Risultati ottenuti 11
4 Breve manuale utente 11
4.1 Comandi da tastiera e mouse . . . . . . . . . . . . . . . . . . 15
4.2 Procedure di creazione e modica delle superci . . . . . . . . 18
5 Conclusioni e possibili estensioni 21
1
2. 1 Scopo del progetto
Lo scopo del progetto è quello di poter costruire in modo semplice, intuitivo
e dinamico delle superci tridimensionali e poterle modicare in tempo reale
in un modo altrettanto semplice e user friendly.
È inoltre richiesto che tali superci elementari, dette superci base, pos-
sano essere costruite con diverse modalità ognuna caratterizzata da partico-
lari features. In particolare, si è scelto di implementare i seguenti metodi di
costruzione (e modica):
Superci di rivoluzione in questo caso gli strumenti di costruzione con-
sistono in una curva e un asse di rotazione. La supercie risultante
dalla rotazione completa del prolo della curva attorno all'asse è detta
supercie di rivoluzione.
Superci di estrusione in questo caso gli strumenti di costruzione sono 2
curve: una è il prolo da estrudere, l'altra è il percorso di estrusione.
Il punto di partenza del percorso di estrusione deve coincidere con un
punto qualunque della curva prolo da estrudere.
Superce di skinning L'operazione di skinning consiste nel creare una su-
percie interpolante un numero arbitrario di curve. In questo caso,
quindi, gli strumenti di costruzione sono costituite dalle n curve.
Superci di Coon Le superci di Coon sono create a partire da un circuito
di 4 curve concatenate con continuità C 0 nei punti di contatto. gli
strumenti di costruzione in questo caso sono le 4 curve.
Superci triangolari Per superci triangolari si intendono superci create
a partire da una circuito di 3 curve concatenate e con continuità C 0
nei 3 punti di coincidenza. Gli strumenti di costruzione sono quindi le
3 curve costituenti il circuito.
In generale gli strumenti di costruzione costituiti da curve devono poter
essere modicate dall'utente, sia in fase di costruzione che in fase di modica
delle superci, in base alle seguenti features:
• spostare la curva (rotazione e traslazione)
• aggiungere punti alla curva
• modicare i punti della curva
• applicare l'operazione di simmetria alla curva
L'asse è invece modicabile tramite features di rotazione e traslazione all'in-
terno della scena.
2
3. Il programma dovrà consentire all'utente la creazione di geometrie me-
diamente complesse ottenute dalla composizione di un numero arbitrario
di superci base. In sostanza si dovrebbe riuscire a implementare alcune
funzioni base di un ipotetico kernel di programma di modellazione 3D.
2 Caratteristiche tecniche e implementazione
Il programma è stato realizzato in C++ e secondo il paradigma Object Orien-
ted con ereditarietà. Le features che sono state denite per le modalità di
creazione e modica delle curve sono descritta nella prossima sottosezione.
Il progetto può essere schematizzato in più moduli funzionali:
Kernel superci insieme di classi che implementano la creazione e mo-
dica delle superci base nelle modalità richieste. È la componente
matematica del progetto e si appoggia sulle librerie di ACIS; con-
sta principalmente della classe NurbsSur e delle glie RotNurbsSur,
EstNurbsSur, SkinNurbsSur, CoonNurbsSur, TriNurbsSur .
Strumenti di costruzione insieme di classi che forniscono gli strumenti
graci e di interazione con l'utente per interfacciarsi con le superci (il
modulo precedente). Si tratta dei piani di appoggio (DrawingPlane ),
degli assi di rotazione (RotationAxis ), delle curve (MyCurve2D e My-
Nurbs, della griglia di simmetria (SymmetryPlane ) e del box graco di
aiuto (DecalBox ).
Gestione generale classi che permettono l'interazione e la comunicazione
fra utente, strumenti graci di costruzione, superci base e informazioni
di output (notica errori ecc...). Si tratta principalmente delle classi
BS_Handler e BackGround_Viewer.
Utility strumenti di supporto (funzioni generali usate frequentemente, sal-
vataggio screenshot e sequenze di immagini).
In gura 1 viene presentato il diagramma delle classi con aggiunta di 4
colori che determinano l'appartenenza a uno dei 4 moduli. Nelle gure 2 e 3
sono evidenziate alcune parti della struttura. I diagrammi delle classi sono
largamente incompleti per questione di spazio, evidenziando solamente gli
attributi e i metodi più importanti e le relazioni di maggior interesse. Nella
documentazione generata da Doxygen sono presenti i diagrammi specici con
tutti gli attributi e metodi.
2.1 Organizzazione delle classi
Ora analizziamo in maniera più approfondita le classi principali del progetto.
3
5. BS_Handler
+viewer
+frameCapurer
-root
-drawingPlane[]
-rotationAxis[]
0 n
-surfaceSep NurbsSur
+BS_Handler() +resolution: float
+~BS_Handler()
+NurbsSur()
+callRevolution()
+~NurbsSur()
+callExtrusion()
+select()
+callSkinning()
+deselect()
+callCoon()
+isSelected()
+callTri()
+increaseUTess()
+increaseVTess()
+changeColor()
+setErrorString()
-mk_ind_face_set()
RotNurbsSur SkinNurbsSur
-axis -nl TriNurbsSur
-axisTransform -n_nurbs -nurbs1
-transfSensor -nurbsListSensor -nurbs2
-nurbsSensor -transfSensor -nurbs3
-axisSensor
+SkinNurbsSur() +TriNurbsSur()
+RotNurbsSur() +~SkinNurbsSur() +~TriNurbsSur()
+~RotNurbsSur() +update() +update()
+update() -SkinNurbsSurCB() -TriNurbsSurCB()
-RotNurbsSurCB()
EstNurbsSur CoonNurbsSur
-path -nurbs1
-pathTransf -nurbs2
-pathSensor -nurbs3
-nurbsSensor -nurbs4
-transSensor -transfSensor
+EstNurbsSur() +CoonNurbsSur()
+~EstNurbsSur() +~CoonNurbsSur()
+update() +update()
+EstNurbsSurCB() -CoonNurbsSurCB()
Figura 2: Particolare del diagramma delle classi riguardante il modulo per
la costruzione e modica delle superci.
5
6. 1
1 SymmetryPlane
DecalBox
+SymmetryPlane()
+DecalBox()
+~SymmetryPlane()
+~DecalBox()
+show(): void
+show(): void
+hide(): void
BS_Handler BackgroundViewer
+viewer -foreground
1 -background
+frameCapurer
1
+decalBox +BackgroundViewer()
DrawingPlane +symmetryPlane
1 1
n +~BackgroundViewer()
+matrixTransform -root +hideForeground()
+myDragger3D -drawingPlane[] +showForeground()
1 1
-myCurve2D -rotationAxis[] +hideBackground()
1 1
-surfaceSep +showBackground()
+DrawingPlane()
+~DrawingPlane() +BS_Handler()
+select() +~BS_Handler()
+activateDrawing() +callRevolution()
+symmetric() +callExtrusion()
+showPoints() +callSkinning()
1 1
+callCoon()
+callTri()
RotationAxis
n
MyCurve2D MyDragger3D -myAxis
1 -myDragger3D
+matrixTransform -matrixTransform 1
+RotationAxis()
#indexes -rotDraggers
+~RotationAxis()
#curve2D -transDraggers
+select()
#coord -planeDraggers
+deselect()
+MyCurve2D() +MyDragger() +show()
+~MyCurve2D() +~MyDragger()
+addPoint()
+select()
+deSelect()
+changeMovingPoint()
+showPoints()
+symmetric()
MyAxis
-pos
-vec
+MyAxis()
MyNurbs +~MyAxis()
-pts
+MyNurbs()
+~MyNurbs() MyPolyline
+addPoint()
+changeMovingPoint()
+getCURVE()
+clonate()
+symmetric()
-makeIntNurbs()
Figura 3: Particolare del diagramma delle classi riguardante il modulo per
la gestione generale e il modulo degli strumenti di costruzione.
6
7. Primo modulo Il primo modulo, il kernel superci, è composto dalle
seguenti classi:
NurbsSur Classe padre per la rappresentazione di superci NURBS. Non
contiene funzioni per la generazione delle superci in quanto tale fun-
zione di base è contenuta nelle classi glie. Contiene invece la funzione
per tassellare le superci creando un insieme di poligoni indicizzati che
vengono visualizzati. La visualizzazione si basa quindi su un SoInde-
xedFaceSet con visualizzazione su entrambe le facce. Viene anche ge-
stita l'aggiunta, il movimento, la selezione e la modica della supercie
simmetrica a quella costruita.
RotNurbsSur Classe per la costruzione e la gestione di una supercie di
rotazione. La supercie di rotazione deve essere associata ad un asse
(MyAxis ) e ad una nurbs (MyNurbs ). La classe mantiene un puntatore
a questi due oggetti ai quali è applicato un SoNodeSensor per rilevare
eventuali modiche ed applicarle in tempo reale modellando la nuova
supercie.
Le features della supercie di rotazione sono:
• posizione e rotazione della curva prolo e dell'asse
• posizione dei punti del prolo
• aggiunta di nuovi punti al prolo
• applicazione dell'operazione di simmetria sulla curva prolo
EstNurbsSur Classe per la costruzione e la gestione di una supercie di
estrusione. La supercie deve essere associata a due nurbs: una rap-
presenta la curva da estrudere, l'altra il percorso di estrusione. La
classe mantiene due puntatori alle due nurbs ai quali è applicato un
SoNodeSensor per rilevare eventuali modiche ed applicarle in tempo
reale modellando la nuova supercie.
Le features della supercie di estrusione sono:
• posizione e rotazione della curva da estrudere
• rotazione della curva di estrusione
• aggiunta di nuovi punti alla curva da estrudere e a quella di
estrusione
• posizione dei punti della curva da estrudere e di quella di estru-
sione
• applicazione dell'operazione di simmetria sulla curva da estrudere
e su quella di estrusione
7
8. SkinNurbsSur Classe per la costruzione e la gestione di una supercie
di skinning. La supercie deve essere associata a una lista di nurbs
(MyNurbs ) con minimo 2 elementi. La classe mantiene un puntatore ad
ogni nurbs ai quali è applicato un SoNodeSensor per rilevare eventuali
modiche ed applicarle in tempo reale modellando la nuova supercie.
Le features della supercie di skinning sono:
• posizione e rotazione delle curve della lista di curve di costruzione
• posizione dei punti di ogni curva della lista di curve di costruzione
• applicazione dell'operazione di simmetria su qualsiasi curva di
costruzione
CoonNurbsSur Classe per la costruzione e la gestione di una supercie
di Coon. La supercie deve essere associata a 4 nurbs (MyNurbs )
collegate in un circuito chiuso. La classe mantiene un puntatore alle
4 nurbs alle quali è applicato un SoNodeSensor per rilevare eventuali
modiche ed applicarle in tempo reale modellando la nuova supercie.
Le features della supercie di Coon sono:
• posizione dei punti di ognuna delle 4 curve (eccezion fatta per
i punti in comune tra le curve che devono rimanere uniti per
preservare la continuità).
TriNurbsSur Classe per la costruzione e la gestione di una supercie trian-
golare. La supercie deve essere associata a 3 nurbs (MyNurbs ) col-
legate in un circuito chiuso. La classe mantiene un puntatore alle 3
nurbs alle quali è applicato un SoNodeSensor per rilevare eventuali
modiche ed applicarle in tempo reale modellando la nuova supercie.
Le features della supercie triangolare sono:
• posizione dei punti di ognuna delle 3 curve (eccezion fatta per i
punti in comune tra le curve).
Secondo modulo Il secondo modulo, quello degli strumenti di costruzio-
ne, è composto principalmente dalle seguenti classi:
DrawingPlane Il DrawingPlane è un nodo dell'albero di scena che consente
principalmente di disegnare una curva nurbs su un piano traslabile e
ruotabile. Il movimento del piano avviene grazie a un MyDragger3D
posto nel suo centro.
In sintesi le principali operazioni che questa classe consente sono:
• disegno di una curva nurbs; il movimento del mouse con il tasto
sinistro cliccato provoca la proiezione della posizione 2D del mouse
8
9. sul piano, ad intervalli dipendenti sia dalla distanza temporale che
dalla distanza geometrica dal punto precedente.
• il piano può essere mosso grazie al dragger presente al suo centro
• il piano può essere selezionato e deselezionato per consentire la
gestione contemporanea di più piani sulla scena e la costruzione
delle superci.
• il piano può essere ridimensionato sia verticalmente che orizzon-
talmente
• i punti della curva generata possono essere mossi, sempre comun-
que solo sul piano di appartenenza
• è possibile agire sulla curva anche con l'operazione di simmetria
• un piano puo' essere clonato, eventualmente con la corrispondente
curva, se presente.
Il DrawingPlane è lo strumento di base per la creazione di curve e per
la loro interazione per formare superci. La classe contiene anche le
opzioni per gestire piani legati ad altri, principalmente per gestire il
caso in cui si voglia poter legare il centro di un piano ad un punto di
un altro, meccanismo molto utile per l'operazione di estrusione.
RotationAxis Il RotationAxis è un nodo dell'albero di scena che consente
di visualizzare una linea, con funzione di asse di rotazione e poterla
muovere grazie al dragger posto nel suo punto medio. La selezione
avviene cliccando sul suo dragger in quanto la linea è dicilmente
selezionabile. È basato sulla classe MyAxis.
MyDragger3D Classe che implementa un dragger 3D che supporta i se-
guenti movimenti: traslazione lungo i tre assi cartesiano locali, rota-
zione riferita al centro del dragger attorno ai tre assi cartesiano locali,
traslazione bidimensionale sul piano locale XY. Queste tre tipologie di
movimento sono autonome e quindi è possibile creare dei dragger con
solamente alcune di esse.
Allo spostamento il dragger sposta se stesso e modica la trasforma-
zione (SoMatrixTransform ) che gli è stata passata nel costruttore in
modo tale da spostare coerentemente con il proprio spostamento tutti
i nodi collegati a tale trasformazione.
Attualmente il dragger si seleziona con il click sinistro del mouse e,
una volta selezionato si muove solamente con lo spostamento del mou-
se. Indipendentemente dal dispositivo di input, la funzione chiave è
moveMatrix() che modica la matrice di trasformazione in base alla
posizione 2D normalizzata passatale.
Il dragger è gestito con un nodo SoComplexity per gestire la denizione
delle geometrie in base alla distanza reale dal punto di osservazione.
9
10. MyCurve2D La classe padre per ogni tipo di curva. Fondamentalmen-
te si limita a gestire i punti della curva (inserimento, visualizzazione,
spostamento) senza preoccuparsi di come le classi glie utilizzeran-
no tali punti per creare una curva ( nurbs, spline, polyline.... ) per
approssimazione o per interpolazione. I punti sono visualizzati come
sferette e sono visualizzati tramite un nodo SoComplexity per gestire
la denizione delle sfere in base alla distanza dall'osservatore.
MyNurbs Classe che estende MyCurve2D e implementa la curva nurbs
interpolante. Per la creazione della curva a partire dai punti è utilizzata
la funzione di ACIS api_curve_spline(), mentre per la visualizzazione
è usato un SoIndexedLineSet. Il passo di campionamento della curva è
stabilito in base alla lunghezza reale della curva.
DecalBox Il DecalBox è una scatola per visualizzare diverse viste del-
lo stesso oggetto e poter osservarle ortogonalmente. Risulta così più
intuitivo e semplice costruire superci da immagini raguranti le pro-
iezioni ortogonali dell'oggetto da modellare. Le immagini che vengono
caricate devono essere presenti nella cartella dell'eseguibile e devono
essere 4: backFront.jpg per l'immagine frontale rispetto alla posizione
iniziale dell'osservatore, backLeft.jpg per l'immagine sinistra, backBot-
tom.jpg per l'immagine inferiore e backRight.jpg per l'immagine destra
da scambiare a piacere con quella sinistra. Le dimensioni delle imma-
gini sul box vengono ottimizzate automaticamente, quindi è suciente
che le quattro immagini siano tra di loro proporzionate.
SymmetryPlane Visualizza una griglia rappresentante il piano di simme-
tria rispetto al quale le superci possono essere duplicate. Essa è posta
sul piano xy.
Terzo modulo: gestione generale Il terzo modulo, quello della gestione
generale, consta delle seguenti 2 classi:
BS_Handler BS_Handler è la classe che gestisce l'applicazione. Si occupa
di creare la nestra graca e gestire le componenti al suo interno come
per esempio l'inserimento di piani per disegnare curve (DrawingPlane )
e di assi per le superci di rotazione (RotationAxis ), la gestione del
viewer (BackgroundViewer ), la gestione della classe per la creazione di
frame per la creazione di lmati e la chiamata delle classi e delle fun-
zioni per la creazione delle superci. Contiene inoltre la radice di tutto
l'albero di scena. Il costruttore contiene le inizializzazioni principali
della nestra e delle variabili, mentre le funzioni pubbliche sono quelle
importanti per l'interazione con la scena; attualmente queste funzioni
sono chiamate dalla callback della tastiera ma sono concettualmente
indipendenti da essa.
10
11. BackgroundViewer Classe che estende SoWinExaminerViewer, aggiun-
gendo la possibilià di mostrare in primo piano messaggi di errore e
l'attuale risoluzione di rendering, e di visualizzare un'immagine di
sfondo.
Quarto modulo: utility Il quarto modulo, quello delle utility generali,
contiene le seguenti classi
FramesCapturer Classe per il salvataggio di screenshot della scena e di
intere sequenze di immagini dalle quali creare lmati. Utilizza la ren-
derizzazione oscreen (SoOscreenRenderer ) e nel caso della sequenza
di immagini, le immagini vengono salvate di norma alla ne dell'opera-
zione di cattura. La denizione standard per gli screenshot è 1024×768,
mentre per la sequenza di immagini è 480 × 360.
Utility Classe di supporto che raccoglie funzioni statiche con funzioni ge-
nerali di uso frequente.
MyColors Classe che fornisce una serie di colori predeniti ( memorizza-
ti come SbColor ) restituendoli sequenzialmente ad ogni chiamata di
getNextColor().
3 Risultati ottenuti
I risultati ottenuti sono stati soddisfacenti; è stato infatti possibile utilizzare
il programma per modellare scene relativamente complesse come quelle dalle
quali sono stati catturati gli screenshot delle gure 4, 5, 6. In questi screen-
shot sono utilizzate principalmente le superci base di rivoluzione, estrusione
e skinning, in quanto le superci di Coon e triangolari sono state implemen-
tate per ultime e non è stato possibile testarle approfonditamente, tuttavia
esse si dimostrano più potenti e versatili delle altre tre. Anche la possibilità
di visualizzare una supercie simmetrica rispetto ad una già costruita ha
permesso un miglioramento nella modellazione in quanto si possono ridurre
le parti dell'oggetto eettivamente da modellare e si ottiene una maggiore
precisione complessiva.
Per quanto riguarda il vincolo di real time, esso è rispettato anche per
scene molto complesse, l'unica situazione in cui la visualizzazione non è molto
uida è quella in cui è attivo il modulo di salvataggio su le dei frame della
scena, ma ciò è inevitabile.
4 Breve manuale utente
Questa sezione presenta brevemente le speciche necessarie per poter uti-
lizzare il programma sviluppato; molto probabilmente non è suciente per
poter utilizzare tutte le funzionalità e in modo completo.
11
12. Figura 4: Alcuni screenshot catturati durante la modellazione di superci
di estrusione, rotazione e skinning per la costruzione di un'automobile, in
particolare l'Audi TT.
12
13. Figura 5: Alcuni screenshot catturati durante la modellazione di superci di
estrusione, rotazione e skinning per la costruzione di uno scivolo.
13
14. Figura 6: Altri esempi di modellazione di superci, gli ultimi due esempi
utilizzano le superci di Coon.
14
15. In estrema sintesi, normalmente, ciò che si fa con il programma è creare
dei DrawingPlane sulla scena (TASTO P), spostarli a piacimento (intera-
gendo con il dragger del piano tramite mouse), disegnare curve sui piani (è
necessario prima nascondere il dragger del piano con il TASTO D), selezio-
nare i piani desiderati e chiamare con l'apposito tasto la costruzione della
supercie richiesta. L'altra famiglia di operazioni tipiche consiste nella mo-
dica delle features delle superci create. Le dierenze e le procedure per la
creazione e la modica delle 5 diverse tipologie di superci sono presentate
nella seconda sottosezione di questa sezione.
Iniziamo prima ad introdurre i comandi generali.
4.1 Comandi da tastiera e mouse
Comandi per la costruzione delle superci base La costruzione delle
5 superci base si chiama premendo il rispettivo tasto numerico, dopo aver
selezionato opportunamente le componenti necessarie. In particolare:
TASTO 1 viene chiamata la procedura per costruire una supercie di rivo-
luzione (devono essere selezionati un piano e un asse)
TASTO 2 viene chiamata la procedura per costruire una supercie di estru-
sione (deve essere selezionato un piano con un piano ortogonale colle-
gato)
TASTO 3 viene chiamata la procedura per costruire una supercie di skin-
ning (devono essere selezionati 2 o più piani e lo skinning avviene per
ordine di selezione)
TASTO 4 viene chiamata la procedura per costruire una supercie di Coon
(devono essere selezionati 4 piani con curve collegate tra loro)
TASTO 5 viene chiamata la procedura per costruire una supercie trian-
golare (devono essere selezionati 3 piani con curve collegate tra loro)
Gli input da tastiera generali I seguenti comandi sono detti input ge-
nerali in quanto sono invocabili solo quando non vi è nulla di selezionato
sulla scena. Essi sono:
TASTO P viene aggiunto un nuovo DrawingPlane: al centro della scena
se non vi è nulla di selezionato, centrato nell'estremo di una curva se
è selezionato un punto della curva stessa, centrato nell'estremo di una
curva e passante per l'estremo di una seconda curva se sono selezionati
un punto della prima curva e un punto della seconda curva.
TASTO A viene aggiunto un nuovo RotationAxis al centro della scena
15
16. TASTO O viene aggiunto un piano ortogonale collegato al piano seleziona-
to (deve essere selezionato un punto della curva di un piano normale).
TASTO C clona il piano selezionato
TASTO E cancella tutta la scena
TASTO K inizia la cattura di frame che verranno salvati per lmati
TASTO L termina la cattura dei frame e li salva su disco
TASTO F eettua uno screenshot della scena e la salva su le
TASTO F1 visualizza gli oggetti che hanno il compito di costruire superci
(DrawingPlane e RotationAxis )
TASTO F2 nasconde gli oggetti che hanno il compito di costruire super-
ci (DrawingPlane e RotationAxis ) se nessuno di essi è selezionato,
altrimenti nasconde solo gli oggetti selezionati.
TASTO F3 imposta una bassa risoluzione per tutte le superci costruite
TASTO F4 imposta una risoluzione media per tutte le superci costruite
TASTO F5 imposta una alta risoluzione per tutte le superci costruite
TASTO F6 nasconde/mostra il primo piano del BackgroundViewer
TASTO F7 mostra/nasconde il piano di simmetria della scena
TASTO F8 attiva la visualizzazione frontale del DecalBox
TASTO F9 attiva la visualizzazione sinistra del DecalBox
TASTO F10 attiva la visualizzazione inferiore del DecalBox
TASTO F11 nasconde il DecalBox dalla scena
TASTO F12 mostra il DecalBox dalla scena se assente, altrimenti scambia
l'immagine di destra al posto di quella di sinistra
Comandi relativi al dragger Le operazioni di interazione con il dragger
(di un DrawingPlane o di un RotationAxis ) avvengono tramite mouse e sono:
• traslazione lungo i tre assi cartesiano locali. Si deve selezionare (click
sinistro) una delle frecce dell'asse che si vuole traslare, eettuata la
selezione (il componente selezionato diventa blu), muovere il mouse
senza premere alcun tasto, cliccare nuovamente per ssare la nuova
posizione deselezionando il dragger.
16
17. • rotazione riferita al centro del dragger attorno ai tre assi cartesiani
locali. Si deve selezionare (click sinistro) uno dei tre dischi di rotazione,
eettuata la selezione (il componente selezionato diventa blu), muovere
il mouse senza premere alcun tasto, cliccare nuovamente per ssare la
nuova rotazione deselezionando il dragger.
• traslazione bidimensionale sul piano locale XY. Si deve selezionare
(click sinistro) la sfera al centro del dragger, eettuata la selezione
(il componente selezionato diventa blu), muovere il mouse senza pre-
mere alcun tasto, cliccare nuovamente per ssare la nuova posizione
deselezionando il dragger.
I comandi del DrawingPlane I seguenti comandi sono relativi al Dra-
wingPlane, ciò signica che essi possono venire invocati su un piano sola-
mente se esso è attualmente selezionato. I comandi del DrawingPlane da
tastiera sono:
TASTO D attiva, disattiva il dragger (le curve si possono disegnare sola-
mente con il dragger disattivato)
TASTO W diminuisce la larghezza del piano
TASTO SHIFT+W aumenta la larghezza del piano
TASTO H diminuisce l'altezza del piano
TASTO SHIFT+H aumenta l'altezza del piano
TASTO V mostra/nasconde i punti della curva
TASTO A permette di continuare a disegnare una curva. Al rilascio del
pulsante sinistro del mouse, infatti, alla curva non si possono aggiun-
gere altri punti, a meno che non venga premuto questo tasto
TASTO S applica l'operazione di simmetria alla curva
Mentre l'interazione con i piani tramite mouse consente di :
• muovere il piano tramite l'interazione con il dragger
• disegnare la curva (click sinistro + spostamento)
• aggiungere nuovi punti alla curva (tasto A e successivamente click
sinistro + spostamento)
• spostare i punti della curva sul piano (selezionando e trascinando i
punti)
• selezionare/deselezionare il piano (cliccando sul piano o meno)
17
18. I comandi del RotationAxis Sul RotationAxis axis è possibile a agire
con il suo dragger, mentre da tastiera è invocabile solo la seguente operazione:
TASTO D attiva, disattiva il dragger
I comandi per le superci I comandi per le superci sono operazioni
da tastiera invocabili quando qualsiasi tipo di superce di base ( o la sua
simmetrica) è selezionata. In breve essi sono:
TASTO A mostra la rispettiva supercie simmetrica (che è selezionabile e
sulla quale si possono invocare i comandi di questo paragrafo, aggiun-
ta e rimozione della simmetrica esclusi). La supercie simmetrica si
muove coerentemente con il movimento della rispettiva supercie.
TASTO R nasconde la rispettiva supercie simmetrica
TASTO C cambia il colore della supercie
TASTO V diminuisce il fattore di tassellamento del parametro v
TASTO SHIFT+V aumenta il fattore di tassellamento del parametro v
TASTO U diminuisce il fattore di tassellamento del parametro u
TASTO SHIFT+U aumenta il fattore di tassellamento del parametro u
Tutti questi comandi vengono applicati in tempo reale alla supercie sele-
zionata e alla sua simmetrica se presente..
4.2 Procedure di creazione e modica delle superci
Vengono ora presentate più in dettaglio la serie di operazioni necessaria per
costruire le 5 tipologia di superci di base implementate.
Supercie di rivoluzione La supercie di rivoluzione è creata partendo
da un prolo di qualsiasi natura, e un asse di rivoluzione attorno al quale
viene idealmente replicato il prolo dando origine alla supercie. La proce-
dura di costruzione è semplice ed intuitiva: di seguito viene spiegata passo
passo.
1. Creare un piano (TASTO P) e su di esso disegnare il prolo di rivolu-
zione
2. Creare un asse di rotazione (TASTO A senza nessun oggetto selezio-
nato)
3. Traslare e/o ruotare nelle posizioni volute il prolo e l'asse agendo sui
rispettivi dragger
18
19. 4. Selezionare sia il piano del prolo, sia l'asse di rotazione. La selezione
multipla si eettua tenendo premuto il tasto SHIFT.
5. Premere il TASTO 1. Si crea la supercie.
6. È possibile modicare la supercie agendo sulle sue features (vedi
sezione 2.1, punto RevNurbsSur ).
Modicando le features, verrà modicata dinamicamente anche le su-
perci (anche più di una) ad esse collegate. In questo modo sarà possibile
correggere in modo semplice e preciso il solo prolo o la posizione dell'asse
di rotazione vericando in tempo reale il nuovo aspetto della supercie.
Supercie di estrusione La supercie di estrusione è denita da un pri-
mo prolo, e da un secondo che indica il percorso lungo il quale replicare il
prolo iniziale dando origine alla supercie. La procedura di costruzione è
semplice ed intuitiva: di seguito viene spiegata passo passo.
1. Creare un piano e su di esso disegnare la curva da estrudere
2. Selezionare un punto qualsiasi della curva da estrudere dal quale partirà
il percorso di estrusione (premere il TASTO V per visualizzare i punti
selezionabili della curva)
3. Premere il TASTO O: apparirà un piano centrato nel punto selezionato
e ortogonale al piano della curva da estrudere avente un dragger con
le sole componenti di rotazione
4. Traslare e/o ruotare nelle posizioni volute il prolo e il percorso agen-
do sui dragger dei rispettivi piani. Il piano ortogonale non può essere
direttamente traslato ma può essere solo ruotato per garantire la coin-
cidenza tra l'inizio del percorso (sso nell'origine del piano ortho) e il
punto selezionato del prolo. Muovendo il piano del prolo, si agisce
contemporaneamente anche sul rispettivo piano ortogonale.
5. Premere il TASTO 2 con il piano della curva da estrudere selezionato.
Si crea la supercie.
6. È possibile modicare la supercie agendo sulla sue features (vedi
sezione 2.1, punto EstNutbsSur ).
Modicando le features, verrà modicata dinamicamente anche la super-
cie ad esse collegate. In questo modo sarà possibile correggere in modo
semplice e preciso il solo prolo o il percorso di estrusione vericando in
tempo reale il nuovo aspetto della supercie.
19
20. Supercie di skinning La supercie di skinning consiste in una supercie
che interpola una serie di curve poste in successione. Tale ordine di succes-
sione determina in maniera rilevante la forma della supercie. La procedura
di costruzione è di seguito spiegata passo passo.
1. Creare un piano (TASTO P) e su di esso disegnare la prima curva
2. Ripetere la prima operazione per tutte le curve da coinvolgere nella
costruzione della supercie di skinning. Si può velocizzare la procedura
grazie al comando clone
3. Traslare e/o ruotare nelle posizioni volute i vari proli agendo sui
dragger dei rispettivi piani.
4. Selezionare tutti i proli interessati i sequenza. La selezione multipla
si eettua tenendo premuto il tasto SHIFT.
5. Premere il TASTO 3. Si crea la supercie desiderata.
6. È possibile modicare la supercie agendo sulle sue features (vedi
sezione 2.1, punto SkinNurbsSur ).
Modicando le features, verrà modicata dinamicamente anche la su-
percie ad esse collegate. In questo modo sarà possibile correggere in
modo semplice e preciso i singoli proli vericando in tempo reale il
nuovo aspetto assunto dalla supercie.
Supercie di Coon La supercie di Coon necessita di 4 curve collegate in
modo da formare un circuito chiuso. I passi seguenti descrivono la procedura
per creare le curve collegate e della supercie.
1. Creare il primo piano (TASTO P) e su di esso disegnare la prima curva
2. Selezionare un punto della curva (premere il TASTO V per visualizzare
i punti selezionabili della curva)
3. Creare il secondo piano premendo nuovamente il TASTO P. Il nuovo
piano ha origine all'estremità della curva del punto selezionato. (È
possibile solamente modicare la rotazione e non la traslazione del
nuovo piano per mantenere la coincidenza tra origine del nuovo piano
e estremità della curva del punto selezionato).
4. Disegnare la seconda curva sul nuovo piano. Si può notare come il
primo punto di essa è sso nell'origine del nuovo piano.
5. Ripetere queste 2 ultime operazioni per costruire la terza curva colle-
gata.
20
21. 6. Per costruire la quarta curva è necessario innanzitutto creare l'ultimo
piano con origine nell'estremo della terza curva e passante per il primo
punto della prima, in modo da formare un circuito chiuso. Quindi
selezionare l'ultimo punto della terza curva e il primo della prima e
premere il TASTO P per creare in automatico l'ultimo piano passante
per i due punti selezionati.
7. Disegnare la quarta curva. Non serve preoccuparsi di far coincidere
precisamente l'estremità di quest'ultima con l'inizio della prima, questa
operazione sarà automatica.
8. Selezionare tutti i quattro proli interessati. La selezione multipla si
eettua tenendo premuto il tasto SHIFT.
9. Premere il TASTO 4. Si crea la supercie desiderata.
10. È possibile modicare la supercie agendo sulle sue features (vedi
sezione 2.1, punto CoonNurbsSur ).
Modicando le features, verrà modicata dinamicamente anche la su-
percie ad esse collegate. In questo modo sarà possibile correggere in
modo semplice e preciso i singoli proli vericando in tempo reale il
nuovo aspetto assunto dalla supercie.
Supercie triangolare La supercie triangolare rispecchia quasi comple-
tamente le caratteristiche della supercie di Coon, essendo però costruita su
un circuito chiuso di 3 curve anziché di 4.
I passi di costruzione sono gli stessi del caso precedente salvo il passo 5
che non deve essere considerato passando direttamente al punto 6 (conside-
rando ovviamente la dicitura quarta curva e terza curva rispettivamente
in terza curva e seconda curva).
Anche per quanto riguarda la manipolazione delle features, è possibile
anche in questo caso, con le stesse modalità e risultati dei casi precedenti
(vedi sezione 2.1, punto TriNurbsSur ).
5 Conclusioni e possibili estensioni
Il programma sviluppato soddisfa gli scopi che sono stati esposti nella prima
sezione. Tuttavia, si possono pensare diversi miglioramenti e aggiunte che
possono rendere il progetto più completo e potente. I principali sono:
• Superamento della limitazione della possibilità di disegnare superci
solamente su un piano, consentendo la possibilità di disegnare sulle
superci di base. In questo modo è anche possibile creare connessioni
più precise tra superci.
21
22. • Possibilità di applicare alle superci un dragger in modo da poterle
muovere all'interno della scena, assieme ovviamente ai propri strumenti
di costruzione e alle proprie features.
• Aggiunta di nuove superci base.
• Possibilità di creare solidi di base oltre che superci. È possibile
pensare alla costruzione di solidi anche a partire da superci di base.
• Sviluppo di una funzione di tassellamento che tenga conto della cur-
vatura delle superci nel determinare i passi di campionatura che non
dovranno quindi più essere costanti all'interno di una supercie.
• Aggiunta di altri strumenti di interazione oltre al mouse e alla tastiera
• Strumenti per l'unione e la divisione delle superci di base.
• Aggiunta degli operatori booleani tra solidi di base
22