OpenSceneGraph es una interfaz de programación de aplicaciones (biblioteca o marco) de gráficos 3D de código abierto , [ 2 ] utilizada por desarrolladores de aplicaciones en campos como simulación visual , juegos de computadora , realidad virtual , visualización científica y modelado .
El conjunto de herramientas está escrito en C++ estándar usando OpenGL , [ 2 ] y se ejecuta en una variedad de sistemas operativos , incluidos Microsoft Windows , macOS , Linux , IRIX , Solaris y FreeBSD . Desde la versión 3.0.0, OpenSceneGraph también admite el desarrollo de aplicaciones para plataformas móviles, a saber, iOS y Android .
A partir de 2021, el proyecto está siendo sucedido por el proyecto VulkanSceneGraph, una biblioteca basada en Vulkan. [ 3 ] OpenSceneGraph está en fase de mantenimiento desde 2019.
Historia
El proyecto OpenSceneGraph fue iniciado por Don Burns en 1998. Robert Osfield se unió al proyecto en 1999, trabajando en la adaptación de componentes terminados para Microsoft Windows. El proyecto se convirtió en código abierto en septiembre de 1999 y se creó el sitio web oficial. Hacia finales de ese año, Osfield asumió la dirección del proyecto y comenzó una extensa refactorización del código existente, haciendo hincapié en la modernización y adoptando los estándares y patrones de diseño modernos de C++ .
En abril de 2001, teniendo en cuenta la creciente comunidad de usuarios y el interés del público, Robert Osfield creó OpenSceneGraph Professional Services, que ofrece servicios comerciales de soporte, consultoría y formación. Esto supone la profesionalización total del proyecto.
La primera versión estable oficial de OpenSceneGraph fue la versión 1.0, lanzada en 2005. En 2007 se lanzó una versión extendida, la 2.0, que añadió compatibilidad con sistemas multinúcleo y multi-GPU, varios NodeKits importantes y el uso del sistema de compilación multiplataforma unificado CMake . Se introdujeron libros y manuales de usuario. [ 4 ]
El proyecto ha crecido rápidamente y se ha vuelto cada vez más popular desde entonces. Hay más de 530 colaboradores registrados en la versión estable actual, y la lista de correo oficial contiene miles de nombres. [ 5 ]
En 2019, el proyecto pasó a una fase de mantenimiento, y el esfuerzo principal de desarrollo se destinó a su proyecto sucesor, VulkanSceneGraph. [ 6 ]
Características

Características de la versión 1.0: [ 7 ]
- Una implementación de grafo de escena rica en funciones y ampliamente adoptada.
- Compatibilidad con funciones que mejoran el rendimiento
- Vista del tronco de cono , características pequeñas y eliminación de oclusiones
- Nivel de detalle
- Clasificación de estados y actualización diferida de estados
- Rutas rápidas de OpenGL y extensiones más recientes
- Multiprocesamiento y optimización de bases de datos
- Compatibilidad con OpenGL, desde la versión 1.1 hasta la 2.0, incluyendo las últimas extensiones.
- Soporte estrechamente integrado para el lenguaje de sombreado OpenGL, desarrollado en colaboración con 3Dlabs.
- Compatibilidad con una amplia gama de formatos de imágenes 2D y bases de datos 3D, con cargadores disponibles para formatos como OpenFlight , TerraPage , OBJ , 3DS , JPEG , PNG y GeoTIFF.
- Efectos de partículas
- Compatibilidad con texto TrueType suavizado
- Compatibilidad perfecta con objetos framebuffer , pbuffers y efectos de renderizado de framebuffer a textura.
- Compatibilidad con paginación de bases de datos multihilo, que se puede utilizar junto con todos los cargadores de imágenes y bases de datos 3D.
- Generación de bases de datos geoespaciales paginadas a gran escala para todo el terreno terrestre
- Soporte de introspección para bibliotecas principales que permite a las aplicaciones externas consultar, obtener, establecer y operar en todas las clases del grafo de escena, a través de una interfaz genérica.
- Soporte multihilo y configurable para máquinas con múltiples CPU/GPU.
Características de la versión 2.8.3 [ 8 ]
- Compatibilidad con Mac OS X 10.6 (Snow Leopard)
- Compatibilidad con ImageIO en Mac OS X
- Exportación y conversión de archivos en formato 3DS
- Tecnología FBX integrada de Autodesk
- Soporte integrado para FFmpeg para la visualización de contenido de archivos de vídeo en aplicaciones 3D.
- Compatibilidad con el formato de archivo PLY
Características de la versión 2.8.4: [ 9 ]
- Compatibilidad con compilaciones de VS2010
Características de la versión 3.0.0: [ 10 ]
- Compatibilidad con OpenGL ES 1.1 y OpenGL ES 2.0.
- Compatibilidad con OpenGL 3.x y 4.x, junto con las extensiones OpenGL asociadas.
- Compatibilidad con Android en tabletas y teléfonos.
- Compatibilidad con iOS en tabletas y teléfonos (las aplicaciones para usuarios finales ya han sido aceptadas en la App Store).
- Introducción a la aplicación Present3D para presentaciones 3D inmersivas.
- Nuevos serializadores extensibles que proporcionan nuevos formatos nativos de archivo binario .osgb, ASCII .osgt y XML .osgx.
- Nueva arquitectura de metadatos serializables generalizada
- Nueva biblioteca osgQt que facilita la integración de !OpenSceneGraph con Qt, incluyendo la navegación web a través de QWebKit.
- Nuevo plugin FBX basado en el DSK FBX de Autodesk que permite leer el formato de creación e intercambio 3D .fbx.
- Nuevo plugin DirectShow para reproducir películas en Windows.
- Nuevo plugin de POV para exportar una escena al formato POV-Ray, lo que permite usar POV-Ray para realizar trazado de rayos fotorrealista.
- Nuevo plugin ply para leer archivos ply
- Plugin 3ds renovado para la lectura y escritura de archivos .3ds
- Plugin dxf renovado para leer y escribir archivos .dxf.
- Compatibilidad con Cocoa y compilación de OSX de 64 bits
Historial de lanzamientos de versiones estables
Arquitectura
La arquitectura de la biblioteca se puede dividir en tres subconjuntos principales: la biblioteca central OpenSceneGraph, osgViewer y un conjunto de NodeKits.
Centro
La base de la biblioteca OpenSceneGraph se puede dividir a su vez en cuatro módulos principales.
osg
El núcleo de OpenSceneGraph proporciona clases y métodos para la construcción y manipulación del grafo de escena . Contiene clases que representan diversos tipos de nodos , geometría de escena, abstracción de estado de OpenGL , transformaciones geométricas , así como clases matemáticas para operaciones vectoriales y matriciales en 2D y 3D. También incluye gestión avanzada de memoria.
OpenThreads
El proyecto OpenSceneGraph incluye una biblioteca de subprocesos, OpenThreads , que es un modelo de subprocesos ligero y multiplataforma . Su objetivo es proporcionar una interfaz de subprocesos orientada a objetos (OO) mínima y completa para programadores de C++ . Está inspirada, en líneas generales, en la API de subprocesos de Java y en los estándares POSIX Threads .
La arquitectura de OpenThreads está diseñada en torno a modelos de subprocesos "intercambiables" que se definen en tiempo de compilación en una biblioteca de objetos compartidos . Es importante destacar que, si bien se podría haber utilizado un diseño de patrón de fábrica para lograr el objetivo de una interfaz genérica , esto habría requerido que el programador asignara cada uno de los cuatro tipos fundamentales (Thread, Mutex, Barrier y Condition) en el montón . Debido al costo asociado con la asignación en el montón de las implementaciones concretas subyacentes de estas construcciones en algunas plataformas, dicha asignación se consideró inaceptable cuando se escribió originalmente esta biblioteca, por lo que no se utilizó el patrón de fábrica.
En cambio, se optó por una técnica algo compleja, pero eficaz, para ocultar los datos y la implementación . Esta técnica utiliza punteros void privados para encapsular los datos privados de los objetos. Los punteros void apuntan a estructuras de datos concretas, pero proporcionan una interfaz uniforme al DSO.
El objetivo de diseño de OpenThreads es construir implementaciones optimizadas utilizando construcciones de multiprocesamiento optimizadas para la plataforma, como los métodos sproc utilizados en IRIX y los subprocesos de Windows.
osgUtil
osgUtil contiene funcionalidades y utilidades de backend de renderizado que se encargan del recorrido del grafo de escena , la optimización del renderizado y la transformación de la escena en una secuencia de llamadas a la API de OpenGL . También proporciona medios para la interacción básica con la escena, como la selección de objetos.
osgDB
Esta biblioteca se encarga de cargar archivos de modelos 3D. Admite manipuladores de numerosos formatos de datos 2D/3D . Se admiten más de 50 formatos diferentes; los más comunes son los formatos de datos 3D, como COLLADA (.dae), LightWave (.lwo), Wavefront (.obj), OpenFlight (.flt), 3D Studio Max (.3ds), DirectX (.x) y muchos otros. OpenSceneGraph también ofrece su propio formato nativo ASCII .osg. Existen exportadores al formato .osg disponibles para Blender , Maya y 3D Studio Max.
Los formatos de imagen compatibles incluyen .rgb, .gif , .jpg , .png , .tiff , .pic, .bmp , .dds , .tga y quicktime .
Este módulo también proporciona abstracción de dispositivos de E/S. Los demás complementos de carga de formatos de archivo están registrados en osgDB.
osgGA
Se trata de una biblioteca de abstracción de interfaz gráfica de usuario (GUI) necesaria para diferentes plataformas.
osgViewer
La biblioteca osgViewer proporciona una forma rápida y sencilla de visualizar la escena gráfica. Además, es una abstracción independiente de la plataforma para diversas interfaces de sistemas de ventanas .
osgProductor
El OSG también se distribuye con un osgProducer que es simplemente un visor independiente de la plataforma que admite múltiples contextos gráficos y multihilo. [ 16 ] [ 17 ]
NodeKits
La distribución del proyecto también contiene una variedad de los llamados NodeKits . Estos son soluciones a problemas comunes y componentes de aplicaciones 3D y algoritmos gráficos más avanzados de uso frecuente. Entre los más importantes se encuentran:
- osgAnimation — Uso, animación y transformación de modelos esqueléticos.
- osgFX — Efectos especiales y postprocesamiento de imágenes.
- osgManipulator: manipulación interactiva de escenas 3D.
- osgParticle — Uso avanzado del sistema de partículas .
- osgQt: Integración con el kit de herramientas Qt e incorporación de elementos QtGUI en aplicaciones OSG.
- osgShadow — Marco de trabajo para técnicas de renderizado de sombras.
- osgTerrain — Renderizado de terreno extenso .
- osgText: fuentes suavizadas de alta calidad, compatibles con fuentes TrueType y FreeType.
- osgVolume: representación de volumen y manipulación de datos volumétricos.
- osgWidget — Creación sencilla de interfaz gráfica de usuario .
Recepción y adopción
OpenSceneGraph no proporciona ninguna funcionalidad para la lógica de "juegos" más avanzada; es una herramienta exclusivamente de renderizado. Existen varios motores completos para la creación de videojuegos (o los llamados juegos serios ) que utilizan OSG como base para el renderizado de gráficos, siendo Delta3D el framework más común .
Existe una gran variedad de productos de software basados en OpenSceneGraph; entre otros, Virtual Terrain Project y ViewTec TerrainView . La lista de usuarios de OSG incluye empresas como Boeing , NASA , FlightGear , Norcontrol y muchas otras. [ 18 ] [ 19 ] [ 20 ] [ 21 ] [ 22 ]
En el ámbito de la comunidad de código abierto, varios proyectos han adoptado OSG como motor de renderizado:
- FlightGear (software de simulación de vuelo)
- OpenMW (recreación de motor de código abierto para Morrowind )
OpenSceneGraph ha recibido una implementación en javascript/WebGL llamada OSG.JS que utilizan muchos visores de escenas 3D en línea, incluidos Sketchfab y Clara.io .
Actualmente también se está desarrollando una herramienta para convertir C++ a JavaScript mediante Emscripten OGStudio .
Entre otros productos que utilizan OSG, cabe mencionar:
- Editor de escenas OSG 3D de Remo
Véase también
Referencias
- ↑ " Versiones estables" . www.openscenegraph.com
- 1 2 Anne Ruas; Christopher Gold (2008). Avances en el manejo de datos espaciales: XIII Simposio Internacional sobre Manejo de Datos Espaciales . Springer. pág. 370. ISBN 978-3-540-68566-1.
- ↑ "Proyecto VulkanSceneGraph" . openscenegraph.github.io . Consultado el 5 de julio de 2021 .
- ↑ Martz, P.: Guía de inicio rápido de OpenSceneGraph. Louisville, EE. UU., 2007.
- ↑ "Soporte/Historial - osg" . openscenegraph.org . Archivado del original el 26 de mayo de 2015.
- ↑ " Proyecto VulkanSceneGraph" . www.openscenegraph.com
- ↑ "Noticias de OSG" . openscenegraph.org . Archivado del original el 9 de junio de 2011. Consultado el 20 de febrero de 2010 .
- ↑ "OpenSceneGraph añade nuevas funciones a las aplicaciones de gráficos 3D" . 5 de abril de 2010. Archivado del original el 15 de abril de 2010.
- ↑ http://www.openscenegraph.org/svn/osg/OpenSceneGraph/tags/OpenSceneGraph-2.8.4/NEWS.txt
- ↑ http://www.openscenegraph.org/svn/osg/OpenSceneGraph/tags/OpenSceneGraph-3.0.0/NEWS.txt
- ↑ Torres, Jordi. "Lanzamiento de OpenSceneGraph 3.0" . www.openscenegraph.org . Consultado el 23 de septiembre de 2017 .
- ↑ "Lanzamiento de OpenSceneGraph 3.2" . openscenegraph.github.io . Consultado el 23 de septiembre de 2017 .
- ↑ "Lanzamiento de OpenSceneGraph-3.4" . openscenegraph.org . Consultado el 23 de septiembre de 2017 .
- ↑ "Lanzamiento de OpenSceneGraph-3.4.1" . openscenegraph.org . Consultado el 23 de septiembre de 2017 .
- ↑ "Lanzamiento de OpenSceneGraph-3.6" . openscenegraph.org . 7 de abril de 2018. Consultado el 14 de agosto de 2018 .
- ↑ Aylett, Ruth. "Introducción a Open Scene Graph" (PDF) . Universidad Heriot Watt .
- ↑ "Introducción a OpenSceneGraph" . openscenegraph.sourceforge.net . Consultado el 5 de julio de 2021 .
- ↑ "Casos de uso" . www.openscenegraph.com .
- ↑ "OpenSceneGraph" . openscenegraph.github.io . Consultado el 13 de marzo de 2024 .
- ↑ "Proyecto de terreno virtual" . vterrain.org .
- ↑ "ViewTec Inc. - Productos" . www.viewtec.net . Archivado del original el 28 de febrero de 2009.
- ↑ "Delta3dengine 2023" . easd-design.com . Consultado el 13 de marzo de 2024 .
Enlaces externos
- www.openscenegraph.org
- web oficial del proyectositio - Binarios OSG de AlphaPixel : binarios precompilados para Windows, Mac y Linux (x86 y x64).
- SigmaOSG - Tutoriales de OpenSceneGraph (contiene todo el material anterior de OSGHelp del sitio web OSGHelp ya retirado)
- Scenegraphs y OpenScenegraph para el desarrollo de software 3D
- OpenSceneGraph : página web con información sobre la biblioteca en www.OpenGL.org (una de las cuatro bibliotecas promocionadas).
- API de grafos de escena 3D