BS Project

395 views

Published on

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.

Published in: Education, Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
395
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

BS Project

  1. 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. 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. 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
  4. 4. FramesCapturer DecalBox 1 -offScreenRender[] SymmetryPlane +DecalBox() 1 +FramesCapturer() +~DecalBox() +~FramesCapturer() +SymmetryPlane() 1 +show(): void +startCapturing() +~SymmetryPlane() +hide(): void +stopCapturing() +show(): void +makeScreenShot() DrawingPlane n 1 BS_Handler BackgroundViewer +matrixTransform +myDragger3D -foreground 1 +viewer -myCurve2D 1 -background 1 +frameCapurer +DrawingPlane() +decalBox +BackgroundViewer() +~DrawingPlane() 1 1 +symmetryPlane +~BackgroundViewer() +select() 1 +hideForeground() -root +activateDrawing() -drawingPlane[] +showForeground() +symmetric() 1 +hideBackground() -rotationAxis[] +showPoints() 1 +showBackground() -surfaceSep 1 +BS_Handler() 1 +~BS_Handler() RotationAxis +callRevolution() n +callExtrusion() -myAxis +callSkinning() -myDragger3D MyCurve2D 1 1 +callCoon() +RotationAxis() +matrixTransform +callTri() +~RotationAxis() #indexes +select() #curve2D +deselect() #coord MyDragger3D 1 +show() +MyCurve2D() -matrixTransform +~MyCurve2D() -rotDraggers +addPoint() -transDraggers MyAxis +select() -planeDraggers -pos +deSelect() +MyDragger() -vec n +changeMovingPoint() +~MyDragger() +MyAxis() +showPoints() +~MyAxis() +symmetric() NurbsSur 1 +resolution: float 1 MyNurbs MyPolyline +NurbsSur() +~NurbsSur() -pts +select() MyColors +MyNurbs() +deselect() +~MyNurbs() +isSelected() -colors[] +addPoint() +increaseUTess() -n_colors +changeMovingPoint() +increaseVTess() +MyColors() +getCURVE() +changeColor() +~MyColors() +clonate() +setErrorString() +getNextColor() +symmetric() -mk_ind_face_set() -makeIntNurbs() 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 Utility -nurbs2 -pathSensor -nurbs3 +createSPATransf() -nurbsSensor -nurbs4 +getTransf() -transSensor -transfSensor +EstNurbsSur() +CoonNurbsSur() +~EstNurbsSur() +~CoonNurbsSur() +update() +update() +EstNurbsSurCB() -CoonNurbsSurCB() Figura 1: Il diagramma delle classi semplicato complessivo. Il dia- gramma completo ed esaustivo è contenuto, suddiviso in più parti nella documentazione Doxygen. 4
  5. 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. 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. 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. 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. 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. 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. 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. 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. 13. Figura 5: Alcuni screenshot catturati durante la modellazione di superci di estrusione, rotazione e skinning per la costruzione di uno scivolo. 13
  14. 14. Figura 6: Altri esempi di modellazione di superci, gli ultimi due esempi utilizzano le superci di Coon. 14
  15. 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. 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. 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. 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. 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. 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. 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. 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

×