Open Source im professionellen Einsatz

Newsletter abonnieren
Seite durchsuchen

HEFTARCHIV | NEWS | E-BIBLIOTHEK | VIDEO | BLOGS | WHITEPAPER | EVENTS | ACADEMY | ABO | SHOP

user friendly

  Home  »  Heft & Abo  »  Heftarchiv  »  2006  »  07  »  Virtueller Bühnenbildner  

RSS-Feed der aktuellen News von Linux-Magazin Online Folgen Sie Linux-Magazin Online auf Twitter
Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark

Viele Kommandos

OpenGL und die Begleitbibliotheken umfassen über 300 Kommandos für alle Aufgaben beim Darstellen dreidimensionaler Modelle, die immer aus einzelnen Punkten, Linien, Dreiecken und Vierecken bestehen. Es gibt zwar Routinen für Kugeln oder Quader, aber auch die erstellen nur die Oberfläche. Wer wie in einem CAD-System konstruieren möchte, ist mit fertigen CAD-Systemen oder mit der CAD-Bibliothek Open Cascade [10] wesentlich besser bedient.

Das so genannte Bluebook [8] beschreibt das API von OpenGL, für die meisten Fragen genügt die Onlineversion einer älteren Auflage. Mit Tcl3D stehen die Befehle bis auf wenige Ausnahmen mit gleichen Namen unter Tcl bereit. Die verwendete Abbildung von C auf Tcl ist weitgehend selbsterklärend, eine genaue Beschreibung enthält die Dokumentation. Der Vorteil: Beispiele aus C-Programmen lassen sich ohne großes Nachdenken in Tcl verwenden.

Vorlagen sind am Anfang auch bitter nötig, damit nicht nur ein schwarzes Fenster erscheint. Mit den drei Dimensionen potenzieren sich die Fehlermöglichkeiten: Wer etwa die Beleuchtung vergisst oder die virtuelle Kamera in die falsche Richtung dreht, sieht nichts.

Bühne frei

Der Code in Listing 1 erzeugt das Hello-World-Beispiel von OpenGL, wie in Abbildung 1 zu sehen, ein Drei- und ein Viereck. Zeile 8 fordert die Tcl-Erweiterung an. Falls Tcl3D nicht im üblichen Suchpfad installiert ist, zeigt Zeile 6, wie man den Pfad ergänzt. Das 3D-Widget entsteht dann in Zeile 71 mit dem »togl«-Befehl. Die Optionen »-width« und »-height« sind von anderen Tk-Widgets bekannt, danach kommen die OpenGL-spezifischen.

Listing 1: Hello World in
OpenGL

01 #!/usr/bin/wish
02 # Einfaches Beispiel für Tcl3d. Basis:
03 # OpenGL-Tutorial von http://nehe.gamedev.net
04 
05 # Suchpfad erweitern wenn notwendig:
06 #lappend auto_path /home/cz/tcl3d0.3
07 
08 package require tcl3d 0.2
09 
10 # Setzt ein paar Startwerte, wird beim Erzeugen des Fensters aufgerufen
11 proc tclCreateFunc {toglwin} {
12   glShadeModel GL_SMOOTH      ;# weiche Farbübergänge aktivieren
13   glClearColor 0.1 0.7 1 0.5  ;# die Hintergrundfarbe festlegen
14 }
15 
16 # 3D-Modell aufbauen und anzeigen
17 proc tclDisplayFunc {toglwin} {
18   # Farben- und Tiefenspeicher löschen
19   glClear [expr {$::GL_COLOR_BUFFER_BIT | $::GL_DEPTH_BUFFER_BIT}]
20 
21   # Anfangsposition setzen
22   glLoadIdentity
23   glTranslatef -1.5 0.0 -10.0
24 
25   # Ein rotes Dreieck zeichnen
26   glColor3f 1 1 0
27   glBegin GL_TRIANGLES
28   glVertex3f  0.0  1.0 0.0
29   glVertex3f -1.0 -1.0 0.0
30   glVertex3f  1.0 -1.0 0.0
31   glEnd
32 
33   # Viereck mit verschieden farbigen Ecken
34   glTranslatef 3.0 0.0 0.0  ;# Neuer Start
35   glBegin GL_QUADS
36   glColor3f   1.0  0.0 0.0  ;# Erste Ecke rot
37   glVertex3f -1.0  1.0 0.0
38   glColor3f   0.0  1.0 0.0  ;# Zweite grün
39   glVertex3f  1.0  1.0 0.0
40   glColor3f   0.0  0.0 1.0  ;# Dritte blau
41   glVertex3f  1.0 -1.0 0.0
42   glColor3f   1.0  1.0 1.0  ;# Vierte weiß
43   glVertex3f -1.0 -1.0 0.0
44   glEnd
45 
46   # Neues Modell anzeigen
47   $toglwin swapbuffers
48 }
49 
50 # Passende Ansicht auf das Modell berechnen,
51 # immer wenn sich die Fenstergröße ändert
52 proc tclReshapeFunc {toglwin  b h} {
53   # verhindert Teilen durch Null
54   set h [expr {$h<1 ? 1 : $h}]
55 
56   # Viewport setzen
57   glViewport 0 0 $b $h
58   glMatrixMode GL_PROJECTION
59   glLoadIdentity
60 
61   # Perspektive berechnen und aktivieren
62   set winkel 46
63   set verhaeltnis [expr {double($b)/double($h)}]
64   set von 0.1
65   set bis 100.0
66   gluPerspective $winkel $verhaeltnis $von $bis
67   glMatrixMode GL_MODELVIEW
68 }
69 
70 # Fenster aufbauen
71 togl .toglwin -width 640 -height 480 
72   -double true -createproc tclCreateFunc 
73   -reshapeproc tclReshapeFunc 
74   -displayproc tclDisplayFunc
75 pack .toglwin -expand 1 -fill both


Abbildung 1: Der Skriptcode in Listing 1 erzeugt ein einfaches 3D-Modell, es besteht aus einem einfarbigen Dreieck und einem mehrfarbigen Viereck. Bei diesem simplen Modell ist die dritte Dimension noch nicht erkennbar, außerdem fehlt Bewegung - dafür ist der Programmaufbau recht gut nachvollziehbar.

Die »-double«-Option sorgt für Double Buffering. Damit zeichnet OpenGL ein neues Bild erst im Hintergrund und tauscht die fertige Grafik dann gegen die bisher dargestellte aus. Das vermeidet Flackern beim Bildaufbau. Zuletzt übergeben die Parameter »-createprop«, »-reshapeproc« und »-displayproc« drei Tcl-Prozeduren an das Widget. Dies wiederum ruft die Createproc einmal beim Initialisieren auf, die Reshapeproc bei jeder Größenänderung und die Displayproc bei jedem Bildaufbau.

Die erste Prozedur heißt »tclCreateFunc« (Zeilen 11 bis 14). Sie initialisiert OpenGL; das ist pro Programmlauf nur einmal nötig. Eine der Entwurfsideen ist, dass Einstellungen immer so lange wie möglich gelten. Ist die Farbe für Geometrie einmal auf Rot gesetzt, färbt OpenGL jedes nachfolgende Objekt rot, egal ob das Programm zehn oder 10 000 Objekte einfügt. Die in Zeile 13 mit »glClearColor« gesetzte Hintergrundfarbe gilt auch für jeden Bildaufbau.

Als Nächstes definiert das Skript von Zeile 17 bis Zeile 48 die Prozedur »tclDisplayFunc«. Tcl3D ruft dieses Callback bei jedem Bildaufbau auf. Nachdem »glClear« in Zeile 19 den bisherige Bildinhalt gelöscht hat, entstehen hier das Drei- und das Viereck. Zudem löscht »glLoadIdentity« den bisherigen Startpunkt sowie die Rotation, »glTranslatef« setzt einen neuen Startpunkt. Das Koordinatensystem entspricht dem in Abbildung 2, die x- und y-Achse bilden die Bildschirmebene, die z-Achse zeigt aus dem Bildschirm heraus.


Abbildung 2: Alles Ansichtssache: Ohne den korrekten Viewport sieht der Betrachter in OpenGL nichts. Der Viewport bildet eine Kamera im virtuellen Raum nach, zeigt aber nur Objekte zwischen den beiden Ebenen.

Zeile 26 setzt mit »glColor3f« die Objektfarbe auf Rot, die Farbwerte stammen aus dem RGB-Modell mit Werten zwischen 0 und 1 (additive Farbmischung aus Rot, Grün und Blau). Danach definiert der Block in den Zeilen 27 bis 31 mit »glBegin GL_TRIANGLES« das erste Dreieck mit den drei Eckpunkten (Vertex) bis hin zum »glEnd«. Zwischen »glBegin« und »glEnd« darf das Skript auch mehrere Dreiecke angegeben.

Die meisten Oberflächen lassen sich mit Dreiecken wunderbar darstellen, aber OpenGL kennt noch weitere Grafik-Primitive wie Punkte, Linien oder Vierecke. Als Beispiel dient das Viereck in den Zeilen 34 bis 44. Nach dem per »glTranslatef« definierten Startpunkt gibt es wieder eine mit »glBegin« und »glEnd« eingefasste Punkteliste. Bei Vierecken ist darauf zu achten, dass alle vier Punkte in einer Ebene liegen. Andernfalls stellt OpenGL sie nicht korrekt dar und es gibt Löcher in der Geometrie.

Sie können diesen Artikel als PDF für 99 Cent kaufen. Klicken Sie dazu einfach auf eine der beiden Bezahloptionen Paypal oder ClickandBuy.


Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark
Ähnliche Artikel
Im Rampenlicht Ob Bühnenbild oder 3D-Modell, erst Anstrich und Licht sorgen für die perfekte Illusion
Künstlicher Horizont 3D-Engine Ogre
Projekteküche Aktueller Überblick über freie Software und ihre Macher
Aus der Steckdose Multimedia-Anwendungen mit OpenML
Wissenschaft anschaulich Virtual Reality in Bildung und Forschung
Kessel Buntes Video-Plugins, 3D-Grafik und Audio-APIs versprechen ein lautes Multimediajahr
Whitepaper
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele (Folge 2)

Der zweite Teil des Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele White Papers beleuchtet anhand weiterer ausgewählter Case Studies die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.

Download PDF (Registrierung erforderlich)
Usage Landscape Enterprise Open Source Data Integration

Die Nachfrage nach Datenintegrationslösungen für Unternehmen ist zunehmend gestiegen und vor allem das Interesse an Open Source Technologien wird immer größer. Doch wie und von wem werden Open Source Datenintegrationslösungen genutzt und welches Nutzungsverhalten lässt sich daraus ableiten? Das vorliegende White Paper präsentiert die Erfahrungswerte von über 1000 Open Source Nutzern und liefert fundierte Antworten auf diese Fragen.

Download PDF (Registrierung erforderlich)
Kommentare (0)