# OpenSceneGraph

OpenSceneGraph un motor gráfico de código abierto usado para el desarrollo de aplicaciones como simulación visual, videojuegos, realidad virtual, visualización científica y modelado 3D.
La plataforma está escrita en C++ estándar usando OpenGL y funciona sobre un gran variedad de sistemas operativos incluyendo Microsoft Windows, Mac OS X, Linux, IRIX, Solaris y FreeBSD.
El desarrollo de OpenScenegraph comenzó en 1998 gracias a Don Burns y Robert Osfield que se unió al proyecto en 1999. Pero el proyecto empezó a tener importancia realmente a partir de 2006 cuando el número de usuarios de la lista de correo excedió de 1500.

## Características

Características de la versión 1.0:
* Implementación del grafo de scenes ampliamente adoptado con un gran número de características
* Compatibilidad con características con un rendimiento cada vez mayor
** Frustum, pequeño con occlusion culling
** Nivel de detalle
** Estado ordenado y actualizado de forma perezosa
** OpenGL con rutas rápidas y las últimas extensiones
** Optimización multi-hilo y de base de datos
* Soporte de OpenGL, desde la 1.1 hasta la 2.0 incluyendo las últimas extensiones
* Soporte de OpenGL Shading Language, desarrollado conjuntamente con 3Dlabs
* Soporte de una gran gama de formatos imágenes 2D y 3D, con los loaders disponibles para formatos como OpenFlight, TerraPage, OBJ, 3DS, JPEG, PNG y GeoTIFF
* Sistemas de partículas
* Soporte de anti-aliased TrueType text
* Soporte de apoyo de objetos del framebuffer, pbuffers y efectos de frame buffer render-to-texture
* Sistema multi-hilo que admite paginación, que puede ser unado con un conjunto de loaders de imágenes 3D
* Generación de terrenos geospaciales a gran escala
* Interfaz genérica que permite a aplicaciones externas realizar consultas en núcleo
* Soporte multi-hilo y configurable para múltiples CPU / GPU de múltiples máquinas
Características de la versión 2.8.3
* Soporte para Mac OS X 10.6 (Snow Leopard)
* Soporte de ImageIO sobre Mac OS X
* Soporte de ficheros 3DS y conversión de ficheros
* Tecnología Autodesk FBX integrada
* Soporte de FFmpeg para la reproducción de archivos de vídeo en aplicaciones 3D, integrado.
* Soporte de archivos con el formato PLY
Características de la versión 2.8.4:
* Soporte de VS2010 build
Características de la versión 3.0.1:
* Soporte en aplicaciones móviles Android y iOS

## Fechas de lanzamiento de las versiones estables

| Versión | Fecha de lanzamiento |
| 2.0.0 | 15 de junio de 2007 de mdy |
| 2.2.0 | 4 de octubre de 2007 de mdy |
| 2.4.0 | 25 de abril de 2008 de mdy |
| 2.6.0 | 5 de agosto de 2008 de mdy |
| 2.6.1 | 2 de octubre de 2008 de mdy |
| 2.8.0 | 12 de febrero de 2009 de mdy |
| 2.8.1 | 19 de mayo de 2009 de mdy |
| 2.8.2 | 28 de julio de 2009 de mdy |
| 2.8.3 | 5 de abril de 2010 de mdy |
| 2.8.4 | 11 de abril de 2011 de mdy |
| 3.0.0 | 28 de junio de 2011 de mdy |
| 3.0.1 | 31 de julio de 2011 de mdy |

## OpenThreads

La plataforma OpenSceneGraph contiene una biblioteca de hilos, la OpenThreads, la cual multiplataforma y muy ligera. Proporcionando una mínima pero completa interfaz para hilos de C++ Orientado a Objetos (OO). Está vagamente inspirado en el modelo el API de hilos de Java, y los POSIX Threads standards.
La arquitectura de OpenThreads está diseñada en torno a modelos de hilos "swappables" que se definen en tiempo de compilación en una biblioteca de objetos compartidos. Es importante señalar que con una buen Factory Method (patrón de diseño), se habría logrado el objetivo de una interfaz genérica, que habría requerido de los cuatro tipos fundamentales (hilos, mutex, barreras y condiciones) en la pila. Sin embargo, debido a los costos asociados a la implementaciones subyacentes de estas construcciones, en concreto en algunas plataformas, esta asignación se consideró inaceptable en el momento de escribir la biblioteca original, y por tanto el patrón de diseño no se ha utilizado.
Por ello, se eligió esta técnica un tanto abstrusa, pero efectiva. Esta técnica utiliza punteros private void para encapsular objetos de datos privados. Los punteros void en realidad apuntan a estructuras de datos concretos, pero le dan una interfaz uniforme al DSO.
La finalidad del diseño de OpenThreads era el construir una implementación optimizada usando la plataforma de optimización multi-procesamiento de las construcciones tales como los métodos utilizados por sproc en IRIX, y los hilos de Windows.

## Ejemplos de uso

Estos productos están desarrollados usando OpenSceneGraph:
* FlightGear (desde la versión 1.9.0)