SlideShare a Scribd company logo
1 of 22
Download to read offline
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
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
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
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
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
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
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
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
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
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
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
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
Figura 5: Alcuni screenshot catturati durante la modellazione di superci di
estrusione, rotazione e skinning per la costruzione di uno scivolo.




                                    13
Figura 6: Altri esempi di modellazione di superci, gli ultimi due esempi
utilizzano le superci di Coon.




                                   14
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
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
• 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
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
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
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
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
• 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

More Related Content

Viewers also liked

Dal WebLab all'Acqua Liofilizzata, storia di due designer che sanno contare i...
Dal WebLab all'Acqua Liofilizzata, storia di due designer che sanno contare i...Dal WebLab all'Acqua Liofilizzata, storia di due designer che sanno contare i...
Dal WebLab all'Acqua Liofilizzata, storia di due designer che sanno contare i...Acqua Liofilizzata S.n.c.
 
EDI - Photoshop - Organizzazione di un progetto e Logica
EDI - Photoshop - Organizzazione di un progetto e LogicaEDI - Photoshop - Organizzazione di un progetto e Logica
EDI - Photoshop - Organizzazione di un progetto e LogicaAcqua Liofilizzata S.n.c.
 
Presentazione Creatività Lenticolare
Presentazione Creatività LenticolarePresentazione Creatività Lenticolare
Presentazione Creatività LenticolareTreD s.r.l.
 

Viewers also liked (20)

EDI - Photoshop - effetti-livello
EDI - Photoshop - effetti-livelloEDI - Photoshop - effetti-livello
EDI - Photoshop - effetti-livello
 
Dal WebLab all'Acqua Liofilizzata, storia di due designer che sanno contare i...
Dal WebLab all'Acqua Liofilizzata, storia di due designer che sanno contare i...Dal WebLab all'Acqua Liofilizzata, storia di due designer che sanno contare i...
Dal WebLab all'Acqua Liofilizzata, storia di due designer che sanno contare i...
 
EDI - Photoshop - Selezioni
EDI - Photoshop - SelezioniEDI - Photoshop - Selezioni
EDI - Photoshop - Selezioni
 
EDI - Photoshop - introduzione3d
EDI - Photoshop - introduzione3dEDI - Photoshop - introduzione3d
EDI - Photoshop - introduzione3d
 
EDI - Photoshop - fluidifica
EDI - Photoshop - fluidificaEDI - Photoshop - fluidifica
EDI - Photoshop - fluidifica
 
EDI - Photoshop - Gestione di più immagini
EDI - Photoshop - Gestione di più immaginiEDI - Photoshop - Gestione di più immagini
EDI - Photoshop - Gestione di più immagini
 
EDI - Photoshop - corrispondenza colore
EDI - Photoshop - corrispondenza coloreEDI - Photoshop - corrispondenza colore
EDI - Photoshop - corrispondenza colore
 
EDI - Photoshop - a - colore
EDI - Photoshop - a - coloreEDI - Photoshop - a - colore
EDI - Photoshop - a - colore
 
EDI - Photoshop - Organizzazione di un progetto e Logica
EDI - Photoshop - Organizzazione di un progetto e LogicaEDI - Photoshop - Organizzazione di un progetto e Logica
EDI - Photoshop - Organizzazione di un progetto e Logica
 
Autodesk 3d studio max - Scheda corso LEN
Autodesk 3d studio max - Scheda corso LENAutodesk 3d studio max - Scheda corso LEN
Autodesk 3d studio max - Scheda corso LEN
 
EDI - Photoshop - b - correzione colore
EDI - Photoshop - b - correzione coloreEDI - Photoshop - b - correzione colore
EDI - Photoshop - b - correzione colore
 
Manuale geogebra
Manuale geogebraManuale geogebra
Manuale geogebra
 
EDI - Photoshop - ritocco
EDI - Photoshop - ritoccoEDI - Photoshop - ritocco
EDI - Photoshop - ritocco
 
EDI - Photoshop - interfaccia
EDI - Photoshop - interfaccia EDI - Photoshop - interfaccia
EDI - Photoshop - interfaccia
 
EDI - Photoshop - metodi fusione
EDI - Photoshop - metodi fusioneEDI - Photoshop - metodi fusione
EDI - Photoshop - metodi fusione
 
EDI - Photoshop - Livelli
EDI - Photoshop - LivelliEDI - Photoshop - Livelli
EDI - Photoshop - Livelli
 
The paper pencil
The paper pencilThe paper pencil
The paper pencil
 
EDI - Photoshop - regolazioni
EDI - Photoshop - regolazioniEDI - Photoshop - regolazioni
EDI - Photoshop - regolazioni
 
Presentazione Creatività Lenticolare
Presentazione Creatività LenticolarePresentazione Creatività Lenticolare
Presentazione Creatività Lenticolare
 
05 Adobe Illustrator - Trame
05 Adobe Illustrator - Trame05 Adobe Illustrator - Trame
05 Adobe Illustrator - Trame
 

More from graphitech

A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationgraphitech
 
A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationgraphitech
 
A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationgraphitech
 
A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationgraphitech
 
Rescue Mission
Rescue MissionRescue Mission
Rescue Missiongraphitech
 
Rescue Mission
Rescue MissionRescue Mission
Rescue Missiongraphitech
 
Mashup - Sustainability
Mashup - SustainabilityMashup - Sustainability
Mashup - Sustainabilitygraphitech
 
Mashup - Sustainability
Mashup - SustainabilityMashup - Sustainability
Mashup - Sustainabilitygraphitech
 
Multiple Screens
Multiple ScreensMultiple Screens
Multiple Screensgraphitech
 
Multiple Screens
Multiple ScreensMultiple Screens
Multiple Screensgraphitech
 
Graph Matching
Graph MatchingGraph Matching
Graph Matchinggraphitech
 
Shape Analysis
Shape AnalysisShape Analysis
Shape Analysisgraphitech
 
Human Interaction Library
Human Interaction LibraryHuman Interaction Library
Human Interaction Librarygraphitech
 
Human Interaction Library
Human Interaction LibraryHuman Interaction Library
Human Interaction Librarygraphitech
 
WebCams Mapping on Nasa World Wind
WebCams Mapping on Nasa World WindWebCams Mapping on Nasa World Wind
WebCams Mapping on Nasa World Windgraphitech
 
Street Builder
Street BuilderStreet Builder
Street Buildergraphitech
 
Street Builder
Street BuilderStreet Builder
Street Buildergraphitech
 
Live Video in World Wind
Live Video in World WindLive Video in World Wind
Live Video in World Windgraphitech
 
Live Video in World Wind
Live Video in World WindLive Video in World Wind
Live Video in World Windgraphitech
 
Terrain Modification
Terrain ModificationTerrain Modification
Terrain Modificationgraphitech
 

More from graphitech (20)

A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolation
 
A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolation
 
A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolation
 
A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolation
 
Rescue Mission
Rescue MissionRescue Mission
Rescue Mission
 
Rescue Mission
Rescue MissionRescue Mission
Rescue Mission
 
Mashup - Sustainability
Mashup - SustainabilityMashup - Sustainability
Mashup - Sustainability
 
Mashup - Sustainability
Mashup - SustainabilityMashup - Sustainability
Mashup - Sustainability
 
Multiple Screens
Multiple ScreensMultiple Screens
Multiple Screens
 
Multiple Screens
Multiple ScreensMultiple Screens
Multiple Screens
 
Graph Matching
Graph MatchingGraph Matching
Graph Matching
 
Shape Analysis
Shape AnalysisShape Analysis
Shape Analysis
 
Human Interaction Library
Human Interaction LibraryHuman Interaction Library
Human Interaction Library
 
Human Interaction Library
Human Interaction LibraryHuman Interaction Library
Human Interaction Library
 
WebCams Mapping on Nasa World Wind
WebCams Mapping on Nasa World WindWebCams Mapping on Nasa World Wind
WebCams Mapping on Nasa World Wind
 
Street Builder
Street BuilderStreet Builder
Street Builder
 
Street Builder
Street BuilderStreet Builder
Street Builder
 
Live Video in World Wind
Live Video in World WindLive Video in World Wind
Live Video in World Wind
 
Live Video in World Wind
Live Video in World WindLive Video in World Wind
Live Video in World Wind
 
Terrain Modification
Terrain ModificationTerrain Modification
Terrain Modification
 

Recently uploaded

IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaRafael Figueredo
 
La produzione e la gestione degli Open Data
La produzione e la gestione degli Open DataLa produzione e la gestione degli Open Data
La produzione e la gestione degli Open DataGianluigi Cogo
 
Terza cultura w la scienza Italo Calvino.pdf
Terza cultura w la scienza Italo Calvino.pdfTerza cultura w la scienza Italo Calvino.pdf
Terza cultura w la scienza Italo Calvino.pdfPierLuigi Albini
 
Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaPierLuigi Albini
 
Storia dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxStoria dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxOrianaOcchino
 
Esame finale - riunione genitori 2024.pptx
Esame finale - riunione genitori 2024.pptxEsame finale - riunione genitori 2024.pptx
Esame finale - riunione genitori 2024.pptxfedericodellacosta2
 
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024Damiano Orru
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieVincenzoPantalena1
 

Recently uploaded (8)

IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
 
La produzione e la gestione degli Open Data
La produzione e la gestione degli Open DataLa produzione e la gestione degli Open Data
La produzione e la gestione degli Open Data
 
Terza cultura w la scienza Italo Calvino.pdf
Terza cultura w la scienza Italo Calvino.pdfTerza cultura w la scienza Italo Calvino.pdf
Terza cultura w la scienza Italo Calvino.pdf
 
Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza cultura
 
Storia dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxStoria dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptx
 
Esame finale - riunione genitori 2024.pptx
Esame finale - riunione genitori 2024.pptxEsame finale - riunione genitori 2024.pptx
Esame finale - riunione genitori 2024.pptx
 
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
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
  • 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. 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