OpenSceneGraph - OpenSceneGraph

OpenSceneGraph
Osglogo2.0.png
Stabile Version
3.6.5 / 31. Januar 2020 ; vor 18 Monaten ( 2020-01-31 )
Repository Bearbeite dies bei Wikidata
Geschrieben in C++
Betriebssystem Plattformübergreifend
Typ 3D-Grafik
Lizenz OpenSceneGraph Public License ( LGPL- basiert)
Webseite www .openscenegraph .org
www .openscenegraph .com

Open ist eine Open-Source - 3D - Grafik - Schnittstelle für Anwendungsprogrammierung (Bibliothek oder Rahmen), die von Anwendungsentwicklern in Bereichen wie verwendet visuelle Simulation , Computerspiele , virtuelle Realität , wissenschaftliche Visualisierung und Modellierung .

Das Toolkit ist in Standard- C++ unter Verwendung von OpenGL geschrieben und läuft auf einer Vielzahl von Betriebssystemen, darunter Microsoft Windows , macOS , Linux , IRIX , Solaris und FreeBSD . Seit Version 3.0.0 unterstützt OpenSceneGraph auch die Anwendungsentwicklung für mobile Plattformen, nämlich iOS und Android .

Ab 2021 wird das Projekt vom VulkanSceneGraph-Projekt abgelöst, einer Vulkan-basierten Bibliothek. OpenSceneGraph befindet sich seit 2019 in der Wartungsphase.

Geschichte

Das OpenSceneGraph-Projekt wurde 1998 von Don Burns initiiert. 1999 trat Robert Osfield dem Projekt bei und arbeitete an der Portierung fertiger Komponenten für Microsoft Windows. Das Projekt wurde im September 1999 Open Source und die offizielle Projektwebsite wurde erstellt. Gegen Ende des Jahres übernahm Osfield das Projekt und begann mit einem umfassenden Refactoring der bestehenden Codebasis, wobei der Schwerpunkt auf der Modernisierung lag und moderne C++-Standards und Design-Patterns berücksichtigt wurden .

Im April 2001 gründete Robert Osfield unter Berücksichtigung der wachsenden Benutzergemeinschaft und des öffentlichen Interesses OpenSceneGraph Professional Services, die kommerziellen Support, Beratungs- und Schulungsdienste bereitstellten. 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, die Unterstützung für Multi-Core- und Multi-GPU-Systeme, mehrere wichtige NodeKits und die Verwendung des einheitlichen Multiplattform-Build-Systems CMake hinzufügte . Bücher und Benutzerhandbücher wurden eingeführt.

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.

Im Jahr 2019 wurde das Projekt in eine Wartungsphase überführt, wobei der Hauptentwicklungsaufwand auf das Nachfolgeprojekt VulkanSceneGraph gelenkt wurde.

Merkmale

Image
Überblick über die openscenegraph-Architektur.

Funktionen in Version 1.0:

  • Eine funktionsreiche und weit verbreitete Szenegraph - Implementierung
  • Unterstützung für leistungssteigernde Funktionen
    1. Ansicht von Frustum , kleinem Merkmal und Okklusions-Kulling
    2. Detaillierungsgrad
    3. Statussortierung und träge Statusaktualisierung
    4. OpenGL Fast Paths und neueste Erweiterungen
    5. Multithreading und Datenbankoptimierung
  • 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 verfügbaren Loadern für Formate wie OpenFlight , TerraPage , OBJ , 3DS , JPEG , PNG und GeoTIFF
  • Partikeleffekte
  • Unterstützung für geglätteten TrueType- Text
  • Nahtlose Unterstützung für Framebuffer- Objekte, Pbuffer und Frame-Buffer-Render-to-Texture-Effekte
  • Multithreaded-Datenbank-Paging-Unterstützung, die in Verbindung mit allen 3D-Datenbank- und Bildladern verwendet werden kann
  • Generierung großräumiger, ausgelagerter Datenbanken für die ganze Erde
  • Introspection-Unterstützung für Kernbibliotheken, die es externen Anwendungen ermöglicht, alle Klassen im Szenengraphen über eine generische Schnittstelle abzufragen, abzurufen, einzustellen und zu bearbeiten
  • Multithreaded und konfigurierbare Unterstützung für mehrere CPU/mehrere GPU-Maschinen

Funktionen in Version 2.8.3

  • Unterstützung für 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 zum Anzeigen 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:

  • OpenGL ES 1.1- und OpenGL ES 2.0-Unterstützung
  • Unterstützung von OpenGL 3.x und 4.x zusammen mit den zugehörigen OpenGL-Erweiterungen
  • Unterstützung für Android auf Tablets und Smartphones
  • Unterstützung für IOS auf Tablets und Telefonen (Endbenutzeranwendungen wurden bereits im App Store akzeptiert)
  • Einführung der Present3D-Anwendung für immersive 3D-Präsentationen
  • Neue erweiterbare Serialisierer, die neue native Formate für .osgb-Binärdateien, .osgt-ASCII- und .osgx-XML-Dateiformate bereitstellen
  • Neue generalisierte serialisierbare Metadatenarchitektur
  • Neue osgQt-Bibliothek, die eine einfache Integration von !OpenSceneGraph in Qt ermöglicht, einschließlich Webbrowsing über QWebKit.
  • Neues FBX-Plugin basierend auf dem Audodesk FBX DSK, das das Lesen des .fbx 3D-Authoring- und Austauschformats ermöglicht
  • Neues Directshow-Plugin zur Handhabung von 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 zum Lesen und Schreiben von .dxf-Dateien
  • Unterstützung für Cocoa- und 64-Bit-OSX-Build

Versionsverlauf der stabilen Version

Ausführung Veröffentlichungsdatum
3.0 5. Februar 2013
3.2 24. Juli 2013
3.4 20. Juli 2015
3.4.1 28. August 2017
3.6 7. April 2018
3.6.1 28. Mai 2018
3.6.2 29. Juni 2018
3.6.3 14. September 2018
3.6.4 26. Juli 2019
3.6.5 31. Januar 2020

Die Architektur

Die Bibliotheksarchitektur kann in drei Hauptuntergruppen unterteilt werden – die OpenSceneGraph-Kernbibliothek, 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 . Es enthält Klassen, die verschiedene Arten von Knoten , Szenengeometrie, OpenGL- Zustandsabstraktion, geometrische Transformationen sowie mathematische Klassen für 2D- und 3D- Vektor- und Matrixoperationen darstellen . Eine erweiterte Speicherverwaltung ist ebenfalls enthalten.

OpenThreads

Das OpenSceneGraph-Projekt enthält eine Threading-Bibliothek, OpenThreads , die ein schlankes , plattformübergreifendes Thread- Modell ist . Es soll eine minimale und vollständige objektorientierte (OO) Thread-Schnittstelle für C++- Programmierer bereitstellen . Es basiert lose auf der Java- Thread-API und den POSIX-Threads-Standards .

Die Architektur von OpenThreads ist um "austauschbare" Thread-Modelle herum entworfen, die zur Kompilierzeit in einer Shared Object Library definiert werden . Es ist wichtig anzumerken, dass, obwohl ein Fabrikmusterentwurf verwendet werden könnte, um das Ziel der generischen Schnittstelle zu erreichen , der Programmierer erforderlich gewesen wäre, jeden der 4 grundlegenden Typen (Thread, Mutex, Barrier und Bedingung) zuzuweisen Haufen . Aufgrund der Kosten, die mit der Heap-Zuweisung der zugrunde liegenden konkreten Implementierungen dieser Konstrukte auf einigen Plattformen verbunden sind, wurde eine solche Zuweisung zum Zeitpunkt der ursprünglichen Erstellung dieser Bibliothek als inakzeptabel erachtet, und daher wurde das Factory-Muster nicht verwendet.

Stattdessen wurde eine etwas abstruse - aber effektive - Technik gewählt, um das notwendige Daten-/Implementierungs-Verbergen bereitzustellen . Diese Technik verwendet private void-Zeiger , um private Objektdaten zu kapseln. Die void-Zeiger zeigen tatsächlich auf konkrete Datenstrukturen, geben aber dem dso eine einheitliche Schnittstelle.

Das Designziel von OpenThreads besteht darin, optimierte Implementierungen mit plattformoptimierten Multi-Processing-Konstrukten zu konstruieren, wie z. B. die in IRIX verwendeten Sproc- Methoden und Windows-Threads.

osgUtil

osgUtil enthält Rendering- Backend- Funktionen und Dienstprogramme, die sich um das Durchlaufen von Szenengraphen , die Rendering- Optimierung und die Umwandlung der Szene in einen Stream von OpenGL- API-Aufrufen kümmern . Es bietet auch Mittel für die grundlegende Interaktion mit der Szene, wie z. B. die Objektauswahl.

osgDB

Diese Bibliothek hat die Aufgabe, 3D-Modelldateien zu laden. Es unterstützt viele Manipulatoren für 2D/3D- Datenformate . Mehr als 50 verschiedene Formate werden unterstützt - am gebräuchlichsten sind 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 stehen Exportprogramme in das .osg-Format zur Verfügung .

Zu den unterstützten Bildformaten gehören .rgb, .gif , .jpg , .png , .tiff , .pic, .bmp , .dds , .tga und quicktime .

Dieses Modul bietet auch die Abstraktion von E/A-Geräten. Die anderen Dateiformat-Loader-Plugins sind bei osgDB registriert.

osgGA

Dies ist eine GUI-Abstraktionsbibliothek, die für verschiedene Plattformen erforderlich ist.

osgViewer

Die osgViewer Library bietet eine schnelle und einfache Möglichkeit , die Grafikszene zu visualisieren . Es ist auch eine plattformunabhängige Abstraktion für verschiedene Fenstersystemschnittstellen .

osgProduzent

Das OSG wird auch mit einem osgProducer geliefert, der nur ein plattformunabhängiger Viewer ist, der mehrere Grafikkontexte und Multithreading unterstützt.

NodeKits

Die Projektverteilung enthält auch eine Vielzahl sogenannter NodeKits . Dies sind Lösungen für häufige Probleme und häufig verwendete fortschrittlichere 3D-Anwendungskomponenten und Grafikalgorithmen. Zu den bedeutendsten gehören

  • osgAnimation — Verwendung, Animation und Morphing von Skelettmodellen.
  • osgFX — Spezialeffekte und Bildnachbearbeitung.
  • osgManipulator — Interaktive 3D-Szenenbearbeitung.
  • osgParticle – Erweiterte Nutzung des Partikelsystems .
  • osgQt — Integration mit dem Qt-Toolkit und Einbindung von QtGUI-Elementen in OSG-Anwendungen.
  • osgShadow — Framework für Schatten-Rendering-Techniken.
  • osgTerrain — Umfangreiches Terrain-Rendering .
  • osgText — Hochwertige Antialiasing-Fonts, TrueType- und FreeType-Font-Unterstützung.
  • osgVolume — Volume-Rendering und volumetrische Datenmanipulation.
  • osgWidget — Einfache GUI- Erstellung.

Empfang und Annahme

OpenSceneGraph bietet keine Funktionalität für eine höhere "Gaming"-Logik, es ist ein reines Rendering-Tool. Es gibt mehrere vollwertige Engines für die Erstellung von Computerspielen (oder sogenannten Serious Games ), die OSG als Basis für das Grafik-Rendering verwenden, wobei das gebräuchlichste Framework Delta3D ist .

Es gibt eine Vielzahl von Softwareprodukten, die auf OpenSceneGraph aufbauen. unter anderem Virtual Terrain Project und ViewTec TerrainView . Die Liste der OSG-Benutzer enthält Unternehmen wie Boeing , NASA , FlightGear , Norcontrol und viele andere.

Auf der Ebene der Open-Source-Community haben mehrere Projekte OSG als Rendering-Backend übernommen:

  • FlightGear (Flugsimulationssoftware)
  • OpenMW (Opensource-Engine für Morrowind)

OpenSceneGraph hat eine Javascript/WebGL-Implementierung namens OSG.JS erhalten , die von vielen Online-3D-Szenenbetrachtern einschließlich Sketchfab und Clara.io verwendet wird .

Eine Umhüllung von C++ nach Javascript durch Emscripten OGStudio wird derzeit ebenfalls entwickelt.

Unter anderen Produkten, die OSG verwenden, sind zu erwähnen:

Siehe auch

Verweise

Externe Links