![]() | |
![]() | |
Vývojář | VSG (Visualization Sciences Group) |
---|---|
Aktuální verze | 2.1.6 (28. května 2021) |
Operační systém | multiplatformní |
Platforma | Java Virtual Machine |
Vyvíjeno v | C++ |
Typ softwaru | knihovna pro práci s 3D grafikou |
Licence | komerční |
Web | http://www.vsg3d.com/open-inventor/sdk |
Některá data mohou pocházet z datové položky. |
Open Inventor je objektově orientované API pro vývoj 3D grafiky. Jedná se o vysokoúrovňovou vrstvu nad OpenGL. Původně byl implementován pro jazyk C++, ale dnes se dá používat i v dalších jazycích, například v Javě a na platformě .NET.
V současné době je Open Inventor vyvíjen firmou VSG (Visualization Sciences Group) jako komerční produkt. Jeho populární open source alternativou se stal Coin3D.
V letech 1988–1989 požádal Wei Yen, tehdejší viceprezident SGI (Silicon Graphics International Corp.), Rikka Carreyho o vedení projektu IRIS Inventor. Jejich cílem bylo vytvořit nástroj, který by zjednodušil vývoj 3D grafických aplikací. Vycházeli z předpokladu, že malý počet 3D aplikací založených na nízkoúrovňovém IRIS GL je způsoben přílišnou časovou náročností vývoje a pokud by byl jejich vývoj usnadněn prostřednictvím objektově orientovaného API, začalo by jich vznikat více. Spíše než na výkon se zaměřili na jednoduchost použití a jejich krédem se stalo heslo "3D programování pro lidi".
První betaverze IRIS Inventoru (později známá jako Scenario) byla uvedena v roce 1991, což je dokonce rok před první verzí OpenGL. O rok později byl vydán IRIS Inventor 1.0, který byl postaven ještě nad IRIS GL, takže zatím nebyl platformově nezávislý. V roce 1993 vyšlo několik vylepšených revizí.
V roce 1994, dva roky po uvolnění IRIS GL jako OpenGL, se licencování třetím stranám pro portování na další platformy dočkal i IRIS Inventor. Vznikl tak Open Inventor 2.0, který byl přepsán a založen na OpenGL. Ve stejném roce byl upravený grafický formát Open Inventoru navržen internetové komunitě jako možný jazyk pro popis 3D scény přes internet. Tento formát byl uznán jako VRML standard. Realizace VRML nepřímo popularizovala Open Inventor po celém světě. VRML se poté dál vyvíjel a jeho formát se stal spíše rozšířením grafického formátu Open Inventoru.[1]
V následujících letech se Open Inventor stal standardem v oblasti profesionální 3D grafiky.
Ke konci 90. let se SGI začala soustředit především na vývoj svého OpenGL Performeru a v roce 1998 byl vývoj Open Inventoru ukončen.
V roce 2000 pak SGI vydala svou poslední verzi Open Inventoru (Open Inventor 2.1) jako open source pod licencí LGPL.
Firma TGS (Template Graphics Software) zakoupila licenci na Open Inventor již v roce 1994 a portovala jej na některé další platformy (Sun, HP, IBM a Microsoft Windows NT). Poté, co SGI ukončila vývoj Open Inventoru, převzala TGS roli hlavního vývojáře. Do Open Inventoru byla přidána řada pokročilých vlastností jako multithreading, pokročilá práce se shadery, stíny, volume rendering, mesh rendering a další.
V roce 2004 bylo TGS odkoupeno firmou Mercury Computer Systems, ale roce 2009 se původní TGS opět osamostatnili a změnili si název na VSG.
Od roku 2009 pokračuje ve vývoji komerčního Open Inventoru firma VSG.
Od roku 1995 začala nezávisle na Open Inventoru vznikat knihovna Coin3D pro vykreslování scény z formátu VRML. Po jejím rozšiřování a následném přepsání od základu se vývojáři Coin3D rozhodli implementovat Open Inventor API. Současný Coin3D je tak plně kompatibilní s rozhraním Open Inventoru 2.1, i když s ním nesdílí žádný kód.
Coin3D je dostupný jako open source pod licencí BSD a stal se tak populární open source alternativou k Open Inventoru.
Open Inventor je konstruován jako objektová knihovna nad nízkoúrovňovým OpenGL. Poskytuje velkou sadu tříd pro práci s 3D grafikou a díky optimalizacím grafické scény může dosahovat i vyššího výkonu než přímá implementace na OpenGL.
Základem architektury Open Inventoru je databáze scény, která obsahuje informace o popisu jedné nebo více 3D scén. Jednotlivé scény popisují množiny příbuzných 3D objektů a atributů. Jednotlivé prvky v databázi scény mohou reprezentovat například dům, auto a člověka.[2]
Každá 3D scéna je popsána pomocí grafu scény. Scéna je tvořena uspořádanou kolekcí speciálních tříd, tzv. uzlů. Uzel je základní stavební jednotkou grafu scény. Existují základní tři kategorie uzlů:
Každý uzel obsahuje množinu datových polí a každému z nich přiřazuje jméno. Pole jednoho uzlu mohou být propojena s poli jiných uzlů z důvodu šetření výpočetních nároků. Některé uzly jsou určeny ke zpracování uživatelského vstupu a k manipulaci se scénou.
Při vykreslování scény je graf parsován jako strom směrem shora-dolů a zleva-doprava. Užitečným uzlem je zde tzv. separátor, který vloží stav (barva, transformační matice atd.) na zásobník. Po rozparsování podgrafu pod separátorem je stav vyjmut ze zásobníku a všechny změny provedené na daném podgrafu tak neovlivní žádné další uzly. Separátor navíc dokáže scénu pod sebou předkompilovat do OpenGL display listu a tím urychlit proces renderování.[3]
Nad scénou a uzly mohou být prováděny různé akce. Mezi základní patří vykreslení, čtení, zápis, výběr prvku (picking), vyhledávání a zvýraznění (highlighting).
Open Inventor obsahuje knihovny komponent, které poskytují přístup k několika grafickým rozhraním:
#include <Inventor/Qt/SoQt.h>
#include <Inventor/Qt/SoQtRenderArea.h>
#include <Inventor/nodes/SoSphere.h>
#include <Inventor/nodes/SoCube.h>
#include <Inventor/nodes/SoDirectionalLight.h>
#include <Inventor/nodes/SoMaterial.h>
#include <Inventor/nodes/SoPerspectiveCamera.h>
#include <Inventor/nodes/SoTranslation.h>
#include <Inventor/nodes/SoRotationXYZ.h>
#include <Inventor/nodes/SoSeparator.h>
#include <Inventor/engines/SoElapsedTime.h>
int main(int , char **argv)
{
/******************** Inicializace ********************/
// Inicializace vykreslovaciho prostoru
QWidget *window = SoQt::init(argv[0]);
if (window == NULL) exit(1);
// Vytvoreni root uzlu
SoSeparator *root = new SoSeparator;
root->ref();
// Inicializace kamery
SoPerspectiveCamera *camera = new SoPerspectiveCamera;
root->addChild(camera);
// Inicializace svetla
root->addChild(new SoDirectionalLight);
/******************** Koule ********************/
// Material
SoMaterial *sphereMaterial = new SoMaterial;
sphereMaterial->diffuseColor.setValue(0.0, 0.0, 1.0);
root->addChild(sphereMaterial);
// Vytvoreni koule
root->addChild(new SoSphere);
/******************** Krychle ********************/
// Vytvoreni noveho uzlu pro krychli
SoSeparator *cubeNode = new SoSeparator;
root->addChild(cubeNode);
// Material
SoMaterial *cubeMaterial = new SoMaterial;
cubeMaterial->diffuseColor.setValue(1.0, 0.0, 0.0);
cubeNode->addChild(cubeMaterial);
// Posun krychle od koule
SoTranslation *cubeTranslation = new SoTranslation;
cubeTranslation->translation.setValue(3.0,0.0,0.0);
cubeNode->addChild(cubeTranslation);
// Rotace kolem osy Y
SoRotationXYZ *rotationY = new SoRotationXYZ;
rotationY->axis = SoRotationXYZ::Y;
cubeNode->addChild(rotationY);
// Propojeni uhlu rotationY a casu behu aplikace
SoElapsedTime *time = new SoElapsedTime;
rotationY->angle.connectFrom(&time->timeOut);
// Rotace X - predtoceni krychle
SoRotationXYZ *rotationX = new SoRotationXYZ;
rotationX->axis = SoRotationXYZ::X;
rotationX->angle.setValue(1);
cubeNode->addChild(rotationX);
// Vytvoreni krychle
cubeNode->addChild(new SoCube);
/******************** Aplikace ********************/
// Vytvoreni vykreslovaciho okna
SoQtRenderArea *renderArea = new SoQtRenderArea(window);
// Nastaveni kamery
camera->viewAll(root, renderArea->getViewportRegion());
// Nastaveni vykreslovaciho okna
renderArea->setSceneGraph(root);
renderArea->setTitle("Koule a rotujici krychle");
renderArea->show();
// Zobrazit okno a spustit hlavni smycku programu
SoQt::show(window);
SoQt::mainLoop();
// Uvolneni zdroju
delete renderArea;
root->unref();
return 0;
}
Firma VSG poskytuje k Open Inventoru celou řadu rozšíření, které lze využít pro specifické potřeby.
Rozšíření umožňují přístup k moderním vizualizačním technikám, řeší správu velkého množství dat, škálovatelnost vykreslování v distribuovaném prostředí, vědecké vizualizace, realistické vykreslování a další.[4]
V současnosti jsou k dispozici následující oficiální rozšíření:
Open Inventor je široce využíván zejména pro vědecké vizualizace, v medicíně, inženýrství a průmyslu, ale také pro vývoj počítačových her, protože je schopen pracovat s grafikou v reálném čase.
V srpnu 2012 bylo oznámeno odkoupení VSG společností FEI, která se zabývá vývojem elektronových mikroskopů pro práci s nanotechnologiemi v oblastech výzkumu elektroniky, přírodních věd, průmyslu atd. Zatím nelze odhadovat, jaký vliv může mít tato změna na Open Inventor, ale pravděpodobně lze očekávat ještě větší využití v oblasti výzkumu.[5]