OpenSceneGraph
OpenSceneGraph
| |
---|---|
![]() | |
![]() | |
Basisdaten
| |
Entwickler | Robert Osfield |
Aktuelle Version | 3.6.5 (31. Januar 2020) |
Betriebssystem | Cross-platform |
Programmiersprache | C++ |
Kategorie | Wissenschaftliche Visualisierung, Programmbibliothek |
Lizenz | OpenSceneGraph Public License (LGPL-basiert) |
deutschsprachig | nein |
www.openscenegraph.org |
OpenSceneGraph ist ein quelloffenes Szenengraphsystem (SG), das in Echtzeit-Grafikanwendungen wie z. B. FlightGear eingesetzt wird.
OpenSceneGraph wurde in C++ geschrieben, verwendet OpenGL als Grundlage für die 3D-Grafik und läuft auf einer Vielzahl von Betriebssystemen, unter anderem Microsoft Windows, Mac OS X, Linux, IRIX, Solaris und FreeBSD.
Obwohl es einen ähnlichen Namen trägt wie das Szenengraphsystem OpenSG und etwa zur gleichen Zeit begonnen wurde, handelt es sich um zwei verschiedene und voneinander unabhängige Projekte.
Die Entwicklung von OpenSceneGraph begann im Jahre 1998 durch Don Burns. 1999 stieß Robert Osfield dazu. Das Projekt erfasst keine Downloadraten und besitzt keine Möglichkeit die Anzahl der aktiven Benutzer zu messen. Jedoch ist die Anzahl der Abonnenten der OSG-Mailing-List auf mehr als 1500 Leser im Jahr 2006 gestiegen.
Architektur

Hier ist eine Übersicht der OpenSceneGraph-Architektur: Die Architektur der Bibliothek kann in drei Hauptteile unterteilt werden - die Kernbibliothek OpenSceneGraph, osgViewer und eine Reihe von NodeKits.
Kern
Die Basis der OpenSceneGraph-Bibliothek kann weiter in vier Hauptmodule unterteilt werden.
osg
Der Kern von OpenSceneGraph stellt Klassen und Methoden zur Konstruktion und Manipulation des Szenengraphen bereit. Er enthält Klassen, die verschiedene Knotentypen, Szenengeometrie, OpenGL-Zustandsabstraktion, geometrische Transformationen sowie mathematische Klassen für 2D- und 3D-Vektor- und Matrixoperationen repräsentieren. Eine erweiterte Speicherverwaltung ist ebenfalls enthalten.
OpenThreads
Das OpenSceneGraph-Projekt enthält eine Threading-Bibliothek, OpenThreads, die ein leichtgewichtiges, plattformübergreifendes Thread-Modell darstellt. Es soll eine minimale und vollständige objektorientierte (OO) Thread-Schnittstelle für C++-Programmierer bieten. Es ist lose an die Java-Thread-API und die POSIX-Thread-Standards angelehnt.
Die Architektur von OpenThreads basiert auf "austauschbaren" Thread-Modellen, die zur Kompilierzeit in einer Shared Object Library definiert werden. Es ist wichtig anzumerken, dass zwar ein Factory-Pattern-Design hätte verwendet werden können, um das Ziel einer generischen Schnittstelle zu erreichen, aber dies hätte erfordert, dass der Programmierer jeden der 4 grundlegenden Typen (Thread, Mutex, Barrier und Condition) auf dem Heap zuweist. Aufgrund der Kosten, die mit der Heap-Allokation der zugrundeliegenden konkreten Implementierungen dieser Konstrukte auf einigen Plattformen verbunden sind, wurde eine solche Allokation zu der Zeit, als diese Bibliothek ursprünglich geschrieben wurde, als inakzeptabel erachtet, und daher wurde das Factory Pattern nicht verwendet.
Stattdessen wurde eine etwas abstruse - aber effektive - Technik gewählt, um die notwendigen Daten/Implementierungen zu verstecken. Diese Technik verwendet private Void-Zeiger, um die privaten Daten des Objekts zu kapseln. Die Void-Pointer zeigen eigentlich auf konkrete Datenstrukturen, bieten aber eine einheitliche Schnittstelle zum dso.
Das Designziel von OpenThreads ist es, optimierte Implementierungen zu erstellen, die plattformoptimierte Multiprocessing-Konstrukte verwenden, wie z. B. die auf IRIX verwendeten Sproc-Methoden und Windows-Threads.
osgUtil
osgUtil enthält Rendering-Backend-Funktionalität und Dienstprogramme, die sich um die Durchquerung des Szenengraphen, die Rendering-Optimierung und die Umwandlung der Szene in einen Strom von OpenGL-Aufrufen kümmern. Es bietet auch Mittel zur grundlegenden Interaktion mit der Szene, wie z. B. die Auswahl von Objekten.
osgDB
OpenSceneGraph kommt auch mit einer großen Sammlung von Datenbankladern und vielen Manipulatoren für 2D/3D-Datenformate. Es werden mehr als 50 verschiedene Formate unterstützt - die gängigsten 3D-Datenformate, wie COLLADA (.dae), LightWave (.lwo), Wavefront (.obj), OpenFlight (.flt), 3D Studio Max (.3ds), DirectX (.x) und viele andere. OpenSceneGraph bietet auch ein eigenes natives ASCII-.osg-Format. Für Blender, Maya und 3D Studio MAX gibt es Exporter in das .osg-Format.
Unterstützte Bildformate sind .rgb, .gif, .jpg, .png, .tiff, .pic, .bmp, .dds, .tga und quicktime.
Dieses Modul bietet auch die Abstraktion von I/O-Geräten.
osgViewer
Die osgViewer-Bibliothek bietet eine schnelle und einfache Möglichkeit zur Visualisierung der Grafikszene. Es ist auch eine plattformunabhängige Abstraktion für verschiedene Fenstersystem-Schnittstellen.
NodeKits
Die Projektdistribution enthält auch eine Vielzahl von sogenannten NodeKits. Dabei handelt es sich um Lösungen für häufige Probleme und häufig verwendete, fortgeschrittenere 3D-Anwendungskomponenten und Grafikalgorithmen. Zu den wichtigsten gehören
- osgAnimation - Verwendung von Skelettmodellen, Animation und Morphing.
- osgFX - Spezialeffekte und Bildnachbearbeitung.
- osgManipulator - Interaktive 3D-Szenenmanipulation.
- osgParticle - Erweiterte Nutzung des Partikelsystems.
- osgQt - Integration mit Qt-Toolkit und Einbindung von QtGUI-Elementen in OSG-Anwendungen.
- osgShadow - Framework für Schatten-Rendering-Techniken.
- osgTerrain - Umfangreiches Terrain-Rendering.
- osgText - Hochwertige Antialiasing-Schriften, Unterstützung von TrueType- und FreeType-Schriften.
- osgVolume - Volumen-Rendering und Manipulation volumetrischer Daten.
- osgWidget - Einfache GUI-Erstellung.