Zum Inhalt springen

OpenSceneGraph

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 30. April 2021 um 10:30 Uhr durch Sandstorm de (Diskussion | Beiträge) (Features hinzugefügt, aus dem Englischen übersetzt). Sie kann sich erheblich von der aktuellen Version unterscheiden.
OpenSceneGraph

Basisdaten

Entwickler Robert Osfield
Aktuelle Version 3.6.5
(31. Januar 2020)
Betriebssystem Cross-platform
Programmier­sprache C++
Kategorie Wissenschaftliche Visualisierung, Programmbibliothek
Lizenz OpenSceneGraph Public License (LGPL-basiert)
deutschsprachig nein
www.openscenegraph.org

OpenSceneGraph ist ein quelloffenes Szenengraphsystem (SG)[1], das in Echtzeit-Grafikanwendungen wie z. B. FlightGear eingesetzt wird.

OpenSceneGraph wurde in C++ geschrieben, verwendet OpenGL[1] 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.

Geschichte

Das OpenSceneGraph-Projekt wurde 1998 von Don Burns initiiert. Robert Osfield trat dem Projekt im Laufe des Jahres 1999 bei und arbeitete an der Portierung der fertigen Komponenten für Microsoft Windows. Das Projekt wurde im September 1999 Open Source und die offizielle Projekt-Website wurde erstellt. Gegen Ende des Jahres übernahm Osfield das Projekt und begann mit einem umfangreichen Refactoring der bestehenden Codebasis, wobei er den Schwerpunkt auf die Modernisierung legte und moderne C++-Standards und Design Patterns einbezog.

Im April 2001 gründete Robert Osfield unter Berücksichtigung der wachsenden Nutzergemeinde und des öffentlichen Interesses die OpenSceneGraph Professional Services, die kommerziellen Support, Beratung und Schulungen anbieten. Dies markiert die vollständige Professionalisierung des Projekts.

Die erste offizielle stabile Version von OpenSceneGraph war Version 1.0, die 2005 veröffentlicht wurde. Eine erweiterte Version 2.0 folgte 2007 und fügte Unterstützung für Multicore- und Multi-GPU-Systeme, mehrere wichtige NodeKits und die Verwendung des einheitlichen Multiplattform-Build-Systems CMake hinzu. Bücher und Benutzerhandbücher wurden eingeführt.[2]

Seitdem wächst das Projekt schnell und wird immer beliebter. Es gibt mehr als 530 Mitwirkende, die unter der aktuellen stabilen Version unterzeichnet sind, und die offizielle Mailingliste enthält Tausende von Namen.[3]

Im Jahr 2019 wurde das Projekt in eine Wartungsphase überführt, wobei die Hauptentwicklungsarbeit in das Nachfolgeprojekt VulkanSceneGraph verlagert wurde.[4]

Merkmale

Funktionen in Version 1.0:[5]

  • Eine funktionsreiche und weit verbreitete Szenengraphen-Implementierung
  • Unterstützung für leistungssteigernde Features
  1. View Frustum, Small Feature und Occlusion Culling
  2. Detaillierungsgrad
  3. Zustandssortierung und träge Zustandsaktualisierung
  4. Schnelle OpenGL-Pfade und neueste Erweiterungen
  5. Multi-Threading und Datenbank-Optimierung
  • Unterstützung für OpenGL, von 1.1 bis 2.0 einschließlich der neuesten Erweiterungen
  • Eng gekoppelte Unterstützung für OpenGL Shading Language, entwickelt in Zusammenarbeit mit 3Dlabs
  • Unterstützung für eine Vielzahl von 2D-Bild- und 3D-Datenbankformaten, mit Ladeprogrammen für Formate wie OpenFlight, TerraPage, OBJ, 3DS, JPEG, PNG und GeoTIFF
  • Partikel-Effekte
  • Unterstützung für Anti-Aliased TrueType-Text
  • Nahtlose Unterstützung für Framebuffer-Objekte, pbuffers und Framebuffer-Render-to-Texture-Effekte
  • Multi-Threaded-Datenbank-Paging-Unterstützung, die in Verbindung mit allen 3D-Datenbank- und Bildladern verwendet werden kann
  • Ausgelagerte Datenbankgenerierung für große geografische Terrains auf der ganzen Erde
  • Introspektionsunterstützung für Kernbibliotheken, die es externen Anwendungen ermöglicht, über eine generische Schnittstelle alle Klassen im Szenegraphen abzufragen, zu erhalten, zu setzen und zu bearbeiten
  • Multi-Thread- und konfigurierbare Unterstützung für mehrere CPU-/Mehrfach-GPU-Maschinen

Funktionen in Version 2.8.3[6]

  • Unterstützung von Mac OS X 10.6 (Snow Leopard)
  • ImageIO-Unterstützung unter Mac OS X
  • 3DS-Dateiformatexport und Dateikonvertierung
  • Integrierte Autodesk FBX-Technologie
  • Integrierte FFmpeg-Unterstützung für die Anzeige von Videodateiinhalten in 3D-Anwendungen
  • Unterstützung des PLY-Dateiformats

Funktionen in Version 2.8.4:

  • VS2010-Build-Unterstützung

Funktionen in Version 3.0.0:

  • Unterstützung von OpenGL ES 1.1, und OpenGL ES 2.0
  • Unterstützung von OpenGL 3.x und 4.x sowie der zugehörigen OpenGL-Erweiterungen
  • Unterstützung für Android auf Tablets und Telefonen
  • Unterstützung für iOS auf Tablets und Telefonen (Anwendungen für Endanwender wurden bereits im App Store akzeptiert)
  • Einführung der Anwendung Present3D für immersive 3D-Präsentationen
  • Neue erweiterbare Serialisierer, die die neuen nativen Formate .osgb binary, .osgt ascii und .osgx xml file bereitstellen
  • Neue generalisierte serialisierbare Metadaten-Architektur
  • Neue osgQt-Bibliothek, die eine einfache Integration von !OpenSceneGraph mit Qt ermöglicht, einschließlich Web-Browsing über QWebKit.
  • Neues FBX-Plugin basierend auf dem Audodesk FBX DSK, das das Lesen des .fbx 3D-Authoring- und Interchange-Formats ermöglicht
  • Neues directshow-Plugin für den Umgang mit Filmen unter Windows
  • Neues pov-Plugin zum Exportieren einer Szene in das POV-Ray-Format, das die Verwendung von POV-Ray für fotorealistisches Raytracing ermöglicht
  • Neues ply-Plugin zum Lesen von ply-Dateien
  • Überarbeitetes 3ds-Plugin zum Lesen und Schreiben von .3ds-Dateien
  • Überarbeitetes dxf-Plugin für das Lesen und Schreiben von .dxf-Dateien
  • Unterstützung für Cocoa und 64bit OSX build

Architektur

Eine Übersicht der OpenSceneGraph 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.

Einzelnachweise

  1. a b Anne Ruas, Christopher Gold: Headway in Spatial Data Handling:13th International Symposium on Spatial Data Handling. Springer, 2008, ISBN 978-3-540-68566-1, S. 370 (google.com).
  2. Martz, P.: OpenSceneGraph Quick Start Guide. Louisville, USA, 2007.
  3. http://www.openscenegraph.org/projects/osg/wiki/Support/History
  4. VulkanSceneGraph Project. 11. Dezember 2018, abgerufen am 29. April 2021.
  5. OSG News. 19. Februar 2010, archiviert vom Original (nicht mehr online verfügbar) am 9. Juni 2011; abgerufen am 20. Februar 2010.
  6. OpenSceneGraph Adds New Features to 3D Graphics Applications. 5. April 2010, archiviert vom Original am 15. April 2010; abgerufen am 10. April 2010.