Článek vypadá dobře (zítra jej přečtu důkladněji), ale neodpustím si jednu poznámku:
Stálo by za to srovnat trend nárustu kódu v závislosti na přidávání funkcionality. Často platí, že dobrý způsob programování (vyznačující se tím, že pro přidání další/související funkčnosti vyžaduje málo změn) má svůj "Hello World" nepěkně dlouhý/složitý.
Dobry den,
neodpustim si jednu poznamku: v OpenGL je kontrola programatorovych chyb dost mizerna, a to mi (i kdyz mam OpenGL moc rad a asi je to i videt z mych clanku) vadi, zejmena pri vyuce pocitacove grafiky, nebo pri praci s OpenGL u zacatecniku.
Zkuste napriklad napsat prikaz glVertex() mimo prikazove "zavorky" glBegin(), glEnd(). Na nekterych platformach a gfx. akceleratorech klidne zacnete hledat tlacitko reset :-(, na nekterych se zase od tohoto prikazu nebude nic renderovat. Proste je to chyba, ktere prekladac ani OpenGL nemuze zamezit, hlavne, kdyz netestujete chybove stavy.
Vas kod v DirectX byl korektni, protoze testoval veskere chybove stavy. Pokud tam ty testy nedate, ziskate +- podobnou (srovnatelnou) delku kodu.
Tak to ale neni ani zapotrebi delat v DirectX. Podivejte, ja se Directu v zadnem pripade nezastavam, ale porovnavat program v DirectX, ktery testuje vsechny mozne chybove stavy s programem v OpenGL, ktery proste doufa, ze vsechno probehlo v poradku, neni moc ferove.
Taky ten program v OpenGL neni analogii toho v DirectX, to by se musely pouzit vertex arrays, coz neni ani u OpenGL moc citelne (spis naopak).
A kdyz uz jsme u tech chyb, kdyz se da prikaz glVertex() mimo prikazove zavorky, je to jiste chyba programatora, ale take chyba knihovny, ze se z toho nejakym jasne definovanym zpusobem nevzpamatuje (nebo nezhavaruje, to je jedno, hlavne at je to jednotne).
Prosimvas, vysvetlete mi nekdo, proc porad o DX tvrdite, ze je objektovy? Pouzivani maker, pretypovani ukazatelu, funkci jako memcpy a podobnych assemblerovskych praktik rozhodne OOP neni.
Navic jsme kdysi zkoumali COM a zjistili, ze makra hluboko uvnitr COM pouzivaji pretypovani ukazatele na tridu na (char *), prictou nekolik bytu a pretypuji zpet. Takze COM je zavisly na binarni podobe prelozene tridy! Tohle jsem nedelal, ani, kdyz jsem v tom assembleru psal.
Taky se v COM neobejdete bez berlicky friend... Ruka by mi upadla a jeste bych si s ni musel nafackovat, kdybych rekl, ze COM, potazmo DX je objektovy. @#$%^& (autocensored)
No proc - musi prece dokazat, ze OpenGL je lepsi nez Microsoft Direct X, ne ? Tak si najde jeden priklad, kdy ma OpenGL kratsi kod (coz je teda vyhoda jak poleno). Fakt, ze pred 10 lety vsichni vyvojari prestali pouzivat Open GL prave ve prospech DirectX jaksi zjevne nikoho nezajima. Kvuli necemu to prece vzniknout muselo. A grfickejch akceleratoru pro hry je cca 99% (tzn DirectX podpora). OpenGL si se svou podporou profi grafiky drzi sve stale misto - ale jak rikam - volba byla provedena v roce 1995 s prichodem Windows 95, kdy se 90% trhu priklonilo k Direct X. Ono takovehle domaci bastleni na jednoduchejch prikladech a programovani realny aplikace je uplne odlisna vec. Kazdy profi programator povi sam, proc jede na DX a ne na OpenGL
Vazne ne? A co treba Wolfenstein 3D, Doom 1 a 2, Quake 1, 2, 3, RTCW a treba Doom 3? A co napr. fakt, ze licenci na engine Quake 3 bylo prodano pres 35? Porad malo? A co takhle, ze predni vyrobci karet (NVIDIA & ATI) si davaj sakra zalezet, aby jejich HW co nejlip behal na enginech od Carmacka (a kvuli D3 se ted muzou pretrhnout).
P.S. Moc jsem nepochopil prirovnani "poradne hry" a "realne aplikaci"... :o
no ale uz nemluvi zdaleka tak jednoznacne o open gl jak mluvival, kdyz zacal delat na doomu 3 . dokonce sam uznava , ze s directx je treba do budoucna pocitat . ja ale porad nechapu jak nekdo muze srovnavat opengl vs directx s tim , ze z toho vychazi jednoznacny vitez. tak to prece neni a celkem me mrzi , ze tady na rootu to tak vyzniva . ostatne i ten doom 3 sice nepouziva d3d, ale vsechno ostatni kolem jo. directsound , multiplayer atd...
"Fakt, ze pred 10 lety vsichni vyvojari prestali pouzivat Open GL prave ve prospech DirectX jaksi zjevne nikoho nezajima. Kvuli necemu to prece vzniknout muselo. A grfickejch akceleratoru pro hry je cca 99% (tzn DirectX podpora). OpenGL si se svou podporou profi grafiky drzi sve stale misto - ale jak rikam - volba byla provedena v roce 1995 s prichodem Windows 95, kdy se 90% trhu priklonilo k Direct X."
Nechci se teda tady do té diskuze moc zapojovat, ale tady si neodpustim reagovat. Myslím, že tady míchate hned několik věcí přes sebe. Pochybuju, že lidé v roce po příchodu DX nějak masově přestali používat OpenGL. Direct3D byl navržen tak, aby měl co nejmenší nároky na hardware (rozuměj grafické karty). Tj. hardware pro Direct3D se tak dal vyrobit mnohem levněji než hardware, na kterém by běželo OpenGL (taky tomu odpovídali funkce D3D a vůbec všechno okolo). Kdyby to MS neudělal, tak se 3D akcelerátory do osobních počítačů rozhodně nedostali tak rychle (s trochou nadsázky: třeba bychom stále tvrdli na grafických kartách, co uměj jenom 2D a 3D by bylo pouze doménou grafických stanic - samozřejmě je to blbost, bylo tu například ještě 3Dfx ;). Než mě někdo začne osočovat, tak bych jenom řekl, že my děláme v OGL, takže rozhodně tady nemám zapotřebí vynášet DX potažmo MS do nebes :).
nejak se mi zda ze autor vzal toto srovnani za spatny konec...
srovnavat dve api (navic svou koncepci dost odlisna) podle delky kodu mi neprijde moc vhodne. navic jak uvedl vyse pavel tisnovsky nejsou useky ekvivalentni. delsi kod nic neznamena stejne je vzdycky nejtezsi to vymyslet a ne zapsat, i kdyz uznavam ze kratsi a prehlednejsi kod je vyborny v zacatcich (a ogl je skutecne lehsi na nauceni).
nejak mi ale v techto clancich chybi obecnejsi srovnani, neco jako toto:
Direc3D:
- pouze win32
- _vetsinou_ hry (ano vim ze se uz zacina prosazovat i jinde)
- com model (c wrapper dostupny)
OpenGL:
- multiplatformni
- vsechny graficke aplikace (cad, vizualizace, hry, ......)
- proceduralni (objektovy obal dostupny - napr. openinventor apod)
z vyse uvedeneho je videt, ze porovnavat obe api ma smysl pouze u her na platforme win32, vsude jinde je opengl vicemene jasna (a jedina :) volba, takze bat se ze by nejak upadalo je blbost. no a v tech hrach jak sem uz psal do diskuze o hre ut2k4 je to uplne jedno. s pomoci obou dosahnete stejneho vysledku, zalezi jen na preferenci programatora (prip. zadavatele projektu), kazdopadne uznavam ze vetsina her pouziva d3d a to zejmena z toho duvodu, ze je soucasti vetsiho baliku directx, ktery poskytuje vse co je pro vyrobu hry dulezite pekne pohromade. opengl je pouze na grafiku (zejmena 3d), je skoda ze neexistuje nejaka "open" alternativa k celym directum, dat dohromady nekolik knikoven (opengl, openal, ...) tak si myslim, ze by to byla rozumna alternativa.....
ale jak rikam, pro uzivatele to jestli hra pouziva opengl nebo d3d nic neznamena, obe api umi vyzdimat grafiku nadoraz :) jediny co na directech nechapu je duvod jejich vzniku, proc vymyslet nove api kdyz uz jedno (navic pekne zavedene a funkcni) existovalo.... njn, microsoft :))
V podstate jsi si na tu otazku odpovedel
Microsoft potreboval neco, kde budou moci programatori delat hry....
Stavajici api bylo pomale tak microsoft zavedl direct-x ne jen d3d, to se vyvinulo az podle pozadavku vyvojaru a proc by mneli pouzivat neco co nemohou ovlivnovat, kdyz maji lidi a prostredky aby vytvorili vlastni standard.
By mne zajimalo kolik lidi by udelalo hru jen v open-GL... Sice by se to zobrazilo ale bez zvuku ovladani a site to jaksi neni ono.
Prosim vas, zastavte nekdo tyhle nesmysly!
Jak uz tu bylo uvedeno, porovnavat dva naprosto odlisne kusy kodu (kontroly chyb, uplne jiny mechanismus vykreslovani) je naprosto nesmyslne. Navic nevim, komu to ma co rict. Nedovedu si predstavit, jak by jakykoli podobny clanek mohl nejakeho ctenare Roota presvedcit k prechodu z DirectX na OpenGL (naopak jeste hure, vzhledem k pristupu autora). Ctenari Roota moc DirectX pouzivat nebudou a pokud ano (jako ja), tak pro to maji svoje duvody a pochybne informace z tohoto serialu je asi tezko presvedci, ze...
Pokud by nekdo (kdo se v tom vyzna) napsal, v cem se lisi filosofie obou systemu, jejich schopnosti ohledne novejsich technologii, popr. uvedl par poznamek o prave prichazejicim OGL2, proc ne (i kdyz mi stale unika, proc na Rootu). Ale tohle je o nicem.
A jeste poznamka o objektovem pristupu: <ironie>Vskutku, fakt, ze nekde v implementaci neceho nekdo provadi nejake low-level funkce a pouzival pri tom pretypovani, to je opravdu dukaz, ze to neni OOP.</ironie> Takze jinak: OOP je o pristupu, a OGL takovy pristup urcite nema. (Existuje jakesi nebeske OGL, kteremu reknu "tady ty binarni data, tak to je textura, kterou ted pouzivej". (Popr. v pozdejsi verzi: pod cislem 4 rozumim tato binarni data, ktera jsou textura.)) Poznamenavam, ze to samo o sobe neni nic tragickeho, OOP neni zadny samospasitelny nastroj, jenom proste tezko poprete, ze DX vykazuje vyrazne vic OOP rysu nez OGL.
Tak jenom pro uplnost: umis cist?
"Ctenari Roota moc DirectX pouzivat nebudou a pokud ano (jako ja), tak pro to maji svoje duvody a pochybne informace z tohoto serialu je asi tezko presvedci, ze..."
Jinymi slovy: nijak nedebatuji o vyhodach a nevyhodach obou systemu (a nezavislost na platforme JE jednou z vyhod OGL), pouze konstatuji, ze pokud nejaky ctenar Roota pouziva DX, pak k tomu ma jiste sve duvody a nedokazu si predstavit, ze by ho podobny clanek presvedcil k prechodu.
jezis marja zbudte se . na roota jsem chodim rad , ale tyhle polopravdy a amaterske clanky me dost znechucuji . opravdu to mate zapotrebi ? :)
porovnavate neporovnatelne jenom proto abyste ukazali , ze open gl rulez a direct x je shit ? :)) to ten clanek patri spis na nejakou flamewar na zive ne sem.
Nechapu jak si muze nekdo, kdo o sobe prohlasi toto (cituji): "Nicmene, horsi to bude s DirectX casti, protoze jsem o nem cetl pouze jednu knihu, ktera ale neni zrovna kvalitni.", porovnavat OG a DX. U takoveho typu clanku bych predpokladat dobrou znalost OBOU knihoven. Samozrejme za prepokladu, ze cilem ma byt skutecne srovnani...
Nechci rozebirat proc jedna nebo druha knihovna. Jsem ale toho nazoru, ze jestlize to nekdo mysli s 3D grafikou vazne, nemluve o profesinalnim uplatneni v hernim prumyslu, mel by zvladat knihovny obe. Ne vzdy je volba na vyvojari. V realnych projektech jsou casto nasazene technologie diktovany 'zvenku'. Muzeme stravit tydny tlucenim se po hlavach je-li lepsi OG nebo DX. Ve finale programator zvladajici obe vyhrava...
No nevím, ale podle mě na zdroják kompletní aplikace, řešící analogickou úlohu v DirectX připadají z dané OpenGL ukázky asi tak sedm řádek ...:
Module modMain
Dim WithEvents D As Device, F As New Form()
Sub Main()
F.Show()
Dim PP As New PresentParameters() : PP.Windowed = True : PP.SwapEffect = SwapEffect.Discard
D = New Device(0, 1, F, 32, PP)
D.Clear(1, Color.Silver, 1, 0)
D.RenderState.Lighting = True
D.SetTransform(3, Matrix.PerspectiveFovLH(1, 1, 1, 500))
D.Transform.View = Matrix.LookAtLH(New Vector3(0, 0, 5), New Vector3(), New Vector3(0, 1, 0))
Dim V(3 - 1) As CustomVertex.PositionColored
V(0).X = 0 : V(0).Y = 1 : V(0).Z = 1 : V(0).Color = Color.Red.ToArgb
V(1).X = -1 : V(1).Y = -1 : V(1).Z = 1 : V(1).Color = Color.Green.ToArgb
V(2).X = 1 : V(2).Y = -1 : V(2).Z = 1 : V(2).Color = Color.Blue.ToArgb
D.BeginScene()
D.VertexFormat = CustomVertex.PositionColored.Format
D.DrawUserPrimitives(4, 1, V)
D.EndScene()
D.Present(): Application.Run(F)
End Sub
End Module
To srovnání je nejspíš opsané někde z webu, ale nemá mnoho společného s realitou. Autor přece musí jasně vidět, že v kódu DX jsou kontroly chyb a další redundantní věci.
Naopak nastavit třeba jen PIXELFORMATDESCRIPTOR pro OpenGL zabere ve Windows aspoň deset řádků...
Ještě přidám link na tu ukázku, jak se jeví v moderním IDE. Objektové rozhraní je mj. o silný typový kontrole, o možnosti dědit a modifikovat objekty, o možnosti se nechat při psaní vést IDE a rozhraním a nemuset si pamatovat plochou strukturu procedurálních API.
http://www.zephir.wz.cz/images/directx.gif