350 likes | 483 Views
Computergrafik-Seminar. (Visualization ToolKit). Betreuer: Prof. Dr. E. Schömer M. Hemmer. Autor: Patrick v. Massow. Übersicht. Computergrafik-Seminar VTK. Übersicht Was ist VTK? Entstehung und Einsatzgebiete Architektur VTK-Subsysteme Codebeispiele Aufbauen einer Objekt-Hierarchie
E N D
Computergrafik-Seminar (Visualization ToolKit) Betreuer: Prof. Dr. E. Schömer M. Hemmer Autor: Patrick v. Massow
Ü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 Abstraktions-niveau, • 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 Daten- oder Prozessklassen zum Input anderer Prozess-klassen 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 Graphics Model beliebig viele Filter mit jeweils beliebig vielen Inputs Daten-Input Visualization Pipeline Filter* Schnittstelle VP <-> GM Mapper * Actor dient beliebig vielen Actors als Input Graphics Model Renderer Render-Window
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 Parameter verändert Filter Filter Prozessobjekte werden erneut ausgeführt. Mapper Filter Filter Mapper Mapper
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 Daten-Input-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(); (…) vtkGlyph3D* pGlyph = vtkGlyph3D::New(); pGlyph->SetInput( pSphere->GetOutput() ); pGlyph->SetSource( pCone->GetOutput() ); (…) pSphere pCone 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 pKoerper pArm pKoerperMapper pHandMapper pArmMapper pKoerperActor pHand1Actor pHand2Actor pArm1Actor pArm2Actor
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 pArm2Actor pHand2Actor pArm1Assembly pKoerperActor pArm2Assembly pKoerperAssembly
Beispiele Computergrafik-Seminar VTK Aufbauen einer Objekt-Hierarchie (Fortsetzung) vtkCubeSource* pHand = vtkCubeSource::New(); vtkPolyDataMapper* pHandMapper = vtkPolyDataMapper::New(); (…) vtkActor* pHand1Actor = vtkActor::New(); vtkActor* pHand2Actor = vtkActor::New(); pHand1Actor->SetMapper( pHandMapper ); pHand2Actor->SetMapper( 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