Was ist VTK?

Download Report

Transcript Was ist VTK?

Computergrafik-Seminar
(Visualization ToolKit)
Autor: Patrick v. Massow
Betreuer: Prof. Dr. E. Schömer
M. Hemmer
Übersicht
Computergrafik-Seminar VTK
Übersicht
•
•
•
•
•
•
•
•
Was ist VTK?
Entstehung und Einsatzgebiete
Architektur
VTK-Subsysteme
Codebeispiele
Aufbauen einer Objekt-Hierarchie
Fazit
Literatur
Was ist VTK?
Computergrafik-Seminar VTK
Was ist VTK?
VTK (Visualization ToolKit)
•
ist eine Visualisierungsbibliothek für Computergrafik
aus C++ - Klassen,
•
kann durch C++, aber auch durch Tcl/Tk, Python
oder Java-Programmierung benutzt werden,
•
baut auf Renderingbibliotheken wie OpenGL auf,
•
ermöglicht ein Arbeiten auf hohem Abstraktionsniveau,
•
ist ein Open-Source-Projekt,
•
enthält >700 Klassen mit >350.000 Code-Zeilen.
Was ist VTK?
Computergrafik-Seminar VTK
Leistungsmerkmale von VTK
•
•
•
•
•
•
•
•
•
Oberflächen-Rendering
Volumen-Rendering
Skalar-, Vektor-, Tensor- und Texture-Rendering
Interaktionsmodi wie „virtueller Trackball“
hunderte von Visualisierungs-Algorithmen wie
Polygon-Reduktion und Delaunay-Triangulierung
Stereo-Visualisierung
Export des Rendering-Fensters in Bilddateien
portables Multithreading für parallele Algorithmen
u. v. m.
Entstehung und Einsatzgebiete
Computergrafik-Seminar VTK
Entstehung und Einsatzgebiete
VTK
•
wird seit 1993 – ursprünglich von
General Electric – entwickelt,
•
wird heute von Kitware Inc.
supported und weiterentwickelt,
•
hat sein Haupteinsatzgebiet in der
Wissenschaft (z. B. Medizin),
Maschinenbau, usw.,
•
enthält patentierte Algorithmen, für
deren kommerzielle Nutzung
Lizenzgebühren anfallen.
Entstehung und Einsatzgebiete
Computergrafik-Seminar VTK
Kitware‘s VolView – kommerzielles Tool, das VTK nutzt
Architektur
Computergrafik-Seminar VTK
Architektur
Das VTK besteht aus einem kompilierten Kern und einer
interpretierten Hülle.
Der Kern
•
ist eine in C++ implementierte Klassenstruktur,
•
enthält Datenstrukturen, Algorithmen und
zeitkritische Funktionen,
•
ist unabhängig vom grafischen Benutzerinterface,
•
lässt sich dank des Einsatzes von Entwurfsmustern
leicht erweitern.
Architektur
Computergrafik-Seminar VTK
Architektur (Fortsetzung)
Die interpretierte Hülle
•
bietet die Möglichkeit, VTK mit anderen Sprachen als
C++ zu nutzen,
•
unterstützt derzeit Java, Python und Tcl/Tk,
•
kostet beim Einsatz etwas Performance,
•
bietet weitere Flexibilität und Erweiterbarkeit,
•
ermöglicht beispielsweise im Fall von Java, VTK auf
AWT-Oberflächen einzusetzen.
VTK-Subsysteme
Computergrafik-Seminar VTK
VTK-Subsysteme
VTK besteht aus zwei Subsystemen: dem Graphics
Model und der Visualization Pipeline.
Das Graphics Model
•
ist eine Schicht über der Renderingbibliothek,
•
erzeugt die Bilddaten (aus dem Output der
Visualization Pipeline),
•
ist in Bezeichnung der Klassen an die Filmindustrie
angelehnt,
VTK-Subsysteme
Computergrafik-Seminar VTK
Das Graphics Model (Fortsetzung)
Zur
•
•
•
•
Zeit werden unterstützt:
OpenGL
GL von Silicon Graphics
XGL von Sun Microsystems
Starbase von HP
Ein Ersetzen des Graphic Models erfordert keine
Anpassung der Programme, die VTK nutzen.
VTK-Subsysteme
Computergrafik-Seminar VTK
Das Graphics Model (Fortsetzung)
Es gibt sieben Basisklassen
zum Rendern einer Szene:
•
vtkRenderWindow
•
vtkRenderer
•
vtkLight
•
vtkCamera
•
vtkActor
•
vtkProperty
•
vtkMapper
VTK-Subsysteme
Computergrafik-Seminar VTK
Beleuchtung in VTK
VTK benutzt das Phong-Modell mit
•
spekularem,
•
diffusen
•
und ambientem Anteil
wie OpenGL mit Flat- oder
Gouraudshading.
Für Lichtquellen und Objekte der Szene können diese
Parameter festgelegt werden.
VTK-Subsysteme
Computergrafik-Seminar VTK
Die Visualization Pipeline
Die Visualization Pipeline besteht aus
•
Datenklassen (Unterklassen von vtkDataObject)
• repräsentieren Daten und erlauben, auf ihnen zu
operieren
• berechnen Informationen, die sich aus Daten ergeben
•
Prozessklassen (Unterklassen von vtkProcessObject)
• generieren Output-Daten
• repräsentieren Visualisierungs-Algorithmen
•
einer Mapperklasse
• bereiten Daten einer Prozessklasse (z. B. eines Filters)
auf, um sie anzeigen zu können
VTK-Subsysteme
Computergrafik-Seminar VTK
Die Visualization Pipeline (Fortsetzung)
•
•
•
dient zur Erstellung und Aufbereitung der Daten für
das Graphics Model,
wird aufgebaut, indem man den Output von Datenoder Prozessklassen zum Input anderer Prozessklassen macht,
wird durch eine Mapperklasse terminiert, deren Input
der Output einer Daten- oder Prozessklasse ist.
Die Mapper-Klasse ist die Schnittstelle zwischen der
Visualization Pipeline und dem Graphics Model.
VTK-Subsysteme
Computergrafik-Seminar VTK
Übergang Visualization Pipeline
Daten-Input
Visualization
Pipeline
Filter*
Mapper
*
Actor
Graphics
Model
Renderer
Render-Window
Graphics Model
beliebig viele Filter
mit jeweils beliebig
vielen Inputs
Schnittstelle
VP <-> GM
dient beliebig
vielen Actors
als Input
VTK-Subsysteme
Computergrafik-Seminar VTK
Ausführung der Visualization Pipeline
•
•
Prozess-Objekte werden automatisch ausgeführt,
wenn sich deren Input ändert (implizit).
Beim Rendern sendet ein Renderer ein Update, das
• über alle Actors,
• deren Mapper
• und die Objekte an deren Eingängen
•
•
•
zu den Source-Objekten gelangt.
Dabei prüft jedes Objekt, ob sich seine Eingaben
geändert haben.
Ist dies der Fall, berechnet es neue Werte und gibt
diese an seine Ausgänge weiter.
Per Update ist auch explizite Ausführung möglich.
VTK-Subsysteme
Computergrafik-Seminar VTK
Ausführung der Visualization Pipeline
Daten-Input
Filter
Filter
Mapper
Parameter verändert
Filter
Filter
Filter
Mapper
Mapper
Prozessobjekte werden
erneut ausgeführt.
VTK-Subsysteme
Computergrafik-Seminar VTK
Arbeiten mit dem VTK
•
•
•
•
•
Die Visualisierung erfolgt in einem Render-Window
(Instanz von Unterklasse von vtkRenderWindow).
Ein vtkRenderWindow enthält beliebig viele Renderer
(Instanzen von vtkRenderer oder Unterklassen).
Einem vtkRenderer können Actors (Instanzen von
Unterklassen von vtkProp) hinzugefügt werden, um
eine Szene zu erstellen.
Ein Actor bezieht seinen Input von einem Mapper und
referenziert ein Property-Objekt.
Ein Mapper erhält seinen Input von einem DatenInput-Objekt oder einem Filter.
VTK-Subsysteme
Computergrafik-Seminar VTK
Instanzen von vtkRenderWindow
Instanzen von vtkRenderer
Instanzen
von vtkActor
Beispiele
Computergrafik-Seminar VTK
Codebeispiel Oberflächen-Rendering (Wuerfel)
vtkCubeSource* pCubeSource = vtkCubeSource::New();
vtkPolyDataMapper* pCubeMapper = vtkPolyDataMapper::New();
pCubeMapper->SetInput( pCubeSource->GetOutput() );
vtkActor* pCubeActor = vtkActor::New();
pCubeActor->SetMapper( pCubeMapper );
pCubeActor->RotateX( 30 );
pCubeActor->RotateY( 20 );
vtkRenderer* pRenderer = vtkRenderer::New();
pRenderer->AddProp( pCubeActor );
vtkRenderWindow* pRenWin = vtkRenderWindow::New();
pRenWin->AddRenderer( pRenderer );
pRenWin->Render();
Beispiele
Computergrafik-Seminar VTK
Codebeispiel Oberflächen-Rendering
(virtueller Trackball)
(…)
vtkRenderWindow* pRenWin = vtkRenderWindow::New();
pRenWin->AddRenderer( pRenderer );
//pRenWin->Render();
vtkRenderWindowInteractor* pRenWinInteractor =
vtkRenderWindowInteractor::New();
vtkInteractorStyleTrackballCamera* pInteractorStyle =
vtkInteractorStyleTrackballCamera::New();
pRenWinInteractor->SetInteractorStyle( pInteractorStyle );
pRenWinInteractor->SetRenderWindow( pRenWin );
pRenWinInteractor->Initialize();
pRenWinInteractor->Start();
Beispiele
Computergrafik-Seminar VTK
Codebeispiel Oberflächen-Rendering (Texturen)
(…)
vtkPNGReader* pPNGReader = vtkPNGReader::New();
pPNGReader->SetFileName( "Texture.png" );
vtkTexture* pTexture = vtkTexture::New();
pTexture->SetInput( pPNGReader->GetOutput() );
pTexture->InterpolateOn();
vtkTransformTextureCoords* pTransformTexture =
vtkTransformTextureCoords::New();
pTransformTexture->SetInput(
(vtkDataSet*)pCubeSource->GetOutput() );
pTransformTexture->SetScale( 2, 2, 1 );
pTransformTexture->SetPosition( -0.5, -0.5, 0 );
Beispiele
Computergrafik-Seminar VTK
Codebeispiel Oberflächen-Rendering
(Texturen Fortsetzung)
vtkPolyDataMapper* pCubeMapper = vtkPolyDataMapper::New();
//pCubeMapper->SetInput( pCubeSource->GetOutput() );
pCubeMapper->SetInput(
(vtkPolyData*)pTransformTexture->GetOutput() );
(…)
pCubeActor->SetTexture( pTexture );
(…)
Beispiele
Computergrafik-Seminar VTK
Codebeispiel Oberflächen-Rendering (vtkGlyph3D)
vtkSphereSource* pSphere = vtkSphereSource::New();
vtkConeSource* pCone = vtkConeSource::New();
pCone
pSphere
(…)
vtkGlyph3D* pGlyph = vtkGlyph3D::New();
pGlyph->SetInput( pSphere->GetOutput() );
pGlyph->SetSource( pCone->GetOutput() );
pGlyph
pMapper
(…)
pActor
pRenderWindow
pRenderer
Beispiele
Computergrafik-Seminar VTK
Codebeispiel Volumen-Rendering
vtkVolume16Reader* pKopfVolume = vtkVolume16Reader::New();
pKopfVolume->SetDataDimensions( 64, 64 );
pKopfVolume->SetFilePrefix( "./headsq/quarter" );
pKopfVolume->SetImageRange( 1, 93 );
vtkContourFilter* pHautFilter = vtkContourFilter::New();
pHautFilter->SetInput( (vtkDataSet*)pKopfVolume->GetOutput() );
pHautFilter->SetValue( 0, 500 );
vtkPolyDataMapper* pHautMapper = vtkPolyDataMapper::New();
pHautMapper->SetInput( pHautFilter->GetOutput() );
vtkActor* pHautActor = vtkActor::New();
pHautActor->SetMapper( pHautMapper );
(…)
Beispiele
Computergrafik-Seminar VTK
Aufbauen einer Objekt-Hierarchie
Wir möchten aus
•
einem Roboterkörper,
•
zwei Roboterarmen
•
und zwei Roboterhänden
einen Roboter aufbauen.
pHand
pArm
pKoerper
pHandMapper
pArmMapper
pKoerperMapper
pHand1Actor
pHand2Actor
pArm1Actor
pArm2Actor
pKoerperActor
Beispiele
Computergrafik-Seminar VTK
Aufbauen einer Objekt-Hierarchie (Fortsetzung)
Dabei sollen
•
beim Bewegen der Arme die dazugehörigen Hände,
•
beim Bewegen des Körpers die Arme und Hände
mitbewegt werden.
VTK stellt hierfür das vtkAssembly bereit. Ein vtkAssembly
•
gruppiert vtkProp3Ds (Oberkasse von vtkActor) zu
einer Baum-Hierachie,
•
gibt Transformationen an seine Kinder weiter,
•
kann anstelle eines vtkProp3Ds eingesetzt werden,
•
kann Teil der Gruppe eines vtkAssembly sein.
Beispiele
Computergrafik-Seminar VTK
Aufbauen einer Objekt-Hierarchie (Fortsetzung)
Hierfür fassen wir
•
die Hand- und Arm-Actors zu Arm-vtkAssemblys
zusammen,
•
den Körper-Actor und die Arm-vtkAssemblys zu
einem Körper-vtkAssembly zusammen.
Dreht man nun z. B. den Körper, dreht sich der Rest mit.
pArm1Actor
pHand1Actor
pArm1Assembly
pArm2Actor
pKoerperActor
pKoerperAssembly
pHand2Actor
pArm2Assembly
Beispiele
Computergrafik-Seminar VTK
Aufbauen einer Objekt-Hierarchie (Fortsetzung)
vtkCubeSource* pHand = vtkCubeSource::New();
vtkPolyDataMapper* pHandMapper = vtkPolyDataMapper::New();
(…)
vtkActor* pHand1Actor =
vtkActor* pHand2Actor =
pHand1Actor->SetMapper(
pHand2Actor->SetMapper(
(…)
vtkActor::New();
vtkActor::New();
pHandMapper );
pHandMapper );
vtkCubeSource* pArm = vtkCubeSource::New();
(…)
vtkActor* pArm1Actor = vtkActor::New();
vtkActor* pArm2Actor = vtkActor::New();
(…)
vtkCubeSource* pKoerper = vtkCubeSource::New();
vtkActor* pKoerperActor = vtkActor::New();
(…)
Beispiele
Computergrafik-Seminar VTK
Aufbauen einer Objekt-Hierarchie (Fortsetzung)
vtkAssembly* pArm1Assembly = vtkAssembly::New();
pArm1Assembly->AddPart( pHand1Actor );
pArm1Assembly->AddPart( pArm1Actor );
(…)
vtkAssembly* pArm2Assembly = vtkAssembly::New();
pArm2Assembly->AddPart( pHand2Actor );
pArm2Assembly->AddPart( pArm2Actor );
(…)
vtkAssembly* pKoerperAssembly = vtkAssembly::New();
pKoerperAssembly->AddPart( pArm1Assembly );
pKoerperAssembly->AddPart( pArm2Assembly );
pKoerperAssembly->AddPart( pKoerperActor );
(…)
pArm1Assembly->RotateZ( 45 );
Beispiele
Computergrafik-Seminar VTK
Fazit
Computergrafik-Seminar VTK
Fazit
Vorteile:
•
OpenSource
•
leicht erweiterbar
•
durch hohes Abstraktionsniveau aufwändige
Grafikapplikationen schnell realisierbar
•
Plattform- und Renderingbibliothek-Unabhängigkeit
•
guter Support durch große Usergemeinde und
Doxygen-Dokumentation
•
optional kommerzielle Unterstützung
Fazit
Computergrafik-Seminar VTK
Fazit (Fortsetzung)
Nachteile:
•
Der direkte Einsatz von VTK ist inperformanter als die
direkte Nutzung der jeweiligen Renderingbibliothek.
•
Um die Möglichkeiten von VTK voll ausschöpfen zu
können, ist eine lange Einarbeitung nötig.
•
Die Dokumentation ist teilweise etwas knapp.
Literatur
Computergrafik-Seminar VTK
Computergrafik-Seminar VTK
Vielen Dank
für Ihre Aufmerksamkeit