Dovolil bych si něco k té (ne)kompatibilitě mezi jednotlivými verzemi DX. Podotýkám, že také nejsem expert:). Každopádně bych to tak žhavě neviděl - byly tam nějaké velké skoky, to ano (posledním a podle mě největším byl asi přechod z DX7 na DX8 kdy kompletně zmizelo DirectDraw a sloučilo se s Direct3D na DirectX Graphics), ale převážně se to dalo vyřešit třeba náhradou čísla 8 za číslo 9 (či obdobně :)) a změnou několika parametrů (i když kupříkladu teď došlo ke změně dokonce nad jedním runtime, konkrétně 9.0b jenom v SDK, kde jistý "SummerUpdate" z loňského roku znepřístupnil zrovna třídu co jsem používal (je to nad jedním runtime, prostě jen znemožnili používat jednu třídu a nahradili ji jinou, robusnější, kterou jsem ale třeba já celou nepotřeboval a jen to přidělává problémy)). Teď jsem tedy tímhle povídáním sám sebe zvyklal:) Ale ne, stojím si za tím, že zas tak velké a nepřekonatelné rozdíly mezi verzemi nejsou. Podotýkám, že starší verze DX (5, snad i 6 a níž) moc neznám.
Jinak také DirectNet neexisteju :) Jmenuje se to DirectPlay.
A co se mě soukromě na DX oproti OpenGL MOC líbí je možnost programovat oběktově. Vím, že OGL má nějaké nadstavbové knihovny se kterými to jde také, ale tady to mám všechno komplet a to pro mě v začátcích byl důležitý fakt.
Nic si z toho nedelej, ja taky kdyz pisu neco dulezityho, tak to davam manzelce na korekturu. Prispevek byl kvalitni a to je hlavni.
Jinak souhlasim s tebou, ze rozdily nejsou zas tak moc markantni pokud delas nejaky mensi projekt, pokud vsak delas na necem vetsim, co pripadne upravujes prubezne, je to neprijemne.
Jako jednoduchy priklad bych uvedl free hry, ktere jsou pozvolna vylepsovany treba i nekolik let. V takovem pripade by hlavni praci bylo neustale prizpusobovani nove verzi vyvojoveho nastroje.
Nehlede na to, ze jiz v principu je to blbost. Lze dejme tomu tolerovat nekompatibilitu v urcite zlomove verzi, abychom se zbavili nevhodnych vlastnosti, ale prubezne meneni standardu je docela hruza. To je styl kluciny, co dela svuj prvni vetsi program a s kazdou novou vlastnosti, kterou chce pridat, prepise pul programu, protoze neumi udelat rozumny navrh.
Nicmene, v urcitych ohledech ve DirectX vynikajici, treba zachytavani obrazu z kamer a podobne, to vsak az tolik netyka porovnani OpenGL a Direct3D. Z meho pohledu je sice v urcitych ohledech tato komponenta slabsi, ale DirectX jako celek je pro programatora jeden z nejlepsich nastroju, ktere jsou k dispozici. Jde prave o tu podporu prace se zvukem, obrazem, HID a podobne...
"[...] autorem OpenGL může být kdokoli, jehož implementace splňuje OpenGL standard a projde sérií testů."
Pokud musim splnovat existujici standard tak jak muzu zaroven byt autorem neceho noveho? Tenhle clanek je plnej bludu, uplne stejne jako ta diskuze kterou se snazi zpruhlednit. Kdo rozhoduje o tom co bude pripusteno do OpenGL a co ne? U DirectX je to jasne, Microsoft, ale u OpenGL to evidentne taky nekdo kontroluje, rozhodne to neni otevreny ze si kazdej muze pridavat co chce. takze v tomhle moc rozdil zrovna neni, i kdyz ty typicky Linuxacky komentare se snazej ctenare presvedcit ze je.
Jerry, Jerry, zase sa pustas do niecoho, o com nemas ani paru.
OpenGL je (otvoreny) standard. Kazdy, kto chce, moze vytvorit jeho implementaciu. To v clanku bolo napisane, ze ano.
Sucastou standardu je aj mechanizmus rozsireni. To znamena, ze aplikacia sa moze spytat opengl implementacie nieco ako "Podporujes GL_MESA_resize_buffers? Alebo GL_NV_texture_shader? GL_ATI_separate_stencil? GL_APPLE_client_storage? GL_INTEL_parallel_arrays? GL_SGIX_ycrcb?". Myslim, ze uz kazdy pochopil, ze kazdy implementator si moze napisat extensions ake chcu.
No a ked sa nejaka extension stane popularna, tak ARB - to je to konzorcium, co bolo spomenute v clanku - bude hlasovat, ci sa dane rozsirenie stane integralnou sucastou standardu alebo nie. Potom sa z nej stane ARB extension - napr. GL_ARB_vertex_program.
Takze kecy o linuxackych komentaroch si mozes dat vies kam.
ano, hlasuje o tom OpenGL konsorcium. Kdysi sem četl nějaký článek a dle tohoto článku to hlasování dokonce není poměrné, ale jednomyslné tj. všichni členové OpenGL konsorcia musí souhlasit se zařazením navrhovaných rozšíření. Jinak Jerry - no k tomuto "inteligentnímu" pánovi se nebudu ani vyjadřovat.
Pavel
Jde o to ze OpenGL pouze predepisuje nejake minimum ktere _musi_ byt naimplementovano pokud ma byt dany ovladac/HW kompilantni. Ovsem pokud chce vyrobce zpristupnit programatorovi neco navic, nadefinuje to jako extension, danou funkci (nebo funkce) si pak programator zpristupni pres jednotne rozhrani. Ta 'kontrola' probiha stylem ze jednou za par let se sejde komise, probere si seznam vsech extensions co implementovali ruzni vyrobci a pokud je nejaka extension uz tak proflakla ze ji podporujou vsichni tak se prida do jadra (z GL_EXT_* se stale GL_ARB_*) ovsem na interface se nic nemeni. To je duvod proc na vyvoj novych verzi opengl neni takovy tlak, protoze vsechny funkce nejnovejsich karet se tim daji zpristupnit i pod OpenGL 1.1. Jinak to neni vec windows vs. linux protoze OpenGL neni zavisle na platforme a opengl veci se provozuji i na windows (treba cokoliv od id software a hodne freeware/public domain her).
Zde uvadene tema je mi blizke ale nepochopil jsem o cem chce autor psat. Nekolik veci se mi na clanku i nelibi:
1) "Je mi jasné, že u DirectX části budu povětšinou, jak se říká, vařit z vody." - proc autor pise o API se kterym nema potrebne zkusenosti? A ze je to z clanku poznat...
2) "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" -
porad to nedokazu spocitat stejne jako autor. Treba DirectX 4.0 nikdy neexistovalo. Zato mame DX6.1 a 8.1 a treba 2.0a (kde se myslim poprve objevilo Direct3D). Tvrzeni ze nekolik prvnich verzi bylo nepouzitelnych je VELMI sporne (a navic ta zbytecna poznamka v zavorkach, ach jo). Treba DirectX 3.0 je na 2D grafiku super a moje plosinovka vyuzivajici tuto verzi DX funguje standardne a nemuzu si stezovat.
3) "DirectNet" - :-)) komentovano vyse
4) Soucasna verze DX runtime je 9.0c a ne 9.0. Vysla priblizne pred peti dny.
5) "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" - nesouhlasim. DX6 prineslo: Direct3D zacina byt pouzitelne (DX5 D3D se uzivalo velmi zridka, spise vubec ne), DirectDraw - vylepseni vykonu, DirectSound - vylepseni vykonu a podpora MMX, DirectInput - zadna zmena, DirectPlay - podpora firewallu. Takze zadny uceni od zacatku a kompletni prepisovani kodu. API zustalo vice mene konzistentni. Direct3D je jedina oblast kde doslo k velikym zmenam ale stejne jej drive (treba DX5) nikdo neuzival protoze to bylo VELMI obtizne (dodnes jsem ten zpusob nepochopil).
Mohl bych pokracovat ale nevidim v tom zadny prinos. Nechapu o cem budou nasledujici clanky pojednavat kdyz obe API umi stejne veci pomoci stejnych technik a algoritmu protoze ovladaji stejnou grafickou kartu - a jeji vlastnosti dokazi vyuzit naplno. Lisi se ve zpusobu uvadeni novinek a tim API (DX uziva COM) ale popisovat zde rozdily mezi API nepovazuji za moudre kdyz neexistuje rozdil mezi uzitymi algoritmy a technikami a naopak prunikem mezi nazvy funkci je prazdna mnozina. Lepsi je jedna serie clanku o DX a druha o OGL. Je to mene zbytecne nez diff mezi gl.h a d3d9.h obsahujici jak gl.h tak d3d9.h :-).
Uz se mi nechce dal psat...doufam ze muj prispevek nevyzni moc kriticky a ze jsem nejakou blbost neplacl zase ja. Chtel jsem hlavne opravit nektere chyby v clanku.
Zdroje: google->search("DirectX versions");
S tím, že v DirectX neprogramuju a nějak moc ho neumím souhlasím, ale možná jsem neměl napsat zovna "vařit z vody", protože jsem přečetl čtyřsetstránkovou knížku o Direct3D.... nemyslíš, že je to dost na to, abych si o něm udělal vlastní názor?
Devět verzí jsem psal proto, že se nejnovější verze jmenuje DirectX 9.0(cosi) a myslím, že kdo v Direct nedělá od samýho začátku by to tak bral taky.
DirectNet... jméno použito v [3], ale moje chyba, měl jsem to zkontrolovat :-(
Ohledně přechodu programu na vyšší verzi. V té knížce co jsem četl byly všechny funkce zakončeny na číslo devět - tj. funkce patřící do directX devět. Až vyjde DX deset, budu moct používat funkci, která končí na devítku, nebo budu muset přepisovat zdrojáky? U padesáti kilových her to může být na chvíli, ale co třeba až budou mít zdrojáky mega? Chtěl bych tě vidět.
"DX6 prineslo: Direct3D zacina byt pouzitelne (DX5 D3D se uzivalo velmi zridka, spise vubec ne)" - už v šesté verzi začíná být direct3D použitelné, ale to nevadí protože se předtím nepoužívalo (když nebylo použitelné, tak se není čemu divit!!! :-)
Ale jinak všechno v dobrym...
Tva odpoved nic nemeni na platnosti mych poznamek ale to neni jadrem problemu. Ani si nemyslim ze tvuj clanek je kdovijak spatny.
Me pripada zvlastni prave to o cem pises. Direct3D a OpenGL jsou dve stoprocentne rozdilna API ktere ve vysledku delaji naprosto totez. Jak je tedy chces porovnavat? Jedine reseni vidim v tom postupne vypsat vsechny objekty a metody D3D a funkce OpenGL. Ale o OpenGL byl na ROOTu vycerpavajici serial a D3D neni free software ani open source.
Od cloveka ktery prekladal NeHe tutororialy bych ocekaval spis serii clanku ve ktere postupne ukazes ruzne cool graficke efekty a vychytavky pro mirne pokrocile v OpenGL, ktere si kazdy kdo ma zajem doma vyzkousi. Myslim ze u tohoto tematu bys byl jako ryba ve vode a nekomentoval bych zadne nepresnosti.
Jen se vyjádřím ještě k těm zdrojákům - pokud si stahneš SDK pro desítku, až vyjde, tak (podle mě) nemusíš nic přepisovat, stejně jako jsi nemusel do teď. Nad novějším SDK myslím můžeš klidně kompilovat starší zdrojáky... Prostě to jen bude využívat starší DX a spustíš pak výsledek i na každém stroji s nainstalovaným novějším. Když se podíváš kupříkladu na include adresář u DX SDK 9.0nevimco (ten co tu mám já :) tak tam najdeš jak d3d.h (do verze 8), tak d3d8.h a d3d9.h!
Jinak doufám, že jsme autora neodradili od napsání dalšího dílu, mě osobně by to každopádně mrzelo, těšil jsem se, že se podívám na pohled jiného člověka na srovnání těchto dvou zmiňovaných API.
pamatuju se jak mi kamaradi , kteri me ucili programovat grafiku vzdycky rikali. Pokud neumis programovat v directX a openGL stejne nikdy nekritizuj ten ktery API :)
V oblasti programovani her a vubec 3dgrafiky se trochu pohybuju takze si dovolim par nazoru.
Obecne vlastnosti openGL :
nezavisle na operacnim systemu a na HW,
slouzi pro psani grafickych aplikaci
nepodporuje okenka
neni objektove orientovany (openGL 2 s velkym ? )
bylo uznane jako standard
primo lze vykreslovat pouze body,usecky, polygony a bitmapy. Geometricke objekty ve 2d i 3d se proto vykresluji sledem jejich vrcholu coz vyhovuje zejmena grafickym akceleratorum.
Pro me asi ma OpenGL omezeni prave v tom , ze chybi prikazy pro praci s komplexnimi objekty .Take je spousta fint , ktere jsou v directX a v openGL se musi resit pres extensions. V tech je celkem bordel a nekdy je k nim problem sehnat dokumentaci.
Samozrejme zasadni vyhoda pro toho co neprogramuje jenom pro win je prenositelnost ovsem dan za to je prave tech par nevyhod vyse.
Ted k directX
Co se mi zda vyhodne oproti OGL:
Samozrejme technologie COM(component object model)
Komplexnost DirectX je zajistena vyrobci HW , protoze tyto komponenty stavi primo na miru tomuto API.Je to kupodivu diky politice MS , ktery definoval konvence(promenne,struktura dat take funce a dalsi) kterymi se vyrobci primo ridi .Prave proto na rozdil od OpenGL se pri programovani direcX clovek nemusi ohlizet na nejake HW vlastnosti komponent.
Samozrejme zasadni nevyhoda pro zdejsi osazenstvo je neprenostilenost :)) No a taky u programovani v directX je nutno ovladat objektove orientovane programovani , ale to snad uz neni o cem se bavit. Proto se zda ze OpenGL je jednodussi jenze takhle muze mluvit pouze zacatecnik , ktery programuje tocici se krychli . Jakmile kod naroste je vyhoda na strane directx.
Neco o rychlosti. V podstate uz davno neni co resit rychlost daneho grafickeho bazmeku uz zalezi daleko vic na optimalizaci kodu nez na druhu API to uz je obecne znamy fakt takze pri volbe jestli to nebo rozhoduji jine vlastnosti .
jinak treba k tomu Carmakovi a doomu 3. Kdyz Carmack fuckoval directx tak byla venku verze 5 .Ted naposled kdyz jsem cetl jeho nazory tak psal , ze sila a vlastnosti directx se rozhodne uz nedaji prehlizet.
sry za ten delsi text ale to co je v tom clanku je opruz uvidime ta pokracovani :)
no ja vidim hlavni rozdil v tom OpenGL je proceduralni
glBegin (GL_TRIANGLES);
glVertex (0,0,0);
glVertex (1,1,0);
glVertex (2,0,0);
glEnd ();
a D3D je pres bufry, tj. neco jako (velmi znamy priklad)
v = &buffer.vertexes[0];
v->x = 0; v->y = 0; v->z = 0;
v++;
v->x = 1; v->y = 1; v->z = 0;
v++;
v->x = 2; v->y = 0; v->z = 0;
c = &buffer.commands;
c->operation = DRAW_TRIANGLE;
c->vertexes[0] = 0;
c->vertexes[1] = 1;
c->vertexes[2] = 2;
IssueExecuteBuffer (buffer);
To ze OpenGL implementuje minimimum beru jako vyhodu, zbytek se da delat pomoci GLU nebo jinych veci treba (pro mne zajimave http://glscene.sourceforge.net/)
atd.
To, že OpenGl implementuje minimum znamená, že je v ní take minimum věcí implementováno standardně.
A nějaké objektová architektura by OpenGL také neuškodilo, zvlášť ve 3D grafice, která přirozeně tíhne k objektovému modelu (doufám, že tušíte, co je to OOP a jaké má výhody). Ovšem respektuji, že alternativní platformy nemají výkonné binární rozhraní aka COM, takže jim vlastně pro její implementaci schází základní infrastruktura.
Eeee?
Co to meles?
Takce ten rok trvajici projekt v C++ na Linuxu, co jsem prave dokoncil vlastne nebyl OOP, protoze nepouzival COM?
Co ma, probuh, spolecneho OOP a COM?
COM objekt je prachobycejna dynamic loadable knihovna implementujici povinne rozhrani pro pristup zvenci, jednotlive instance se pak daji z vnejsku volat obdobne jako JAVA beans. (to ostatne obyc knihovny taky, jenom interface neni zarucen) Tim cely "zazrak" konci, v linuxu viz DCOP, CORBA.
Napsat si objektovy wrapper nad cokoliv (nejen OpenGL) je otazka par clovekohodin, vyvoj pak neni omezen na predpripravenou objektovou enkapsulaci.
Jeziskunakrisku, vypada to, ze se tu zacinaji stahovat znalci z www.zive.cz.
Můžu se jen zeptat, psal jsi takový objektový wrapper právě na OpenGL? Znám spíš DX, ale když vidím jeho rozsah, tak napsat takový "malý" wrapper by podle mě zabralo řekněme 3, 4 měsíce? Nevím, je to hodně hrubý odhad, ale mluvit tu o pár člověkohodinách.. Kolik je přibližně pár? :)
Jinak samozřejmě souhlasím s tím, že COM ne= OOP. Ale možná to šlo vyjádřit i jinak. Konkrétně ta poznámka o Živě mi přijde, no, ... ale já taky někdy ujedu..
Jinak doufám, že dnes nepřidělám Johance práci a nezblbnu ji:)
Psat "objektovy wrapper" na openGL je blbost a jako takova byla ARBem zamitnuta na vecne casy a to z 3 duvodu:
1. Vsechny hlavni jazyky umi volat ceckovskou API. Namapovat vlastni obekty na C++ obekty ovsem neumi zadny.
2. Hlavni uzivatele OpenGL (GIS, CAD/CAM ale i Hry) nevidi zadny problem s jeho "seriovou" podstatou. Navrh na zmenu k objektum obvykle prijdou ze strany byvalich uzivatelu DX standardu ktery se jeste nezabydleli. Objektove programy (vcetne velkych CAD/CAM a GIS systemu, temer vzdy C++) se velmi dobre obejdou s takovym OpenGL API, jake zatim je.
3. Pokud si nekdo presto mysli ze objekt "textura" je vlastne dobry napad, muze si najit nejaky OSS wrapper na webu a neotravovat s tim zbytek (spokojenych) uzivatelu OGL
Je mi líto, žes nepochopil mou reakci. Nekritizuji ani DX ani OGL (už jen proto, že ho nepužívám!). Myslím, že nikoho neotravuji s tím, že objekt textura je dobrý nápad. Kdes na to přišel?... Já jsem pouze někde výše řekl, že MĚ OSOBNĚ tento přístup víc vyhovuje... Nikomu nevnucuji svou myšlenku.
Jen tak obecný výkřik. Doufal jsem, že tady na Rootu nebude docházet k podobně agresivním výstřelkům... zmýlil jsem se... Ach jo, kdyby jen nebyli všichni tak militantní a taky poslouchali, co ostatní říkají a nehájili jen slepě svůj názor.
Nevim jak moc tomu rozumíte, ale v čem vám přijde, že je bordel v extenzích u OpenGL?? Tohle tvrdí hlavně lidi, co se v tom moc neorientují.
Pokud děláte hru, kde použijete všechny běžné technologie krom shaderů, tak vám stačí používat extenze ARB (tj. žádný problém). Se shaderama 2.0+ opět není problém. Jediný problém je pouze u shaderů 1.0-1.4. Ovšem i tam stačí udělat jen 2. možnosti navíc (ATI, nVidia).
Vazeni,
vidim ze moja snaha dozvediet sa nieco o grafickych API z amaterskeho hladiska nie je uplne zbytocna :)
Kazdopadne, otazocka... skusal niekto z vas naprogramovat cosi pre Glide alebo MeTaL? Preco vlastne aplikacie pre tieto API zvykli na 'svojich' kartach bezat lepsie nez pre OGL/DX?
Thx :)
Poznamky o uzasnosti COM me vyprovokovaly:
COM je absolutni sracka, ktera s objektovym programovanim ma spolecne pouze jmeno. Neustale pouzivani klicoveho slova friend svedci o zhovadilosti navrhu. A pri ponoreni do implementacnich detailu, kdy se v makrech pretypuje ukazatel na tridu na (char *), pricte se nekolik bytu a pretypuje na ukazatel na metodu... Nemam slov.
A ta ukazka kodu v OpenGL a DX hovorila sama o sobe. DX mi napadne pripomina volani sluzeb DOSu z Assembleru.
http://nehe.opengl.cz/tut_10.php je opravdu kouzelny manual. Uz ten uvod "Do současnosti jsme programovali otáčející se kostku nebo pár hvězd" Bohuzel kdyz se mi stane, ze koupim knihu za 500,-(mam na mysli Visual C#.NET krok za krokem...) a skoro na kazde druhe strane je chyba, protoze se nekdo neobtezoval precist si po sobe svuj cesky preklad natoz zamestnat korektora uz to tak usmevne neni... No ale ve srovnani Nehe manualem je preklad zminovane knihy dilem mistra slohu mezi programatory.
Chcel by som sa opytat co si myslite o tom ze karty hardwarovo podporuju DX.
Vyznam sa v tom dost malo, tak dufam ze do mna nezacne kazdy skakat ze tomu nerozumiem.
Dost ma udivuje ale ako tu ludia po sebe "kricia" a vzajomne sa osocuju.
Prax myslim ukazuje ze DX je docela pouzitelny a ze sa aj pouziva. Hry s nim fachaju. Ano fachaju aj s OpenGL.
Takze asi taka strasna hruza to nebude.