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

Objekt mit Farbverlauf

Die Beschreibung der Vierecke enthält zusätzlich eine Farbdefinition für jede Ecke, sodass OpenGL einen Farbübergang auf das Viereck malt. Ist die Geometrie komplett definiert, dann kopiert »swapbuffers« das im Hintergrund gerenderte Bild in das Fenster und die erste mit OpenGL gezeichnet Geometrie erscheint (siehe Abbildung 1).


Abbildung 3: Die Kugel aus Listing 2 besteht aus 2600 Elementen. Trotzdem kann der Benutzer sie mit Maus und Tastatur ruckelfrei bewegen.

Die Prozedur »tclReshapeFunc« (Zeilen 52 bis 68) kommt bei jeder Größenänderung des Widget an den Start. Sie definiert die Ansicht auf das Modell. Die OpenGL-Utility-Bibliothek (Glu) enthält die Funktion »gluPerspective«, die dies bequem erledigt. Die Ansicht heißt Viewport (siehe Abbildung 2). Der Betrachter steht im Koordinatenursprung und erblickt einen durch Höhe und Breite des Fensters begrenzten Ausschnitt des 3D-Modells. Der in Zeile 62 gesetzte Winkel von 46° entspricht dem Blickwinkel des menschlichen Auges.

Der Viewport zeigt nur Modellteile, die im angegebenen Abstand (Zeilen 64 und 65) vom Betrachter liegen. Anders als bei der realen Fotografie werden Teile davor und dahinter nicht unscharf, sondern komplett unsichtbar.

Das Listing 1 hat aber zwei wesentliche Mängel. Einerseits bleibt die dritte Dimension unsichtbar, denn der Betrachter sieht das Modell immer aus der gleichen Perspektive. Das zweite Problem ist die Performance. Die Prozedur »tclDisplayFunc« definiert das 3D-Modell bei jedem Bildaufbau neu. Bei kleineren Modellen klappt das noch problemlos, aber schon mit wenigen 100 Dreiecken wird der Ablauf einfach zu langsam.

Bewegung

Abhilfe schafft ein zweites Beispiel, das eine Kugel aus etwa 2600 Dreiecken erzeugt (Abbildung 3). Diese Kugel bei jedem Bildaufbau neu erzeugen würde aber viel zu viel Zeit kosten. Deshalb legt die Prozedur »tclCreateFunc« (Listing 2a) eine so genannte Display-Liste an. Sie enthält fertige Geometrien, die das Programm später beliebig oft aufrufen darf. Die Verwendung der Display-Liste verbessert die Performance erheblich, denn die Geometrie zu erzeugen dauert je nach Anzahl der Dreiecke 10- bis 1000-mal länger, als sie anzuzeigen.

Listing 2a:
Display-Liste

01 # Startwerte setzen und Display-Liste erzeugen.
02 # Wird beim Erzeugen des Fensters aufgerufen
03 proc tclCreateFunc {toglwin} {
04   # Schwarzer Hintergrund
05   glClearColor 0.0 0.0 0.0 0.0
06 
07   # Ein bischen Tuning
08   glClearDepth 1.0
09   glEnable GL_DEPTH_TEST
10   glShadeModel GL_FLAT
11   glDepthFunc GL_LEQUAL
12   glHint GL_PERSPECTIVE_CORRECTION_HINT GL_NICEST
13 
14   kugel 100 ;# Display-Liste einmalig erzeugen
15 }

Die Prozedur »kugel« (Listing 2b) erzeugt erst eine neue Display-Liste und füllt sie dann - ähnlich wie im ersten Beispiel - mit Dreiecken. Dabei haben die Dreiecke abhängig vom Breitengrad jeweils eine andere Farbe, hierzu verwendet das Skript die Prozedur »hls2rgb« (zu finden auf dem FTP-Server des Linux-Magazins [13]).

Listing 2b: Kugelmodell
erzeugen

01 proc kugel {radius} {
02   set kante 10
03   set ::displayliste [glGenLists 1]
04   glNewList $::displayliste GL_COMPILE
05   for {set l 0} {$l <= 360} {incr l 5} {
06     for {set b -90 } {$b <= 90} {incr b 5} {
07       # Position im Bogenmaß
08       set lr [expr {$l/180.0 * $::PI}]
09       set br [expr {$b/180.0 * $::PI}]
10       # Farbe für das nächste Element setzen
11       set hue [expr {sin($br/3.0)}]
12       eval glColor3f [hls2rgb $hue 1 1]
13 
14       # Dreieck einfügen
15       glBegin GL_TRIANGLES
16       glVertex3f 
17           [expr {$radius*cos($lr)*cos($br)}]
18           [expr {$radius*sin($lr)*cos($br)}]
19           [expr {$radius*sin($br)}]
20       glVertex3f 
21           [expr {$radius*cos($lr)*cos($br)}]
22           [expr {$radius*sin($lr)*cos($br) +$kante}] 
23           [expr {$radius*sin($br)}]
24       glVertex3f 
25           [expr {$radius*cos($lr)*cos($br)}]
26           [expr {$radius*sin($lr)*cos($br)}]
27           [expr {$radius*sin($br) +$kante}]
28       glEnd
29     }
30   }
31   glEndList
32 }
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)