VTK - The Visualization Toolkit Del Introduksjon til VTK Objekt-orientert bibliotek for visualisering Fordeler: Fritt tilgjengelig Stor brukergruppe Godt designet, testet og dokumentert (se VTK brukermanual på kurssiden!) 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 / V04 2 VTK Ulemper: Dårlig ytelse (i mange tilfeller) Utnytter ikke visse typer maskinvare for grafikk... Til dels dårlig dokumentasjon... 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 / V04 3 INF2340 / V04 4
Eksempel Litt notasjon for OO-modellering class Adder { public: void Add(int x, int y) {sum = x + y;} int GetSum() {return sum;} private: int sum; }; Adder a; a.add(3, 4); cout << a.getsum() << \n ; A B En klasse Et objekt (instans av klassen 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 B A har kjennskap til B (assosiasjon) (Egentlig: A har behov for å kjenne til B!) A Adder* a2 = new Adder; a2->add(5, 6); cout << a2->getsum() << \n ; INF2340 / V04 5 A B A og B har kjennskap til hverandre (toveis assosiasjon) A B A består av B, B er en del av A (aggregering - spesiell form for assosiasjon) INF2340 / V04 6 A A A osv. Litt OO notasjon (forts.) B A består av nøyaktig én instans av B 0.. B A består av null eller én instans av B 0..* B A består av null eller flere instanser av B VTK - Overordnet Arkitektur..*..*..*..*..*..* 0..* 0.. Tilsvarende for assosiasjon! INF2340 / V04 7 INF2340 / V04 8 2
0.. 0....*..*..*..* 0..*..*..*..*..*..*..* 0..*..*..* Ansvarlig for opptegning av all grafikk i et hovedvindu. Håndterer mus- og tastaturhendelser ( events ). Gir -objektet beskjed om ny opptegning der typisk verdier i objektene er endret. INF2340 / V04 9 INF2340 / V04 0 0.. 0....*..*..*..* 0..*..*..*..*..*..*..* 0..*..*..* 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. Definerer egenskaper for flaten til en 3D aktør, deriblant farge hvordan lys reflekteres representasjonsform ((fylte) polygoner, linjer eller punkter) transparens INF2340 / V04 INF2340 / V04 2 3
0.. 0....*..*..*..* 0..*..*..* Representerer sluttproduktet i i form av et sett med grafiske primitiver. Flere detaljer om kommer senere!..*..*..*..* 0..*..*..* Ansvarlig for å lage et 2D bilde av 3D aktørene...... eller 2D aktørene vtkviewport..*..* 2D INF2340 / V04 3 INF2340 / V04 4 0.. 0....*..*..*..* 0..*..*..*..*..*..*..* 0..*..*..* Definerer en lyskilde for belysning av 3D aktørene. En lyskilde kan bl.a. ha farge og plassering. Definerer synsvinkelen vi betrakter 3D aktørene med. Bl.a. kan graden av perspektiv manipuleres. INF2340 / V04 5 INF2340 / V04 6 4
Instansiering av objekter VTK-objekter skal alltid instansieres med New og slettes med Delete! * rdr = ::New(); rdr->delete(); Pga. Dynamisk minnehåndtering garbage collection Korrekt instansiering av subklasser (se kap. 3.0 i VTK-boka)... INF2340 / V04 7 Sammenkobling av objekter SetRenderWindow 0.. AddRenderer..*..* AddActor..*..*..* SetMapper AddLight..* SetActiveCamera 0..* SetProperty Disse instansieres (og kobles opp) automatisk INF2340 / V04 8 Sammenkobling av objekter i SetInput GetOutput vtkspheresource vtkspheresource* ssphere = vtkspheresource::new(); vtkpolydatamapper* msphere = vtkpolydatamapper::new(); msphere->setinput(ssphere->getoutput()); Mer om dette senere! Typisk hovedstruktur i et C++/VTK program i IN229 // Inkludering av nødvendige filer // *** Hovedprogram *** main() { // - Instansiér og koble sammen, og // evt. objekter. // - Instansiér aktør objekter og deres tilhørende visualization // pipelines // - Koble aktør objektene til objektet/objektene // - Sett opp vinduet og start evt. mus/tastatur interaksjon } Se pekeren Kompilering av... på kurs-siden for et eksempel (sphere.c) INF2340 / V04 9 INF2340 / V04 20 5
VTK så langt Nok informasjon til å lage enkle programmer der fokus ikke er på visualization pipeline Bruk manualsidene! Del 2 Grafisk databehandling INF2340 / V04 2 Lys Elektromagnetisk energi med bølgelengde i intervallet 400- til 700 nm (0-9 m) 0-6 0-3 0-0 0 3 0 6 0 9 0 2 Kosmisk stråling Gamma stråling Røntgen Ultrafiolett Infrarødt Mikrobølge Radar Radio (nm) Fargen til et objekt Definert som bølgelengdene det reflekterer eller transmitterer (genererer selv) Synlig lys 400 450 500 550 600 650 700 (nm) INF2340 / V04 23 INF2340 / V04 24 6
Fargeoppfattelse Defineres typisk vha. tre størrelser: dominerende bølgelengde Akromatisk lys (gråtoner) Ingen dominerende bølgelengde Metning lik null metning ( avstand fra grått) intensitet ( lyshet ) INF2340 / V04 25 INF2340 / V04 26 Ø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) tre typer - mest sensitive for hhv. blått, grønt og rødt 400 700 Bølgelengde (nm) fiolett! INF2340 / V04 27 INF2340 / V04 28 7
Fargesyntese Additiv kombinasjon av farget lys dataskjermer totalfargen lysere (mer intens) og mer mettet enn enkeltkomponentene modeller: RGB, HSV Subtraktiv refleksjon fra kombinasjon av fargede pigmenter printere totalfargen mørkere (mindre intens) og mindre mettet enn enkeltkomponentene modeller: CMY(K) INF2340 / V04 29 Fargemodeller (-rom) RGB-kuben Blue (0, 0, ) Cyan (0,, ) Magenta (, 0, ) White (,, ) Gråtoner Black (0, 0, 0) Green (0,, 0) Red (, 0, 0) Yellow (,, 0) INF2340 / V04 30 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 CMY(K)-kuben Yellow (0, 0, ) Red (0,, ) Green (, 0, ) Black (,, ) Gråtoner White (0, 0, 0) Magenta (0,, 0) Cyan (, 0, 0) Blue (,, 0) INF2340 / V04 3 INF2340 / V04 32 8
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 Fordeler med kubemodellene Enkel geometri Korresponderer direkte med maskinvare (RGB-kanonene i skjermen effektiv! INF2340 / V04 33 INF2340 / V04 34 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 = - 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! HSV-modellen Basert på kunstmaler-modell Blanding med hvitt Ren farge Blanding med både hvitt og sort Gråtoner Blanding med sort INF2340 / V04 35 INF2340 / V04 36 9
HSV = generalisert kunstmaler-modell: V Green 20 Yellow 60 Cyan 80 White.0 Red 0 Blue 240 Magenta 300 Fordeler med HSV-modellen Intuitiv! Enkel geometri (nesten like enkel som RGB) Enkel algoritme for å konvertere til RGB Basiskomponenter: H (hue), S (saturation) og V (value) Additiv syntese Fargeskjermer Black 0.0 H S INF2340 / V04 37 INF2340 / V04 38 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. RGB vs HSV RGB (red, green, blue) and HSV (hue, saturation, value) colour systems. Color RGB HSV Black 0,0,0 *,*,0 White,, *,0, Red,0,0 0,, Green 0,,0 0.33,, Blue 0,0, 0.67,, Sky Blue 0.5,0.5, 0.67,0.5, INF2340 / V04 39 INF2340 / V04 40 0
Basal Maskinarkitektur for Rastergrafikk 00000000000000000 0000000000000 000000000 0000000 00000000000 00000000000 0000000 000000000000000000 Frame buffer Grensesnitt mot vertsmaskin Grafikk kommandoer Display controller Video controller Interaksjons data Mus / Tastatur Pixel (picture element) INF2340 / V04 4 Skjermoppløsning vs. pixeldybde Skjermoppløsning = antall pixler Pixeldybde = antall bit pr pixel F.eks. en skjerm med oppløsning 280x024 og pixeldybde 24, krever 3.75 MB RAM Skjermoppløsning Pixeldybde INF2340 / V04 42 24 bits fargebuffer s fargebuffer - alternativ Video controller Video controller 2 bit Blue 3 bit Green 3 bit Red (2 8 ) 3 = 6,777,26 ulike farger i et enkelt pixel ubegrenset antall ulike pixler (med dagens skjermoppløsning!) 2 8 = 256 ulike farger i et enkelt pixel 2 8 = 256 ulike pixler INF2340 / V04 43 INF2340 / V04 44
s fargebuffer - alternativ 2 (bedre) 0 Colormap (Lookup Table) 24 bit (2 8 ) 3 = 6,777,26 ulike farger å velge mellom 2 8 = 256 ulike pixler 255 Video controller 24 bit Annen bruk av frame buffer et Bl.a. Dobbeltbuffering (animasjon etc.) Z-verdi (skjulte flater) Alpha-verdi (transparens) Mer om dette senere! INF2340 / V04 45 INF2340 / V04 46 Grafiske primitiver Linje og triangel-polygon i VTK Fundamentale Punkt (node) Linje (kant) Mer komplekse Polylinje Polygon vtkpolydatamapper vtklinesource vtkpolydata vtkpolydata vtkpolydatamapper vtkfloatpoints vtkcellarray vtkidlist (x, y, z) ID = 2 (x, y, z) ID = 0 (x, y, z) ID = INF2340 / V04 47 INF2340 / V04 48 2
3D primitiv Projisering 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) Aliasing (kap. 7.5 VTK-boka) Rasteriserte primitiver ser generelt taggete ut 5 5 4 4 Rasterisering 3 2 3 2 2D primitiv Rasterisert 2D primitiv 0 0 2 3 4 5 6 7 8 9 0 Ideelt 0 0 2 3 4 5 6 7 8 9 0 I praksis INF2340 / V04 49 INF2340 / V04 50 Antialiasing La primitivet ha tykkelse lik en pixelbredde. La bidraget w til forgrunnsfargen i et pixel være proporsjonal med arealet som dekkes av primitivet: 0.. 00% dekningw = 0... Resultatfargen i pixelet er da essensielt gitt ved wf + (-w)b, der f og b er hhv. for- og bakgrunnsfargen. 5 4 3 2 0 0 70% av pixel-areal w = 0.7 2 3 4 5 6 7 8 9 0 Objektrom Objekt- og bilderom (kap 3.6 i VTK-boka) Modell-koordinater (model-) Verdens-koordinater (world-) Bilderom Syns-koordinater (view-) Skjerm-koordinater (display-) Det finnes også andre metoder INF2340 / V04 5 INF2340 / V04 52 3
Objektrom z Transformasjon y Bildeplan Bilderom x Transformasjon Transformasjon Verdens-koordinater y z y Syns-koordinater x z y z y y z x x x Objekt (f.eks. en VTK actor ) Bilde (f.eks. en PC-skjerm) Modellkoordinater z x x y z Transformasjon Skjerm-koordinater INF2340 / V04 53 INF2340 / V04 54 Objekt- og bilderekkefølge (kap. 3. i VTK-boka) Klassifikasjon av algoritmer som avbilder informasjon i objektrommet på bildeplanet: Objektrekkefølge Kontstruer bildet ved å gå systematisk gjennom ett og ett objekt. Bilderekkefølge Konstruer bildet ved å gå systematisk gjennom ett og ett pixel. Scanning av CRT (Cathode Ray Tube) Frame buffer Video controller Elektronkanoner mot rødt, grønt og blått fosfor Scan linje Vertikal retrace Horisontal retrace INF2340 / V04 55 INF2340 / V04 56 4