Del 1 introduksjon til vtk
Sponsored Links
This presentation is the property of its rightful owner.
1 / 56

Del 1 Introduksjon til VTK PowerPoint PPT Presentation


  • 79 Views
  • Uploaded on
  • Presentation posted in: General

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!

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Del 1Introduksjon til VTK


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


VTK

  • Ulemper:

    • Dårlig ytelse (i mange tilfeller)

      • Utnytter ikke visse typer maskinvare for grafikk

      • ...

    • Til dels dårlig dokumentasjon...

INF2340 / V05


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


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


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


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


“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


“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


“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


“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


“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


“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


“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


“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


“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


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


“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


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


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


VTK så langt

  • Nok informasjon til å lage enkle programmer der fokus ikke er på “visualization pipeline”

  • Bruk manualsidene!

INF2340 / V05


Del 2Grafisk databehandling


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


Fargen til et objekt

  • Definert som bølgelengdene det reflekterer eller transmitterer (genererer selv)

INF2340 / V05


Fargeoppfattelse

  • Defineres typisk vha. tre størrelser:

    • dominerende bølgelengde

    • metning (“avstand” fra grått)

    • intensitet (“lyshet”)

INF2340 / V05


Akromatisk lys (gråtoner)

  • Ingen dominerende bølgelengde

  • Metning lik null

INF2340 / V05


Ø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


  • tre typer - mest sensitive for hhv. blått, grønt og rødt

400

700

Bølgelengde (nm)

 fiolett!

INF2340 / V05


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


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


  • 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


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


  • 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


Fordeler med kubemodellene

  • Enkel geometri

  • Korresponderer direkte med maskinvare (RGB-kanonene i skjermen

  •  effektiv!

INF2340 / V05


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


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


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


Fordeler med HSV-modellen

  • Intuitiv!

  • Enkel geometri (nesten like enkel som RGB)

  • Enkel algoritme for å konvertere til RGB

INF2340 / V05


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


RGB vs HSV

RGB (red, green, blue) and

HSV (hue, saturation, value)

colour systems.

INF2340 / V05


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


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


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


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


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


Annen bruk av frame buffer’et

Bl.a.

  • “Dobbeltbuffering” (animasjon etc.)

  • Z-verdi (skjulte flater)

  • Alpha-verdi (transparens)

    Mer om dette senere!

INF2340 / V05


Grafiske primitiver

  • Fundamentale

    • Punkt (node)

    • Linje (kant)

  • Mer komplekse

    • Polylinje

    • Polygon

INF2340 / V05


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


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


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


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 .. 100% dekning  w = 0 .. 1.

  • Resultatfargen i pixelet er da essensielt gitt ved wf + (1-w)b, der f og b er hhv. for- og bakgrunnsfargen.

70% av pixel-areal w = 0.7

5

4

3

2

1

0

0

1

2

3

4

5

6

7

8

9

10

11

  • Det finnes også andre metoder

INF2340 / V05


Objekt- og bilderom(kap 3.6 i VTK-boka)

  • Objektrom

    • Modell-koordinater (model-)

    • Verdens-koordinater (world-)

  • Bilderom

    • Syns-koordinater (view-)

    • Skjerm-koordinater (display-)

INF2340 / V05


Bilderom

y

Bildeplan

Transformasjon

Objektrom

x

z

y

z

x

Bilde (f.eks. en PC-skjerm)

Objekt (f.eks. en VTK “actor”)

INF2340 / V05


Transformasjon

y

Transformasjon

Syns-koordinater

Verdens-koordinater

x

y

z

z

y

x

z

y

x

Transformasjon

x

z

z

y

Modell-

koordinater

Skjerm-koordinater

x

INF2340 / V05


Objekt- og bilderekkefølge(kap. 3.1 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.

INF2340 / V05


Video controller

Scanning av CRT (Cathode Ray Tube)

Frame buffer

Scan linje

Elektronkanoner mot

rødt, grønt og blått

fosfor

Vertikal “retrace”

Horisontal “retrace”

INF2340 / V05


  • Login