Zum Inhalt springen

OpenSceneGraph

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 28. April 2021 um 16:08 Uhr durch Sandstorm de (Diskussion | Beiträge) (Architektur: Abschnitt mit Informationen aus der englischen Wikipedia ergänzt). 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), 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

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.