3 Jul, 2009 von Raimar Wagner
Die VTK Renderpipeline am Beispiel eines Oktaeders
Die VTK Renderpipeline ist im Gegensatz zu traditionellen Grafikpipelines weniger auf Rasterung, Beleuchtung, Clipping, … fokussiert sondern setzt den Schwerpunkt auf das Aufbereiten, Verändern und Repräsentieren von Eingabedaten. Die traditionelle Renderpipeline wird von dem Benutzer soweit wie möglich versteckt. Zu beachten ist dass die Pipeline von der Senke zur Quelle getriggert wird, falls jedoch in einem vorherigen Modul eine Eingabedatenänderung vorgenommen wird, muss für eine aktuelle Darstellung das jeweilige Modul manuell mittels Update
getriggert werden.
Dieser Teil der Pipeline bearbeitet und repräsentiert die Eingabedaten. In unserem Fall repräsentieren wir den Oktaeder aus Punkten, Flächen zwischen den Punkten und Farbangaben für jeden Punkt. In den VTK Tcl Bindings sieht das wie folgt aus:
#holds all points vtkPoints points points SetNumberOfPoints 6 #insert all points points InsertPoint 0 1.0 0.0 0.0 #[...] points InsertPoint 5 0.0 0.0 -1.0 #holds all faces vtkCellArray polys polys InsertNextCell 3 polys InsertCellPoint 0 polys InsertCellPoint 3 polys InsertCellPoint 4 #[...] polys InsertNextCell 3 polys InsertCellPoint 2 polys InsertCellPoint 0 polys InsertCellPoint 5 #set color to i for each face vtkFloatArray vertexScalars for { set i 0 } { $i < 6 } { incr i } { vertexScalars InsertTuple1 $i $i }
In unserem Fall besteht der Filter daraus dass alle Eingabedaten (Punkte, Flächen, …) zusammengesetzt werden müssen.
vtkPolyData octahedron octahedron SetPoints points octahedron SetPolys polys [octahedron GetPointData] SetScalars vertexScalars
Im Mapper wird die eigentlich Repräsentation erzeugt, in unserem Fall ist nurnoch eine Bereichsangabe für die Skalare notwendig.
vtkPolyDataMapper octahedronMapper octahedronMapper SetInput octahedron octahedronMapper SetScalarRange 0 7
Im Actor werden die Parameter der Datenrepräsentation spezifiziert, meist sind das klassische Computergraphikparameter wie Beleuchtung, Transparenz, …
vtkActor octahedronActor octahedronActor SetMapper octahedronMapper
In diesem Teil werden alle Actors einen Renderer zugewiesen und über ein Fenster gezeichnet.
vtkRenderer ren1 ren1 AddActor octahedronActor ren1 SetBackground 0.1 0.2 0.4 vtkRenderWindow renWin renWin AddRenderer ren1 renWin SetSize 300 300 vtkRenderWindowInteractor iren iren SetRenderWindow renWin vtkInteractorStyleTrackballCamera style iren SetInteractorStyle style iren AddObserver UserEvent {wm deiconify .vtkInteract} iren Initialize wm withdraw .
Die Interaktionskomponenten die noch initialisiert werden sind nicht direkt Teil der Pipeline sondern nebenläufige Module.
Die komplette VTK Pipeline sieht am Ende wie folgt aus:
und das Ergebnis in den Tcl Bindings:
Letzte Kommentare