OpenSceneGraph - OpenSceneGraph

OpenSceneGraph
Osglogo2.0.png
Versão estável
3.6.5 / 31 de janeiro de 2020 ; 18 meses atrás ( 2020-01-31 )
Repositório Edite isso no Wikidata
Escrito em C ++
Sistema operacional Plataforma cruzada
Modelo Gráficos 3D
Licença Licença Pública OpenSceneGraph ( baseada em LGPL )
Local na rede Internet www .openscenegraph .org
www .openscenegraph .com

OpenSceneGraph é uma interface de programação de aplicativos gráficos 3D de código aberto (biblioteca ou estrutura), usada por desenvolvedores de aplicativos em campos como simulação visual , jogos de computador , realidade virtual , visualização científica e modelagem .

O kit de ferramentas é escrito em C ++ padrão usando OpenGL e é executado em uma variedade de sistemas operacionais, incluindo Microsoft Windows , macOS , Linux , IRIX , Solaris e FreeBSD . Desde a versão 3.0.0, OpenSceneGraph também suporta o desenvolvimento de aplicativos para plataformas móveis, nomeadamente iOS e Android .

Em 2021, o projeto está sendo sucedido pelo projeto VulkanSceneGraph, uma biblioteca baseada em Vulkan. OpenSceneGraph está em fase de manutenção desde 2019.

História

O projeto OpenSceneGraph foi iniciado por Don Burns em 1998. Robert Osfield juntou-se ao projeto em 1999, trabalhando na portabilidade de componentes acabados para o Microsoft Windows. O projeto tornou-se open source em setembro de 1999 e o site oficial do projeto foi criado. No final do ano, Osfield assumiu o projeto e começou a refatoração extensiva da base de código existente, colocando ênfase na modernização, adotando padrões C ++ modernos e padrões de design .

Em abril de 2001, levando em consideração a crescente comunidade de usuários e o interesse do público, Robert Osfield criou o OpenSceneGraph Professional Services, fornecendo suporte comercial, consultoria e serviços de treinamento. Isso marca a profissionalização total do projeto.

A primeira versão estável oficial do OpenSceneGraph foi a versão 1.0, lançada em 2005. Uma versão estendida 2.0 surgiu em 2007, adicionando suporte para sistemas multi-core e multi-gpu, vários NodeKits importantes e uso do sistema de compilação multiplataforma unificado CMake . Livros e manuais do usuário foram introduzidos.

O projeto tem crescido rapidamente e se tornado mais popular desde então. Existem mais de 530 contribuidores assinados com a versão estável atual e a lista de correio oficial contém milhares de nomes.

Em 2019, o projeto foi movido para uma fase de manutenção, o principal esforço de desenvolvimento sendo direcionado para seu projeto sucessor VulkanSceneGraph.

Recursos

Image
Visão geral da arquitetura do gráfico aberto.

Recursos na versão 1.0:

  • Uma implementação de gráfico de cena rica em recursos e amplamente adotada
  • Suporte para recursos de aumento de desempenho
    1. Ver tronco , feição pequena e seleção de oclusão
    2. Nível de detalhe
    3. Classificação de estado e atualização de estado lento
    4. Atalhos OpenGL e extensões mais recentes
    5. Multi-threading e otimização de banco de dados
  • Suporte para OpenGL, de 1.1 a 2.0, incluindo as extensões mais recentes
  • Suporte fortemente acoplado para OpenGL Shading Language, desenvolvido em conjunto com 3Dlabs
  • Suporte para uma ampla gama de formatos de imagens 2D e banco de dados 3D, com carregadores disponíveis para formatos como OpenFlight , TerraPage , OBJ , 3DS , JPEG , PNG e GeoTIFF
  • Efeitos de partícula
  • Suporte para texto TrueType com suavização de borda
  • Suporte perfeito para objetos framebuffer , pbuffers e efeitos de renderização para textura de buffer de quadro
  • Suporte para paginação de banco de dados multi-threaded, que pode ser usado em conjunto com todos os bancos de dados 3D e carregadores de imagens
  • Geração de banco de dados paginado de terreno geoespacial em grande escala
  • Suporte de introspecção para bibliotecas centrais, permitindo que aplicativos externos consultem, obtenham, definam e operem em todas as classes no gráfico de cena, por meio de uma interface genérica
  • Suporte multiencadeado e configurável para múltiplas máquinas CPU / GPU

Recursos na versão 2.8.3

  • Suporte para Mac OS X 10.6 (Snow Leopard)
  • Suporte para ImageIO no Mac OS X
  • Exportação de formato de arquivo 3DS e conversão de arquivo
  • Tecnologia Autodesk FBX integrada
  • Suporte FFmpeg integrado para exibição de conteúdo de arquivo de vídeo em aplicativos 3D.
  • Suporte ao formato de arquivo PLY

Recursos na versão 2.8.4:

  • Suporte de construção VS2010

Recursos na versão 3.0.0:

  • Suporte para OpenGL ES 1.1 e OpenGL ES 2.0
  • Suporte para OpenGL 3.x e 4.x junto com extensões OpenGL associadas
  • Suporte para Android em tablets e telefones
  • Suporte para IOS em tablets e telefones (aplicativos de usuários finais já foram aceitos na App Store)
  • Introdução do aplicativo Present3D para apresentações imersivas em 3D
  • Novos serializadores extensíveis que fornecem novos formatos nativos de arquivo .osgb binário, .osgt ascii e .osgx xml
  • Nova arquitetura de metadados serializável generalizada
  • Nova biblioteca osgQt que facilita a integração do! OpenSceneGraph com Qt, incluindo navegação na web via QWebKit.
  • Novo plugin FBX baseado no Audodesk FBX DSK que permite a leitura do formato .fbx de autoria 3D e intercâmbio
  • Novo plugin directshow para lidar com filmes no Windows
  • Novo plugin do pov para exportar uma cena para o formato POV-Ray, permitindo o uso do POV-Ray para traçar raios fotorrealistas
  • Novo plugin ply para ler arquivos ply
  • Plugin 3ds renovado para leitura e gravação de arquivos .3ds
  • Plugin dxf reformulado para leitura e gravação de arquivos .dxf
  • Suporte para Cocoa e construção de OSX de 64 bits

Histórico de lançamento de versão estável

Versão Data de lançamento
3,0 5 de fevereiro de 2013
3,2 24 de julho de 2013
3,4 20 de julho de 2015
3.4.1 28 de agosto de 2017
3,6 7 de abril de 2018
3.6.1 28 de maio de 2018
3.6.2 29 de junho de 2018
3.6.3 14 de setembro de 2018
3.6.4 26 de julho de 2019
3.6.5 31 de janeiro de 2020

Arquitetura

A arquitetura da biblioteca pode ser separada em três subconjuntos principais - a biblioteca OpenSceneGraph principal, osgViewer e um conjunto de NodeKits.

Essencial

A base da biblioteca OpenSceneGraph pode ser dividida em quatro módulos principais.

osg

O núcleo do OpenSceneGraph fornece classes e métodos para construção e manipulação do gráfico de cena . Ele contém classes que representam vários tipos de nós , geometria de cena, abstração de estado OpenGL , transformações geométricas , bem como classes matemáticas para vetor 2D e 3D e operações de matriz . O gerenciamento avançado de memória também está incluído.

OpenThreads

O projeto OpenSceneGraph contém uma biblioteca de threading, OpenThreads , que é um modelo de thread de plataforma cruzada leve . O objetivo é fornecer uma interface de thread orientada a objetos (OO) mínima e completa para programadores C ++ . É vagamente modelado na API de thread Java e nos padrões POSIX Threads .

A arquitetura do OpenThreads é projetada em torno de modelos de thread "trocáveis" que são definidos em tempo de compilação em uma biblioteca de objetos compartilhados . É importante notar que, embora um projeto de padrão de fábrica pudesse ter sido usado para atingir o objetivo da interface genérica , seria necessário que o programador alocasse cada um dos 4 tipos fundamentais (Thread, Mutex, Barrier e Condition) no pilha . Devido ao custo associado à alocação de heap das implementações concretas subjacentes dessas construções em algumas plataformas, tal alocação foi considerada inaceitável no momento em que esta biblioteca foi originalmente escrita e, portanto, o padrão de fábrica não foi usado.

Em vez disso, uma técnica um tanto confusa - mas eficaz - foi escolhida para fornecer o ocultamento de dados / implementação necessário . Esta técnica usa ponteiros void privados para encapsular os dados privados do objeto. Os ponteiros vazios na verdade apontam para estruturas de dados concretas, mas fornecem uma interface uniforme para o dso.

O objetivo do design do OpenThreads é construir implementações otimizadas usando construções de multiprocessamento otimizadas para plataforma, como os métodos sproc usados ​​em IRIX e threads do Windows.

osgUtil

osgUtil contém a funcionalidade de back-end de renderização e utilitários que cuidam da travessia do grafo de cena , otimização da renderização e transformação da cena em um fluxo de chamadas de API OpenGL . Ele também fornece meios de interação básica com a cena, como seleção de objetos.

osgDB

Esta biblioteca tem a tarefa de carregar arquivos de modelo 3D. Suporta muitos manipuladores de formatos de dados 2D / 3D . Mais de 50 formatos diferentes são suportados - os mais comuns são formatos de dados 3D, como COLLADA (.dae), LightWave (.lwo), Wavefront (.obj), OpenFlight (.flt), 3D Studio Max (.3ds), DirectX (.x) e muitos outros. OpenSceneGraph também fornece seu próprio formato ASCII .osg nativo . Existem exportadores para o formato .osg disponíveis para Blender , Maya e 3D Studio MAX.

Formatos de imagem suportados incluem .rgb, .gif , .jpg , .png , .tiff , .PIC, .bmp , .dds , .tga e QuickTime .

Este módulo também fornece abstração de dispositivo de E / S. Os outros plug-ins do carregador de formato de arquivo são registrados com osgDB.

osgGA

Esta é uma biblioteca de abstração de GUI necessária para diferentes plataformas.

osgViewer

A Biblioteca osgViewer fornece uma maneira rápida e fácil de visualizar a cena gráfica. É também uma abstração independente de plataforma para várias interfaces de sistema de janela .

osgProducer

O OSG também é fornecido com um osgProducer, que é apenas um visualizador independente de plataforma que suporta múltiplos contextos gráficos e multi-threading.

NodeKits

A distribuição do projeto também contém uma variedade dos chamados NodeKits . Estas são soluções de problemas comuns e freqüentemente usados ​​componentes de aplicativos 3D e algoritmos gráficos mais avançados. Entre os mais significativos estão

  • osgAnimation - Uso, animação e transformação de modelos esqueléticos.
  • osgFX - Efeitos especiais e pós-processamento de imagens.
  • osgManipulator - Manipulação interativa de cenas 3D.
  • osgParticle - Uso avançado do sistema de partículas .
  • osgQt - Integração com o kit de ferramentas Qt e incorporação de elementos QtGUI em aplicativos OSG.
  • osgShadow - Framework para técnicas de renderização de sombra.
  • osgTerrain - Renderização extensiva de terreno .
  • osgText - Fontes suavizadas de qualidade, suporte a fontes TrueType e FreeType.
  • osgVolume - Renderização de volume e manipulação de dados volumétricos.
  • osgWidget - Criação simples de GUI .

Recepção e adoção

OpenSceneGraph não fornece nenhuma funcionalidade para lógica de "jogo" superior, é uma ferramenta apenas de renderização. Existem vários motores em grande escala para a criação de jogos de computador (ou os chamados serious games ) usando OSG como base de renderização gráfica, sendo o framework Delta3D o framework mais comum .

Há uma grande variedade de produtos de software desenvolvidos com base no OpenSceneGraph; entre outros, Virtual Terrain Project e ViewTec TerrainView . A lista de usuários OSG contém empresas como Boeing , NASA , FlightGear , Norcontrol e muitas outras.

No nível da comunidade de código aberto, vários projetos adotaram OSG como back-end de renderização:

OpenSceneGraph recebeu uma implementação javascript / WebGL chamada OSG.JS que é usada por muitos visualizadores de cena 3D online, incluindo Sketchfab e Clara.io .

Um empacotamento de C ++ para javascript por meio do Emscripten OGStudio também está desenvolvido atualmente.

Entre outros produtos que utilizam OSG devem ser mencionados:

Veja também

Referências

links externos