OpenGL a Direct3D

4. 8. 2004
Doba čtení: 4 minuty

Sdílet

Nedávno vyšel na ROOTu článek Linuxové hry (47): Unreal Tournament 2004. Jeho autor při popisu "Technické stránky věci" uvedl ne zcela šťastnou větu: "Bohužel je vidět, že v oblasti 3D grafiky se OpenGL nemůže DirectX v kvalitě obrazu rovnat." a doplnil ji několika podrobnostmi. Pojďme se spolu podívat, jestli je to pravda, nebo ten největší nesmysl, jaký svět kdy slyšel.

Úvod

V reakci na výše uvedený článek se vytvořila klasická„náboženská válka“ typu MS Windows proti Linuxu. Strany se rozdělily na OpenGL programátory a na osoby v každém druhém příspěvku prohlašující (ne všichni!): Slyšel jsem…, Moc tomu nerozumím…, Nejsem expert… a podobně. Ti druzí jmenovaní nějakým způsobem mimo jiné vygenerovali, že OpenGL, na rozdíl od DirectX, vytváří jeden člověk – s prominutím NEJVĚTŠÍ BLBOST, JAKOU JSEM KDY SLYŠEL. V průběhu článku vysvětlím proč, zatím jen tolik, že o tom, co se skrývá pod pojmem DirectX, rozhoduje výhradně jediná firma (Microsoft) a autorem OpenGL může být kdokoli, jehož implementace splňuje OpenGL standard a projde sérií testů. Dohled nad vývojem tohoto standardu má konsorcium ARB, do kterého patří firmy jako SGI, DEC, HP, IBM, Intel, Microsoft, Sun Microsystems a další.

Moje zkušenosti s 3D grafikou

Já také nejsem expert :-], i když mi někdy připadá, že mě za něj někteří lidé považují. S OpenGL jsem se poprvé (jako programátor) setkal léta páně 2002. Po půl roce jsem jako „Vánoční dárek“ (to by bylo na dlouho) dostal doménu http://nehe.o­pengl.cz/ a byl mezi prvními, kteří o OpenGL začali psát v češtině (v současnosti vychází kvalitní seriály i na rootu). Tento web aktuálně obsahuje přes sto stránek o celkové velikosti cca. 2,8 MB (texty a skripty – ne FrontPage slátaniny). Témata jdou od absolutních základů po velmi pokročilé techniky. Jelikož jsem autorem/překla­datelem cca. 70 %, dá se říci, že OpenGL tak trochu rozumím… (Skrytou reklamu máme zdárně za sebou :-)

Logo OpenGL
Logo OpenGL

Nicméně, horší to bude s DirectX částí, protože jsem o něm četl pouze jednu knihu [1], která ale není zrovna kvalitní. Tímto nechci nikoho poškodit, radím pouze jako čtenář čtenáři. Úvod končí čtvrtou kapitolou na straně 115 a na zbylých 230 stranách se hojně využívá technika CTRL+C, CTRL+V. Výklad končí přibližně na úrovni desátého NeHe Tutoriálu, takže nikde daleko. Celkově nezáživný manuálově/doku­mentační styl psaní.

Je mi jasné, že u DirectX části budu povětšinou, jak se říká, vařit z vody. S největší pravděpodobností neuvedu všechny jeho (ne:-)výhody, za což se předem omlouvám. Navrhoval bych proto, aby mě nějaký Direct-positive čtenář kontaktoval a předal mi nějaké praktické informace o DirectX, ty nemám žádné. Základní teorie mám dost z literatury. Potom bych mohl (případně bychom mohli společně) napsat další díl článku.

Logo DirectX
Logo DirectX

Z historie

Na počátku osmdesátých let minulého století, v době, kdy výpočetní technice kraloval textový režim, se u společnosti Silicon Graphics Inc. (SGI) začaly vyvíjet grafické stanice a knihovna IRIS GL, kterou lze považovat za přímého předka OpenGL. Jak šel vývoj dopředu, zbavovala se některých problematických rysů a dá se říct, že její poslední verze je s OpenGL téměř kompatibilní. Standard OpenGL vznikl na začátku devadesátých let (v [3] se uvádí rok 1992) a narozdíl od IRIS GL byl od počátku koncipován jako nezávislý na hardwaru, operačním systému a programovacím jazyce. Od té doby se změnil pouze minimálně, nejnovější verze je 1.5 a každý, kdo dělá s OpenGL, určitě ví, že se připravuje verze 2.0.

V raných dobách OS Windows se hry vytvářely spíše pro MS-DOS (hledal jsem domovský web, ale nezabral ani Google…). Důvodem byla několikavrstvá struktura Win API a hlavně celková extrémní pomalost GDI, které se pro větší projekty (rozuměj jakékoli projekty) naprosto nehodilo. Kdysi jsem v něm udělal několik 2D her, tím mé pokusy skončily – díky, ale už ne.

Microsoft si byl problémů s GDI vědom, první pokus o jejich napravení se jmenoval WinG. Jednalo se o množinu funkcí, které umožňovaly přímý přístup do grafické paměti (do té doby to nešlo). Postupným vývojem vzniklo Game SDK, které se za nějakou dobu přejmenovalo na DirectX.

Jeho prvních několik verzí bylo prakticky téměř nepoužitelných (jako u mnoha dalších MS technologií), v současnosti jich existuje devět a jsou mezi sebou většinou nekompatibilní. To znamená, že pokud používáte DX5 a chcete přejít na DX6, musíte se vše začít učit znovu od začátku a všechen dosavadní kód musíte upravit nebo dokonce kompletně přepsat (což často bývá rychlejší). V současné době je DirectX ve verzi 9.0.

ict ve školství 24

Uvedením DirectX vyvolal Microsoft na jednu stranu pozitivní, na druhou stranu negativní rozruch. (Windows) vývojáři her konečně dostali ucelený balík komponent – DirectDraw pro 2D grafiku, Direct3D pro 3D grafiku, DirectSound pro zvuky, DirectNet pro síťování atd. Nejdiskutovanější bylo právě Direct3D. Většina specialistů z oboru se shodovala na tom, že nevznikl žádný důvod k zavedení nového standardu. OpenGL plně postačovalo všem aplikacím a bylo prověřené časem. I když Direct3D disponuje prakticky stejnými funkcemi jako OpenGL, styl programování se naprosto liší.

Dále už budeme porovnávat pouze OpenGL a Direct3D, protože určitě chápete, že srovnávat 3D grafiku např. se zvuky nebo síťováním dost dobře nejde :-)

Literatura

Autor článku

Backend programátor ve společnosti Avast, kde vyvíjí a spravuje BigData systém pro příjem a analýzu událostí odesílaných z klientských aplikací založený na Apache Kafka a Apache Hadoop.