1 / 35

Computergrafik-Seminar

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

Download Presentation

Computergrafik-Seminar

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. Computergrafik-Seminar (Visualization ToolKit) Betreuer: Prof. Dr. E. Schömer M. Hemmer Autor: Patrick v. Massow

  2. Übersicht Computergrafik-Seminar VTK Übersicht • Was ist VTK? • Entstehung und Einsatzgebiete • Architektur • VTK-Subsysteme • Codebeispiele • Aufbauen einer Objekt-Hierarchie • Fazit • Literatur

  3. 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.

  4. 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.

  5. 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.

  6. Entstehung und Einsatzgebiete Computergrafik-Seminar VTK Kitware‘s VolView – kommerzielles Tool, das VTK nutzt

  7. 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.

  8. 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.

  9. 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,

  10. 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.

  11. VTK-Subsysteme Computergrafik-Seminar VTK Das Graphics Model (Fortsetzung) Es gibt sieben Basisklassen zum Rendern einer Szene: • vtkRenderWindow • vtkRenderer • vtkLight • vtkCamera • vtkActor • vtkProperty • vtkMapper

  12. 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.

  13. 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

  14. 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.

  15. 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

  16. 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.

  17. 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

  18. 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.

  19. VTK-Subsysteme Computergrafik-Seminar VTK Instanzen von vtkRenderWindow Instanzen von vtkRenderer Instanzen von vtkActor

  20. 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();

  21. 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();

  22. 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 );

  23. 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 ); (…)

  24. 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

  25. 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 ); (…)

  26. 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

  27. 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.

  28. 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

  29. 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(); (…)

  30. 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 );

  31. Beispiele Computergrafik-Seminar VTK

  32. 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

  33. 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.

  34. Literatur Computergrafik-Seminar VTK

  35. Computergrafik-Seminar VTK Vielen Dank für Ihre Aufmerksamkeit

More Related