1 / 56

Del 1 Introduksjon til VTK

Del 1 Introduksjon til VTK. VTK - The V isualization T ool k it. Objekt-orientert bibliotek for visualisering Fordeler: Fritt tilgjengelig Stor brukergruppe Godt designet, testet og dokumentert (se VTK brukermanual på kurs-siden!) Rik funksjonalitet, fleksibelt Pedagogisk!

ronni
Download Presentation

Del 1 Introduksjon til VTK

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Del 1Introduksjon til VTK

  2. VTK - The Visualization Toolkit • Objekt-orientert bibliotek for visualisering • Fordeler: • Fritt tilgjengelig • Stor brukergruppe • Godt designet, testet og dokumentert (se VTK brukermanual på kurs-siden!) • Rik funksjonalitet, fleksibelt • Pedagogisk! • Portabelt (MS Windows, SGI, Sun, Linux ...) • Kan brukes fra flere vertsspråk (C++ , Tcl/Tk, Python, Java, ...) • Mulighet for utvidelser med egne C++ klasser INF2340 / V05

  3. VTK • Ulemper: • Dårlig ytelse (i mange tilfeller) • Utnytter ikke visse typer maskinvare for grafikk • ... • Til dels dårlig dokumentasjon... INF2340 / V05

  4. Objektorientering (OO) i C++ • En klasse er en datatype med • tilstand (variable, data, datastrukturer, ...) • algoritmer for å endre tilstanden (prosedyrer, funksjoner, metoder, operasjoner, ...) • Et objekt er en instansiert klasse (instans av en klasse) INF2340 / V05

  5. Eksempel class Adder { public: void Add(int x, int y) {sum = x + y;} int GetSum() {return sum;} private: int sum; }; Adder a1; a1.Add(3, 4); cout << a1.GetSum() << ‘\n’; Adder* a2 = new Adder; a2->Add(5, 6); cout << a2->GetSum() << ‘\n’; INF2340 / V05

  6. A B A B A B A B Litt notasjon for OO-modellering En klasse Et objekt (instans av klassenA) A A A er en generalisering av B (A er en superklasse (baseklasse) av B) B er et spesialtilfelle av A (B er en subklasse (avledet klasse) av A) A har kjennskap til B (assosiasjon) (Egentlig: A har behov for å kjenne til B!) A og B har kjennskap til hverandre (toveis assosiasjon) A består av B, B er en del av A (aggregering - spesiell form for assosiasjon) INF2340 / V05

  7. 1 A består av nøyaktig én instans av B A B 0..1 A består av null eller én instans av B A B 0..* A består av null eller flere instanser av B A B Litt OO notasjon (forts.) osv. Tilsvarende for assosiasjon! INF2340 / V05

  8. “Visualization Pipeline” VTK - Overordnet Arkitektur 1 0..1 vtkRenderWindowInteractor vtkRenderWindow 1 1..* 1..* vtkRenderer 1..* vtkActor 1..* 1..* 1 1..* vtkMapper 1 0..* 1 1 vtkLight vtkCamera vtkProperty INF2340 / V05

  9. “Visualization Pipeline” vtkRenderWindow 1 0..1 vtkRenderWindowInteractor vtkRenderWindow 1 1..* 1..* • Ansvarlig for opptegning av all grafikk i et “hovedvindu”. vtkRenderer 1..* vtkActor 1..* 1..* 1 1..* vtkMapper 1 0..* 1 1 vtkLight vtkCamera vtkProperty INF2340 / V05

  10. “Visualization Pipeline” vtkRenderWindowInteractor 1 0..1 vtkRenderWindowInteractor vtkRenderWindow 1 1..* 1..* • Håndterer mus- og tastatur-hendelser (“events”). • Gir vtkRenderWindow-objektet beskjed om ny opptegning der typisk verdier i vtkCamera objektene er endret. vtkRenderer 1..* vtkActor 1..* 1..* 1 1..* vtkMapper 1 0..* 1 1 vtkLight vtkCamera vtkProperty INF2340 / V05

  11. “Visualization Pipeline” vtkActor 1 0..1 vtkRenderWindowInteractor vtkRenderWindow 1 1..* 1..* • Representerer et geometrisk objekt i en 3D “scene”. • Mange operasjoner utføres på en 3D “aktør” som helhet, bl.a. skjuling, deformering og rotasjon. vtkRenderer 1..* vtkActor 1..* 1..* 1 1..* vtkMapper 1 0..* 1 1 vtkLight vtkCamera vtkProperty INF2340 / V05

  12. “Visualization Pipeline” vtkProperty 1 0..1 vtkRenderWindowInteractor vtkRenderWindow 1 1..* 1..* • Definerer egenskaper for flaten til en 3D “aktør”, deriblant • farge • hvordan lys reflekteres • representasjonsform ((fylte) polygoner, linjer eller punkter) • transparens vtkRenderer 1..* vtkActor 1..* 1..* 1 1..* vtkMapper 1 0..* 1 1 vtkLight vtkCamera vtkProperty INF2340 / V05

  13. “Visualization Pipeline” vtkMapper 1 0..1 vtkRenderWindowInteractor vtkRenderWindow 1 1..* 1..* • Representerer “sluttproduktet” i “Visualization Pipeline” i form av et sett med grafiske primitiver. vtkRenderer 1..* vtkActor 1..* 1..* 1 1..* vtkMapper 1 0..* 1 1 vtkLight vtkCamera vtkProperty Flere detaljer om vtkMapper kommer senere! INF2340 / V05

  14. “Visualization Pipeline” vtkRenderer 1 0..1 vtkRenderWindowInteractor vtkRenderWindow 1 1..* 1..* • Ansvarlig for å lage et 2D bilde av 3D ”aktørene” ... • ... eller 2D “aktørene” vtkRenderer 1..* vtkActor 1..* 1..* 1 1..* vtkMapper 1 0..* 1 1 vtkLight vtkCamera vtkProperty 1..* 1..* vtkViewport vtkActor2D vtkRenderer INF2340 / V05

  15. “Visualization Pipeline” vtkLight 1 0..1 vtkRenderWindowInteractor vtkRenderWindow 1 1..* 1..* • Definerer en lyskilde for belysning av 3D “aktørene”. • En lyskilde kan bl.a. ha farge og plassering. vtkRenderer 1..* vtkActor 1..* 1..* 1 1..* vtkMapper 1 0..* 1 1 vtkLight vtkCamera vtkProperty INF2340 / V05

  16. “Visualization Pipeline” vtkCamera 1 0..1 vtkRenderWindowInteractor vtkRenderWindow 1 1..* 1..* • Definerer synsvinkelen vi betrakter 3D ”aktørene” med. • Bl.a. kan graden av perspektiv manipuleres. vtkRenderer 1..* vtkActor 1..* 1..* 1 1..* vtkMapper 1 0..* 1 1 vtkLight vtkCamera vtkProperty INF2340 / V05

  17. Instansiering av objekter • VTK-objekter skal alltid instansieres med New og slettes med Delete! vtkRenderer* rdr = vtkRenderer::New(); rdr->Delete(); • Pga. • Dynamisk minnehåndtering “garbage collection” • Korrekt instansiering av subklasser(se kap. 3.10 i VTK-boka) • ... INF2340 / V05

  18. “Visualization Pipeline” Sammenkobling av objekter SetRenderWindow 1 0..1 vtkRenderWindowInteractor vtkRenderWindow 1 AddRenderer 1..* AddActor 1..* vtkRenderer 1..* SetMapper vtkActor 1..* 1..* 1 AddLight 1..* vtkMapper SetActiveCamera 1 SetProperty 0..* 1 1 vtkLight vtkCamera vtkProperty Disse instansieres (og kobles opp) automatisk INF2340 / V05

  19. vtkMapper SetInput GetOutput vtkSphereSource Sammenkobling av objekter i “Visualization Pipeline” vtkSphereSource* sSphere = vtkSphereSource::New(); vtkPolyDataMapper* mSphere = vtkPolyDataMapper::New(); mSphere->SetInput(sSphere->GetOutput()); Mer om dette senere! INF2340 / V05

  20. Typisk hovedstruktur i et C++/VTK program i INF2340 // Inkludering av nødvendige filer // *** Hovedprogram *** main() { // - Instansiér og koble sammen vtkRenderWindow, vtkRenderer og // evt. vtkRenderWindowInteractor objekter. // - Instansiér “aktør” objekter og deres tilhørende “visualization // pipelines” // - Koble “aktør” objektene til vtkRenderer objektet/objektene // - Sett opp vinduet og start evt. mus/tastatur interaksjon } INF2340 / V05

  21. VTK så langt • Nok informasjon til å lage enkle programmer der fokus ikke er på “visualization pipeline” • Bruk manualsidene! INF2340 / V05

  22. Del 2Grafisk databehandling

  23. Lys • Elektromagnetisk energi med bølgelengde i intervallet 400- til 700 nm (10-9 m) (nm) 10-6 10-3 10-1 10 103 106 109 1012 Kosmisk stråling Gamma stråling Røntgen Ultrafiolett Infrarødt Mikrobølge Radar Radio Synlig lys 400 450 500 550 600 650 700 (nm) INF2340 / V05

  24. Fargen til et objekt • Definert som bølgelengdene det reflekterer eller transmitterer (genererer selv) INF2340 / V05

  25. Fargeoppfattelse • Defineres typisk vha. tre størrelser: • dominerende bølgelengde • metning (“avstand” fra grått) • intensitet (“lyshet”) INF2340 / V05

  26. Akromatisk lys (gråtoner) • Ingen dominerende bølgelengde • Metning lik null INF2340 / V05

  27. Øyet • To typer fotoreseptorer: • staver (“rods”) • aktive ved svakt lys (om natten etc.) • oppfatter mest gråtoner • tapper (“cones”) • aktive ved normalt lys • oppfatter “alle” farger (inkl. gråtoner) INF2340 / V05

  28. tre typer - mest sensitive for hhv. blått, grønt og rødt 400 700 Bølgelengde (nm)  fiolett! INF2340 / V05

  29. Fargesyntese • Additiv • kombinasjon av farget lys • dataskjermer • totalfargen lysere (mer intens) og mer mettet enn enkelt-komponentene • modeller: RGB, HSV • Subtraktiv • refleksjon fra kombinasjon av fargede “pigmenter” • printere • totalfargen mørkere (mindre intens) og mindre mettet enn enkelt-komponentene • modeller: CMY(K) INF2340 / V05

  30. Blue (0, 0, 1) Cyan (0, 1, 1) Magenta (1, 0, 1) White (1, 1, 1) Gråtoner Black (0, 0, 0) Green (0, 1, 0) Red (1, 0, 0) Yellow (1, 1, 0) Fargemodeller (-rom) RGB-kuben INF2340 / V05

  31. Basiskomponenter: R (red), G (green) og B (blue) • Additiv syntese • Fargeskjermer • Fargen oppfattes som hvit når hver komponent har full intensitet • Fargen oppfattes som sort når hver komponent har null intensitet INF2340 / V05

  32. CMY(K)-kuben Yellow (0, 0, 1) Red (0, 1, 1) Green (1, 0, 1) Black (1, 1, 1) Gråtoner White (0, 0, 0) Magenta (0, 1, 0) Cyan (1, 0, 0) Blue (1, 1, 0) INF2340 / V05

  33. Basiskomponenter: C (cyan), M (magenta) og Y (yellow) • Subtraktiv syntese • Printere • Fargen oppfattes som sort når hver komponent har full intensitet • Fargen oppfattes som hvit når hver komponent har null intensitet • I praksis (trykkeribransjen) brukes en fire-farge teknikk med sort (K) som en fjerde farge INF2340 / V05

  34. Fordeler med kubemodellene • Enkel geometri • Korresponderer direkte med maskinvare (RGB-kanonene i skjermen •  effektiv! INF2340 / V05

  35. Ulemper med kubemodellen • En gitt RGB-verdi vil ikke nødvendigvis gi samme farge på andre skjermer! • RGB kan i praksis ikke overføres direkte til CMY kun ved å ta inversen (R = 1 - C) • Sammenhengen mellom forskjell i fargeoppfattelse og geometrisk avstand mellom to “fargepunkter” varierer med hvor i kuben man er (f.eks. enklere å skille farger i det “lyse” hjørnet!) • Representerer styrken på RGB-kanonene i skjermen i større grad enn hvordan fotoreseptorene i øyet oppfatter farge • Ikke spesielt intuitiv! INF2340 / V05

  36. HSV-modellen • Basert på “kunstmaler-modell” Blanding med hvitt Ren farge Blanding med både hvitt og sort Gråtoner Blanding med sort INF2340 / V05

  37. V Yellow 60° Green 120° Cyan 180° White 1.0 Red 0° Magenta 300° Blue 240° H S Black 0.0 HSV = generalisert kunstmaler-modell: • Basiskomponenter: H (hue), S (saturation) og V (value) • Additiv syntese • Fargeskjermer INF2340 / V05

  38. Fordeler med HSV-modellen • Intuitiv! • Enkel geometri (nesten like enkel som RGB) • Enkel algoritme for å konvertere til RGB INF2340 / V05

  39. Ulemper med HSV-modellen • En gitt HSV-verdi vil ikke nødvendigvis gi samme farge på andre skjermer! • Sammenhengen mellom forskjell i fargeoppfattelse og geometrisk avstand mellom to “fargepunkter” varierer med hvor man er (spesielt langs “hue”-dimensjonen: langsommere endringer ved RGB-vinklene) • Aksene oppfattes ikke som helt ortogonale (uavhengige). F.eks. vil ulike punkter i HS-planet kunne gi litt ulik intensitet selv om V er numerisk konstant. INF2340 / V05

  40. RGB vs HSV RGB (red, green, blue) and HSV (hue, saturation, value) colour systems. INF2340 / V05

  41. Display controller 000000001000000000 000000111110000000 000011111111100000 000111111111110000 000110011100110000 000110011100110000 000111111111110000 000000000000000000 Video controller Basal Maskinarkitektur for Rastergrafikk Grensesnitt mot vertsmaskin Grafikk kommandoer Interaksjons data Mus / Tastatur Pixel (picture element) “Frame buffer” INF2340 / V05

  42. Skjermoppløsning vs. pixeldybde • Skjermoppløsning = antall pixler • Pixeldybde = antall bit pr pixel • F.eks. en skjerm med oppløsning 1280x1024 og pixeldybde 24, krever 3.75 MB RAM Pixeldybde Skjermoppløsning INF2340 / V05

  43. 8 bit 8 bit 8 bit 8 bit 8 bit 8 bit Blue Video controller Green Red 24 bits fargebuffer • (28)3 = 16,777,216 ulike farger i et enkelt pixel • “ubegrenset” antall ulike pixler (med dagens skjermoppløsning!) INF2340 / V05

  44. 8 bit Video controller 8 bits fargebuffer - alternativ 1 2 bit 3 bit 3 bit 8 bit • 28 = 256 ulike farger i et enkelt pixel • 28 = 256 ulike pixler INF2340 / V05

  45. 8 bit Video controller 8 bits fargebuffer - alternativ 2 (bedre) 0 Colormap (Lookup Table) 1 255 24 bit 8 bit 24 bit • (28)3 = 16,777,216 ulike farger å velge mellom • 28 = 256 ulike pixler INF2340 / V05

  46. Annen bruk av frame buffer’et Bl.a. • “Dobbeltbuffering” (animasjon etc.) • Z-verdi (skjulte flater) • Alpha-verdi (transparens) Mer om dette senere! INF2340 / V05

  47. Grafiske primitiver • Fundamentale • Punkt (node) • Linje (kant) • Mer komplekse • Polylinje • Polygon INF2340 / V05

  48. Linje og triangel-polygon i VTK vtkActor vtkActor vtkPolyDataMapper vtkPolyDataMapper vtkPolyData vtkLineSource vtkFloatPoints vtkCellArray vtkIdList (x, y, z) ID = 2 (x, y, z) ID = 0 vtkPolyData ID = 1 (x, y, z) INF2340 / V05

  49. Rasterisering • Å avgjøre hvilke pixler som blir dekket av et 3D primitiv (“scan-konvertering”) • Å utføre diverse operasjoner relatert til enkelt-pixler (f.eks. korrekt fargelegging i forhold til belysning) 3D primitiv Projisering Rasterisering 2D primitiv Rasterisert 2D primitiv INF2340 / V05

  50. Aliasing(kap. 7.15 VTK-boka) • Rasteriserte primitiver ser generelt “taggete” ut 5 5 4 4 3 3 2 2 1 1 0 0 0 1 2 3 4 5 6 7 8 9 10 11 0 1 2 3 4 5 6 7 8 9 10 11 Ideelt I praksis INF2340 / V05

More Related