BS Project

22

description

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.

Transcript of BS Project

Page 1: BS Project

Principi di Computer GraphicsProf. R. De Amicis, Prof. G. Conti

Progetto BSNicola Segata matr.117325Marco Bassetti matr.118090

24 agosto 2005

SommarioIl progetto consiste in un'interfaccia per la creazione di super�ci di

rotazione, di estrusione, di skinning, di Coon e triangolari. Oltre allacreazione, il programma è pensato per poter modi�care in tempo realele super�ci create, modi�cando 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 documentazioneDoxygen.

Indice1 Scopo del progetto 2

2 Caratteristiche tecniche e implementazione 32.1 Organizzazione delle classi . . . . . . . . . . . . . . . . . . . . 3

3 Risultati ottenuti 11

4 Breve manuale utente 114.1 Comandi da tastiera e mouse . . . . . . . . . . . . . . . . . . 154.2 Procedure di creazione e modi�ca delle super�ci . . . . . . . . 18

5 Conclusioni e possibili estensioni 21

1

Page 2: BS Project

1 Scopo del progettoLo scopo del progetto è quello di poter costruire in modo semplice, intuitivoe dinamico delle super�ci tridimensionali e poterle modi�care in tempo realein un modo altrettanto semplice e �user friendly�.

È inoltre richiesto che tali super�ci elementari, dette super�ci base, pos-sano essere costruite con diverse modalità ognuna caratterizzata da partico-lari features. In particolare, si è scelto di implementare i seguenti metodi dicostruzione (e modi�ca):

Super�ci di rivoluzione in questo caso gli strumenti di costruzione con-sistono in una curva e un asse di rotazione. La super�cie risultantedalla rotazione completa del pro�lo della curva attorno all'asse è dettasuper�cie di rivoluzione.

Super�ci di estrusione in questo caso gli strumenti di costruzione sono 2curve: una è il pro�lo da estrudere, l'altra è il percorso di estrusione.Il punto di partenza del percorso di estrusione deve coincidere con unpunto qualunque della curva pro�lo da estrudere.

Super�ce di skinning L'operazione di skinning consiste nel creare una su-per�cie interpolante un numero arbitrario di curve. In questo caso,quindi, gli strumenti di costruzione sono costituite dalle n curve.

Super�ci di Coon Le super�ci di Coon sono create a partire da un circuitodi 4 curve concatenate con continuità C0 nei punti di contatto. glistrumenti di costruzione in questo caso sono le 4 curve.

Super�ci triangolari Per super�ci triangolari si intendono super�ci createa partire da una circuito di 3 curve concatenate e con continuità C0

nei 3 punti di coincidenza. Gli strumenti di costruzione sono quindi le3 curve costituenti il circuito.

In generale gli strumenti di costruzione costituiti da curve devono poteressere modi�cate dall'utente, sia in fase di costruzione che in fase di modi�cadelle super�ci, in base alle seguenti features:

• spostare la curva (rotazione e traslazione)

• aggiungere punti alla curva

• modi�care i punti della curva

• applicare l'operazione di simmetria alla curva

L'asse è invece modi�cabile tramite features di rotazione e traslazione all'in-terno della scena.

2

Page 3: BS Project

Il programma dovrà consentire all'utente la creazione di geometrie me-diamente complesse ottenute dalla composizione di un numero arbitrariodi super�ci base. In sostanza si dovrebbe riuscire a implementare alcunefunzioni base di un ipotetico kernel di programma di modellazione 3D.

2 Caratteristiche tecniche e implementazioneIl programma è stato realizzato in C++ e secondo il paradigma Object Orien-ted con ereditarietà. Le features che sono state de�nite per le modalità dicreazione e modi�ca delle curve sono descritta nella prossima sottosezione.Il progetto può essere schematizzato in più moduli funzionali:

Kernel super�ci insieme di classi che implementano la creazione e mo-di�ca delle super�ci base nelle modalità richieste. È la componentematematica 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 strumentigra�ci e di interazione con l'utente per interfacciarsi con le super�ci (ilmodulo 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 gra�co diaiuto (DecalBox ).

Gestione generale classi che permettono l'interazione e la comunicazionefra utente, strumenti gra�ci di costruzione, super�ci base e informazionidi output (noti�ca errori ecc...). Si tratta principalmente delle classiBS_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 4colori che determinano l'appartenenza a uno dei 4 moduli. Nelle �gure 2 e 3sono evidenziate alcune parti della struttura. I diagrammi delle classi sonolargamente incompleti per questione di spazio, evidenziando solamente gliattributi e i metodi più importanti e le relazioni di maggior interesse. Nelladocumentazione generata da Doxygen sono presenti i diagrammi speci�ci contutti gli attributi e metodi.

2.1 Organizzazione delle classiOra analizziamo in maniera più approfondita le classi principali del progetto.

3

Page 4: BS Project

NurbsSur

+resolution: float

+NurbsSur()

+~NurbsSur()

+select()

+deselect()

+isSelected()

+increaseUTess()

+increaseVTess()

+changeColor()

+setErrorString()

-mk_ind_face_set()

CoonNurbsSur

-nurbs1

-nurbs2

-nurbs3

-nurbs4

-transfSensor

+CoonNurbsSur()

+~CoonNurbsSur()

+update()

-CoonNurbsSurCB()

EstNurbsSur

-path

-pathTransf

-pathSensor

-nurbsSensor

-transSensor

+EstNurbsSur()

+~EstNurbsSur()

+update()

+EstNurbsSurCB()

RotNurbsSur

-axis

-axisTransform

-transfSensor

-nurbsSensor

-axisSensor

+RotNurbsSur()

+~RotNurbsSur()

+update()

-RotNurbsSurCB()

SkinNurbsSur

-nl

-n_nurbs

-nurbsListSensor

-transfSensor

+SkinNurbsSur()

+~SkinNurbsSur()

+update()

-SkinNurbsSurCB()

TriNurbsSur

-nurbs1

-nurbs2

-nurbs3

+TriNurbsSur()

+~TriNurbsSur()

+update()

-TriNurbsSurCB()

BackgroundViewer

-foreground

-background

+BackgroundViewer()

+~BackgroundViewer()

+hideForeground()

+showForeground()

+hideBackground()

+showBackground()

BS_Handler

+viewer

+frameCapurer

+decalBox

+symmetryPlane

-root

-drawingPlane[]

-rotationAxis[]

-surfaceSep

+BS_Handler()

+~BS_Handler()

+callRevolution()

+callExtrusion()

+callSkinning()

+callCoon()

+callTri()

DrawingPlane

+matrixTransform

+myDragger3D

-myCurve2D

+DrawingPlane()

+~DrawingPlane()

+select()

+activateDrawing()

+symmetric()

+showPoints()

FramesCapturer

-offScreenRender[]

+FramesCapturer()

+~FramesCapturer()

+startCapturing()

+stopCapturing()

+makeScreenShot()

MyAxis

-pos

-vec

+MyAxis()

+~MyAxis()

MyColors

-colors[]

-n_colors

+MyColors()

+~MyColors()

+getNextColor()

MyCurve2D

+matrixTransform

#indexes

#curve2D

#coord

+MyCurve2D()

+~MyCurve2D()

+addPoint()

+select()

+deSelect()

+changeMovingPoint()

+showPoints()

+symmetric()

MyNurbs

-pts

+MyNurbs()

+~MyNurbs()

+addPoint()

+changeMovingPoint()

+getCURVE()

+clonate()

+symmetric()

-makeIntNurbs()

MyPolyline

MyDragger3D

-matrixTransform

-rotDraggers

-transDraggers

-planeDraggers

+MyDragger()

+~MyDragger()

RotationAxis

-myAxis

-myDragger3D

+RotationAxis()

+~RotationAxis()

+select()

+deselect()

+show()

Utility

+createSPATransf()

+getTransf()

1

n

1

1

1

1

1

n

1

1

1

n

1

1 1

1

11

DecalBox

+DecalBox()

+~DecalBox()

+show(): void

+hide(): void

SymmetryPlane

+SymmetryPlane()

+~SymmetryPlane()

+show(): void

1

1

1

1

Figura 1: Il diagramma delle classi sempli�cato complessivo. Il dia-gramma completo ed esaustivo è contenuto, suddiviso in più parti nelladocumentazione Doxygen.

4

Page 5: BS Project

NurbsSur

+resolution: float

+NurbsSur()

+~NurbsSur()

+select()

+deselect()

+isSelected()

+increaseUTess()

+increaseVTess()

+changeColor()

+setErrorString()

-mk_ind_face_set()

CoonNurbsSur

-nurbs1

-nurbs2

-nurbs3

-nurbs4

-transfSensor

+CoonNurbsSur()

+~CoonNurbsSur()

+update()

-CoonNurbsSurCB()

EstNurbsSur

-path

-pathTransf

-pathSensor

-nurbsSensor

-transSensor

+EstNurbsSur()

+~EstNurbsSur()

+update()

+EstNurbsSurCB()

RotNurbsSur

-axis

-axisTransform

-transfSensor

-nurbsSensor

-axisSensor

+RotNurbsSur()

+~RotNurbsSur()

+update()

-RotNurbsSurCB()

SkinNurbsSur

-nl

-n_nurbs

-nurbsListSensor

-transfSensor

+SkinNurbsSur()

+~SkinNurbsSur()

+update()

-SkinNurbsSurCB()

TriNurbsSur

-nurbs1

-nurbs2

-nurbs3

+TriNurbsSur()

+~TriNurbsSur()

+update()

-TriNurbsSurCB()

BS_Handler

+viewer

+frameCapurer

-root

-drawingPlane[]

-rotationAxis[]

-surfaceSep

+BS_Handler()

+~BS_Handler()

+callRevolution()

+callExtrusion()

+callSkinning()

+callCoon()

+callTri()

0 n

Figura 2: Particolare del diagramma delle classi riguardante il modulo perla costruzione e modi�ca delle super�ci.

5

Page 6: BS Project

BackgroundViewer

-foreground

-background

+BackgroundViewer()

+~BackgroundViewer()

+hideForeground()

+showForeground()

+hideBackground()

+showBackground()

BS_Handler

+viewer

+frameCapurer

+decalBox

+symmetryPlane

-root

-drawingPlane[]

-rotationAxis[]

-surfaceSep

+BS_Handler()

+~BS_Handler()

+callRevolution()

+callExtrusion()

+callSkinning()

+callCoon()

+callTri()

DrawingPlane

+matrixTransform

+myDragger3D

-myCurve2D

+DrawingPlane()

+~DrawingPlane()

+select()

+activateDrawing()

+symmetric()

+showPoints()

MyAxis

-pos

-vec

+MyAxis()

+~MyAxis()

MyCurve2D

+matrixTransform

#indexes

#curve2D

#coord

+MyCurve2D()

+~MyCurve2D()

+addPoint()

+select()

+deSelect()

+changeMovingPoint()

+showPoints()

+symmetric()

MyNurbs

-pts

+MyNurbs()

+~MyNurbs()

+addPoint()

+changeMovingPoint()

+getCURVE()

+clonate()

+symmetric()

-makeIntNurbs()

MyPolyline

MyDragger3D

-matrixTransform

-rotDraggers

-transDraggers

-planeDraggers

+MyDragger()

+~MyDragger()

RotationAxis

-myAxis

-myDragger3D

+RotationAxis()

+~RotationAxis()

+select()

+deselect()

+show()

1

1

1

n

1

1

1

n

1

1

11

DecalBox

+DecalBox()

+~DecalBox()

+show(): void

+hide(): void

SymmetryPlane

+SymmetryPlane()

+~SymmetryPlane()

+show(): void

1

1

1

1

Figura 3: Particolare del diagramma delle classi riguardante il modulo perla gestione generale e il modulo degli strumenti di costruzione.

6

Page 7: BS Project

Primo modulo Il primo modulo, il kernel super�ci, è composto dalleseguenti classi:

NurbsSur Classe padre per la rappresentazione di super�ci NURBS. Noncontiene funzioni per la generazione delle super�ci in quanto tale fun-zione di base è contenuta nelle classi �glie. Contiene invece la funzioneper tassellare le super�ci creando un insieme di poligoni indicizzati chevengono 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 modi�ca della super�ciesimmetrica a quella costruita.

RotNurbsSur Classe per la costruzione e la gestione di una super�cie dirotazione. La super�cie di rotazione deve essere associata ad un asse(MyAxis) e ad una nurbs (MyNurbs). La classe mantiene un puntatorea questi due oggetti ai quali è applicato un SoNodeSensor per rilevareeventuali modi�che ed applicarle in tempo reale modellando la nuovasuper�cie.Le features della super�cie di rotazione sono:

• posizione e rotazione della curva pro�lo e dell'asse• posizione dei punti del pro�lo• aggiunta di nuovi punti al pro�lo• applicazione dell'operazione di simmetria sulla curva pro�lo

EstNurbsSur Classe per la costruzione e la gestione di una super�cie diestrusione. La super�cie deve essere associata a due nurbs: una rap-presenta la curva da estrudere, l'altra il percorso di estrusione. Laclasse mantiene due puntatori alle due nurbs ai quali è applicato unSoNodeSensor per rilevare eventuali modi�che ed applicarle in temporeale modellando la nuova super�cie.Le features della super�cie 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

Page 8: BS Project

SkinNurbsSur Classe per la costruzione e la gestione di una super�ciedi skinning. La super�cie deve essere associata a una lista di nurbs(MyNurbs) con minimo 2 elementi. La classe mantiene un puntatore adogni nurbs ai quali è applicato un SoNodeSensor per rilevare eventualimodi�che ed applicarle in tempo reale modellando la nuova super�cie.Le features della super�cie 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 super�ciedi Coon. La super�cie deve essere associata a 4 nurbs (MyNurbs)collegate in un circuito chiuso. La classe mantiene un puntatore alle4 nurbs alle quali è applicato un SoNodeSensor per rilevare eventualimodi�che ed applicarle in tempo reale modellando la nuova super�cie.Le features della super�cie di Coon sono:

• posizione dei punti di ognuna delle 4 curve (eccezion fatta peri punti in comune tra le curve che devono rimanere uniti perpreservare la continuità).

TriNurbsSur Classe per la costruzione e la gestione di una super�cie trian-golare. La super�cie deve essere associata a 3 nurbs (MyNurbs) col-legate in un circuito chiuso. La classe mantiene un puntatore alle 3nurbs alle quali è applicato un SoNodeSensor per rilevare eventualimodi�che ed applicarle in tempo reale modellando la nuova super�cie.Le features della super�cie triangolare sono:

• posizione dei punti di ognuna delle 3 curve (eccezion fatta per ipunti 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 consenteprincipalmente di disegnare una curva nurbs su un piano traslabile eruotabile. Il movimento del piano avviene grazie a un MyDragger3Dposto nel suo centro.In sintesi le principali operazioni che questa classe consente sono:

• disegno di una curva nurbs; il movimento del mouse con il tastosinistro cliccato provoca la proiezione della posizione 2D del mouse

8

Page 9: BS Project

sul piano, ad intervalli dipendenti sia dalla distanza temporale chedalla 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 costruzionedelle super�ci.• 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 perla loro interazione per formare super�ci. La classe contiene anche leopzioni per gestire piani legati ad altri, principalmente per gestire ilcaso in cui si voglia poter legare il centro di un piano ad un punto diun altro, meccanismo molto utile per l'operazione di estrusione.

RotationAxis Il RotationAxis è un nodo dell'albero di scena che consentedi visualizzare una linea, con funzione di asse di rotazione e poterlamuovere grazie al dragger posto nel suo punto medio. La selezioneavviene cliccando sul suo dragger in quanto la linea è di�cilmenteselezionabile. È 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 dimovimento sono autonome e quindi è possibile creare dei dragger consolamente alcune di esse.Allo spostamento il dragger sposta se stesso e modi�ca la trasforma-zione (SoMatrixTransform) che gli è stata passata nel costruttore inmodo tale da spostare coerentemente con il proprio spostamento tuttii 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 modi�ca la matrice di trasformazione in base allaposizione 2D normalizzata passatale.Il dragger è gestito con un nodo SoComplexity per gestire la de�nizionedelle geometrie in base alla distanza reale dal punto di osservazione.

9

Page 10: BS Project

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.... ) perapprossimazione o per interpolazione. I punti sono visualizzati comesferette e sono visualizzati tramite un nodo SoComplexity per gestirela de�nizione delle sfere in base alla distanza dall'osservatore.

MyNurbs Classe che estende MyCurve2D e implementa la curva nurbsinterpolante. Per la creazione della curva a partire dai punti è utilizzatala 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 super�ci da immagini ra�guranti le pro-iezioni ortogonali dell'oggetto da modellare. Le immagini che vengonocaricate devono essere presenti nella cartella dell'eseguibile e devonoessere 4: backFront.jpg per l'immagine frontale rispetto alla posizioneiniziale dell'osservatore, backLeft.jpg per l'immagine sinistra, backBot-tom.jpg per l'immagine inferiore e backRight.jpg per l'immagine destrada scambiare a piacere con quella sinistra. Le dimensioni delle imma-gini sul box vengono ottimizzate automaticamente, quindi è su�cienteche le quattro immagini siano tra di loro proporzionate.

SymmetryPlane Visualizza una griglia rappresentante il piano di simme-tria rispetto al quale le super�ci possono essere duplicate. Essa è postasul piano xy.

Terzo modulo: gestione generale Il terzo modulo, quello della gestionegenerale, consta delle seguenti 2 classi:

BS_Handler BS_Handler è la classe che gestisce l'applicazione. Si occupadi creare la �nestra gra�ca e gestire le componenti al suo interno comeper esempio l'inserimento di piani per disegnare curve (DrawingPlane)e di assi per le super�ci di rotazione (RotationAxis), la gestione delviewer (BackgroundViewer), la gestione della classe per la creazione diframe per la creazione di �lmati e la chiamata delle classi e delle fun-zioni per la creazione delle super�ci. Contiene inoltre la radice di tuttol'albero di scena. Il costruttore contiene le inizializzazioni principalidella �nestra e delle variabili, mentre le funzioni pubbliche sono quelleimportanti per l'interazione con la scena; attualmente queste funzionisono chiamate dalla callback della tastiera ma sono concettualmenteindipendenti da essa.

10

Page 11: BS Project

BackgroundViewer Classe che estende SoWinExaminerViewer, aggiun-gendo la possibilià di mostrare in primo piano messaggi di errore el'attuale risoluzione di rendering, e di visualizzare un'immagine disfondo.

Quarto modulo: utility Il quarto modulo, quello delle utility generali,contiene le seguenti classiFramesCapturer Classe per il salvataggio di screenshot della scena e di

intere sequenze di immagini dalle quali creare �lmati. Utilizza la ren-derizzazione o�screen (SoO�screenRenderer) e nel caso della sequenzadi immagini, le immagini vengono salvate di norma alla �ne dell'opera-zione di cattura. La de�nizione 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 prede�niti ( memorizza-ti come SbColor ) restituendoli sequenzialmente ad ogni chiamata digetNextColor().

3 Risultati ottenutiI risultati ottenuti sono stati soddisfacenti; è stato infatti possibile utilizzareil programma per modellare scene relativamente complesse come quelle dallequali sono stati catturati gli screenshot delle �gure 4, 5, 6. In questi screen-shot sono utilizzate principalmente le super�ci base di rivoluzione, estrusionee skinning, in quanto le super�ci di Coon e triangolari sono state implemen-tate per ultime e non è stato possibile testarle approfonditamente, tuttaviaesse si dimostrano più potenti e versatili delle altre tre. Anche la possibilitàdi visualizzare una super�cie simmetrica rispetto ad una già costruita hapermesso un miglioramento nella modellazione in quanto si possono ridurrele parti dell'oggetto e�ettivamente da modellare e si ottiene una maggioreprecisione complessiva.

Per quanto riguarda il vincolo di real time, esso è rispettato anche perscene molto complesse, l'unica situazione in cui la visualizzazione non è molto�uida è quella in cui è attivo il modulo di salvataggio su �le dei frame dellascena, ma ciò è inevitabile.

4 Breve manuale utenteQuesta sezione presenta brevemente le speci�che necessarie per poter uti-lizzare il programma sviluppato; molto probabilmente non è su�ciente perpoter utilizzare tutte le funzionalità e in modo completo.

11

Page 12: BS Project

Figura 4: Alcuni screenshot catturati durante la modellazione di super�cidi estrusione, rotazione e skinning per la costruzione di un'automobile, inparticolare l'Audi TT.

12

Page 13: BS Project

Figura 5: Alcuni screenshot catturati durante la modellazione di super�ci diestrusione, rotazione e skinning per la costruzione di uno scivolo.

13

Page 14: BS Project

Figura 6: Altri esempi di modellazione di super�ci, gli ultimi due esempiutilizzano le super�ci di Coon.

14

Page 15: BS Project

In estrema sintesi, normalmente, ciò che si fa con il programma è crearedei 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 dellasuper�cie richiesta. L'altra famiglia di operazioni tipiche consiste nella mo-di�ca delle features delle super�ci create. Le di�erenze e le procedure per lacreazione e la modi�ca delle 5 diverse tipologie di super�ci sono presentatenella seconda sottosezione di questa sezione.

Iniziamo prima ad introdurre i comandi generali.

4.1 Comandi da tastiera e mouseComandi per la costruzione delle super�ci base La costruzione delle5 super�ci base si chiama premendo il rispettivo tasto numerico, dopo averselezionato opportunamente le componenti necessarie. In particolare:

TASTO 1 viene chiamata la procedura per costruire una super�cie di rivo-luzione (devono essere selezionati un piano e un asse)

TASTO 2 viene chiamata la procedura per costruire una super�cie di estru-sione (deve essere selezionato un piano con un piano ortogonale colle-gato)

TASTO 3 viene chiamata la procedura per costruire una super�cie di skin-ning (devono essere selezionati 2 o più piani e lo skinning avviene perordine di selezione)

TASTO 4 viene chiamata la procedura per costruire una super�cie di Coon(devono essere selezionati 4 piani con curve collegate tra loro)

TASTO 5 viene chiamata la procedura per costruire una super�cie 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 selezionatosulla scena. Essi sono:

TASTO P viene aggiunto un nuovo DrawingPlane: al centro della scenase non vi è nulla di selezionato, centrato nell'estremo di una curva seè selezionato un punto della curva stessa, centrato nell'estremo di unacurva e passante per l'estremo di una seconda curva se sono selezionatiun punto della prima curva e un punto della seconda curva.

TASTO A viene aggiunto un nuovo RotationAxis al centro della scena

15

Page 16: BS Project

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 e�ettua uno screenshot della scena e la salva su �le

TASTO F1 visualizza gli oggetti che hanno il compito di costruire super�ci(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 super�ci costruite

TASTO F4 imposta una risoluzione media per tutte le super�ci costruite

TASTO F5 imposta una alta risoluzione per tutte le super�ci 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 scambial'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 (clicksinistro) una delle frecce dell'asse che si vuole traslare, e�ettuata laselezione (il componente selezionato diventa blu), muovere il mousesenza premere alcun tasto, cliccare nuovamente per �ssare la nuovaposizione deselezionando il dragger.

16

Page 17: BS Project

• rotazione riferita al centro del dragger attorno ai tre assi cartesianilocali. Si deve selezionare (click sinistro) uno dei tre dischi di rotazione,e�ettuata la selezione (il componente selezionato diventa blu), muovereil mouse senza premere alcun tasto, cliccare nuovamente per �ssare lanuova rotazione deselezionando il dragger.

• traslazione bidimensionale sul piano locale XY. Si deve selezionare(click sinistro) la sfera al centro del dragger, e�ettuata la selezione(il componente selezionato diventa blu), muovere il mouse senza pre-mere alcun tasto, cliccare nuovamente per �ssare la nuova posizionedeselezionando il dragger.

I comandi del DrawingPlane I seguenti comandi sono relativi al Dra-wingPlane, ciò signi�ca che essi possono venire invocati su un piano sola-mente se esso è attualmente selezionato. I comandi del DrawingPlane datastiera 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 delpulsante 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 clicksinistro + spostamento)

• spostare i punti della curva sul piano (selezionando e trascinando ipunti)

• selezionare/deselezionare il piano (cliccando sul piano o meno)

17

Page 18: BS Project

I comandi del RotationAxis Sul RotationAxis axis è possibile a agirecon il suo dragger, mentre da tastiera è invocabile solo la seguente operazione:

TASTO D attiva, disattiva il dragger

I comandi per le super�ci I comandi per le super�ci sono operazionida tastiera invocabili quando qualsiasi tipo di super�ce di base ( o la suasimmetrica) è selezionata. In breve essi sono:

TASTO A mostra la rispettiva super�cie simmetrica (che è selezionabile esulla quale si possono invocare i comandi di questo paragrafo, aggiun-ta e rimozione della simmetrica esclusi). La super�cie simmetrica simuove coerentemente con il movimento della rispettiva super�cie.

TASTO R nasconde la rispettiva super�cie simmetrica

TASTO C cambia il colore della super�cie

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 super�cie sele-zionata e alla sua simmetrica se presente..

4.2 Procedure di creazione e modi�ca delle super�ciVengono ora presentate più in dettaglio la serie di operazioni necessaria percostruire le 5 tipologia di super�ci di base implementate.

Super�cie di rivoluzione La super�cie di rivoluzione è creata partendoda un pro�lo di qualsiasi natura, e un asse di rivoluzione attorno al qualeviene idealmente replicato il pro�lo dando origine alla super�cie. La proce-dura di costruzione è semplice ed intuitiva: di seguito viene spiegata passopasso.

1. Creare un piano (TASTO P) e su di esso disegnare il pro�lo 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 pro�lo e l'asse agendo suirispettivi dragger

18

Page 19: BS Project

4. Selezionare sia il piano del pro�lo, sia l'asse di rotazione. La selezionemultipla si e�ettua tenendo premuto il tasto SHIFT.

5. Premere il TASTO 1. Si crea la super�cie.

6. È possibile modi�care la super�cie agendo sulle sue features (vedisezione 2.1, punto RevNurbsSur).

Modi�cando le features, verrà modi�cata dinamicamente anche le su-per�ci (anche più di una) ad esse collegate. In questo modo sarà possibilecorreggere in modo semplice e preciso il solo pro�lo o la posizione dell'assedi rotazione veri�cando in tempo reale il nuovo aspetto della super�cie.

Super�cie di estrusione La super�cie di estrusione è de�nita da un pri-mo pro�lo, e da un secondo che indica il percorso lungo il quale replicare ilpro�lo iniziale dando origine alla super�cie. 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 puntiselezionabili della curva)

3. Premere il TASTO O: apparirà un piano centrato nel punto selezionatoe ortogonale al piano della curva da estrudere avente un dragger conle sole componenti di rotazione

4. Traslare e/o ruotare nelle posizioni volute il pro�lo e il percorso agen-do sui dragger dei rispettivi piani. Il piano ortogonale non può esseredirettamente traslato ma può essere solo ruotato per garantire la coin-cidenza tra l'inizio del percorso (�sso nell'origine del piano ortho) e ilpunto selezionato del pro�lo. Muovendo il piano del pro�lo, si agiscecontemporaneamente anche sul rispettivo piano ortogonale.

5. Premere il TASTO 2 con il piano della curva da estrudere selezionato.Si crea la super�cie.

6. È possibile modi�care la super�cie agendo sulla sue features (vedisezione 2.1, punto EstNutbsSur).

Modi�cando le features, verrà modi�cata dinamicamente anche la super-�cie ad esse collegate. In questo modo sarà possibile correggere in modosemplice e preciso il solo pro�lo o il percorso di estrusione veri�cando intempo reale il nuovo aspetto della super�cie.

19

Page 20: BS Project

Super�cie di skinning La super�cie di skinning consiste in una super�cieche interpola una serie di curve poste in successione. Tale ordine di succes-sione determina in maniera rilevante la forma della super�cie. La proceduradi 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 nellacostruzione della super�cie di skinning. Si può velocizzare la proceduragrazie al comando clone

3. Traslare e/o ruotare nelle posizioni volute i vari pro�li agendo suidragger dei rispettivi piani.

4. Selezionare tutti i pro�li interessati i sequenza. La selezione multiplasi e�ettua tenendo premuto il tasto SHIFT.

5. Premere il TASTO 3. Si crea la super�cie desiderata.

6. È possibile modi�care la super�cie agendo sulle sue features (vedisezione 2.1, punto SkinNurbsSur).Modi�cando le features, verrà modi�cata dinamicamente anche la su-per�cie ad esse collegate. In questo modo sarà possibile correggere inmodo semplice e preciso i singoli pro�li veri�cando in tempo reale ilnuovo aspetto assunto dalla super�cie.

Super�cie di Coon La super�cie di Coon necessita di 4 curve collegate inmodo da formare un circuito chiuso. I passi seguenti descrivono la proceduraper creare le curve collegate e della super�cie.

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 visualizzarei punti selezionabili della curva)

3. Creare il secondo piano premendo nuovamente il TASTO P. Il nuovopiano ha origine all'estremità della curva del punto selezionato. (Èpossibile solamente modi�care la rotazione e non la traslazione delnuovo piano per mantenere la coincidenza tra origine del nuovo pianoe estremità della curva del punto selezionato).

4. Disegnare la seconda curva sul nuovo piano. Si può notare come ilprimo punto di essa è �sso nell'origine del nuovo piano.

5. Ripetere queste 2 ultime operazioni per costruire la terza curva colle-gata.

20

Page 21: BS Project

6. Per costruire la quarta curva è necessario innanzitutto creare l'ultimopiano con origine nell'estremo della terza curva e passante per il primopunto della prima, in modo da formare un circuito chiuso. Quindiselezionare l'ultimo punto della terza curva e il primo della prima epremere il TASTO P per creare in automatico l'ultimo piano passanteper i due punti selezionati.

7. Disegnare la quarta curva. Non serve preoccuparsi di far coincidereprecisamente l'estremità di quest'ultima con l'inizio della prima, questaoperazione sarà automatica.

8. Selezionare tutti i quattro pro�li interessati. La selezione multipla sie�ettua tenendo premuto il tasto SHIFT.

9. Premere il TASTO 4. Si crea la super�cie desiderata.

10. È possibile modi�care la super�cie agendo sulle sue features (vedisezione 2.1, punto CoonNurbsSur).Modi�cando le features, verrà modi�cata dinamicamente anche la su-per�cie ad esse collegate. In questo modo sarà possibile correggere inmodo semplice e preciso i singoli pro�li veri�cando in tempo reale ilnuovo aspetto assunto dalla super�cie.

Super�cie triangolare La super�cie triangolare rispecchia quasi comple-tamente le caratteristiche della super�cie di Coon, essendo però costruita suun circuito chiuso di 3 curve anziché di 4.

I passi di costruzione sono gli stessi del caso precedente salvo il passo 5che non deve essere considerato passando direttamente al punto 6 (conside-rando ovviamente la dicitura �quarta curva� e �terza curva� rispettivamentein �terza curva� e �seconda curva�).

Anche per quanto riguarda la manipolazione delle features, è possibileanche in questo caso, con le stesse modalità e risultati dei casi precedenti(vedi sezione 2.1, punto TriNurbsSur).

5 Conclusioni e possibili estensioniIl programma sviluppato soddisfa gli scopi che sono stati esposti nella primasezione. Tuttavia, si possono pensare diversi miglioramenti e aggiunte chepossono rendere il progetto più completo e potente. I principali sono:

• Superamento della limitazione della possibilità di disegnare super�cisolamente su un piano, consentendo la possibilità di disegnare sullesuper�ci di base. In questo modo è anche possibile creare connessionipiù precise tra super�ci.

21

Page 22: BS Project

• Possibilità di applicare alle super�ci un dragger in modo da poterlemuovere all'interno della scena, assieme ovviamente ai propri strumentidi costruzione e alle proprie features.

• Aggiunta di nuove super�ci base.

• Possibilità di creare solidi di base oltre che super�ci. È possibilepensare alla costruzione di solidi anche a partire da super�ci di base.

• Sviluppo di una funzione di tassellamento che tenga conto della cur-vatura delle super�ci nel determinare i passi di campionatura che nondovranno quindi più essere costanti all'interno di una super�cie.

• Aggiunta di altri strumenti di interazione oltre al mouse e alla tastiera

• Strumenti per l'unione e la divisione delle super�ci di base.

• Aggiunta degli operatori booleani tra solidi di base

22