THESE PAGES ARE FREE OF

JAVA
FRAMES

STORED ON A LINUX SERVER, AND RUNNING SPACEHAWKS' OWN LINUX BASED VOTING AND MESSAGE BOARD CGI.

NO MICROSOFT RELATED PROGRAMS WERE USED TO CREATE THIS SITE.

VOYAGER
IBROWSE
AWEB
 
MSIE
 

WORLDNEWS ISSUE 19
3D-s rendszerek

Kiváncsiságból utánanéztem a 3D-s API-knak egy összehasonlítás végett, gondoltam megosztom veletek tapasztalataimat. Eredetileg csak az OpenGL (illetve ennek GPL változata, a Mesa3D GL) érdekelt, és máig is csak ezt használom, de fúrta az oldalamat a kíváncsiság hogy a Windozeos Direct3D (a DirectX része ha jóltudom) mennyivel tud többet/kevesebbet, valamint ha már ennyire hasonlítgatok, megnézem a Warp3D-t... Sajnos ez utóbbinak csak a dokumentációját van módomban tanulmányozni 3D-s grafikus kártya hiányában, dehát ez a cikk jobbára úgyis developereknek szól.

Az OpenGL és a DirectX összehasonlítás forrásául a Direct3D vs. OpenGL: A Comparison című (angol nyelvű) cikk szolgált.

OpenGL

Az SGI-féle OpenGL egy procedurális API, az Iris GL utódja, amely a UNIX munkaállomásokról származik. Az Iris GL-t eredetileg a Silicon Graphics, Inc. 3D grafikus munkaállomásai használták.

Az "OpenGL" az OpenGL Architecture Review Board (ARB) bejegyzett védjegye. Az ARB határozza meg azokat az alapelveket, amelyek alapján egy implementáció OpenGL-nek hívhatja magát, valamint ez a szervezet irányítja a konformitási tesztek fejlesztését, amelyekel az implementációk megfelelősége ellenőrizhető.

Az OpenGL egy állapotgépet definiál, amely a renderelés folyamatát vezérli. Ennek az állapotgépnek az attribútumai módosíthatók az OpenGL API-val.

Mesa

A Mesa3D szabad forrású library nagyon hasonló az OpenGL-hez (pontosabban annak legújabb, 1.2-es változatához), csak épp készítője, Brian Paul az alapoktól újraírta azt az SGI engedélyével. Mivel nem rendelkezik OpenGL licensszel, nem jelent(het)i ki hogy a Mesa3D bármiféleképpen kompatibilis vagy csereszabatos az OpenGL-el. Mindezek ellenére, a Mesa3D library megfelel az OpenGL kompatibilitási teszteknek, és a jogi/technikai dolgokat leszámítva a Mesa3D egy igazi alternatívája az OpenGL-nek.

A Mesa3D-nek van egy elfogadható Amigás implementációja, igazi Amigás APIval a GL kontextus létrehozására, amely Warp3D-n keresztül támogatja a hardwares gyorsítást is. A software render rész eléggé siralmas, mivel a Mesa3D texture render része igen erős C compilert igényel, amely a StormC-nek túl nagy falat.

Direct3D

A Microsoft Direct3D egy COM bázisú 3D API, amely egy third-party 3D APIból ered x86 architektúrára. A Microsoft ezt 1996-ban szerezte meg, ettől kezdve található meg a DirectX technológia részeként. A Direct3D tartalmaz egy közvetlen, és egy strukturált scene-grafika interfészt, mi csak a közvetlen móddal foglalkozunk.

A Direct3D API-t COM interfészeken keresztül definiálják, működését a Microsoft SDK-jának help filejai és példaprogramjai írják le.

COM: Common Object Model, egy "platformfüggetlen" rendszer, amelyre a Microsoft OLE és ActiveX technológiái épülnek

Warp3D

A rendszer ötlete Sam Jordantól származik. Szintén procedurális API, kizárólag Amigákra. Néhány aspektusában hasonlít az OpenGL-hez, de pl. a rendering utasítások más felépítésűek.

Én személy szerint nem értek egyet Sammel a abban, hogy egy jól megírt Warp3D driver lényegesen hatékonyabb lenne mint egy hasonló OpenGL driver. Az OpenGL valóban összetettebb, azonban sokkal robusztusabb is, valamint a 3D hardware úgyis a processzorral párhuzamosan dolgozik. Kicsit ironikus, hogy egy OpenGL program bármilyen Amigán futhat, míg egy Warp3D kizárólag grafikus kártyán, lévén (még?) nincs hozzá software render modul. Ugyanakkor számomra kétséges, hogy a Warp3D meg tud-e felelni a 3D-s gyorsítók igényeinek, ugyanis az Amigán kívüli világban már vannak olyan 3D kártyák, melynek képességei a jelenlegi Warp3D APIval nem használhatók ki, bár a ViRGE-khez és Perimedia2-khöz tökéletesen megfelel.

Mi a különbség?

A táblázat adatait a fenti cikkből ollóztam ki, a Warp3D-s oszlopnak magam néztem utána. Csak pár hónapja foglalkozom 3D-s grafikával, így pár fogalom még igencsak homályos számomra. Ha kihagytam valamit a táblázatból, az azért lehet, mert

  • nem tudtam utánanézni a dolognak kellő bizonyossággal
  • mégcsak homályos fogalmam sem volt a dologról
  • egyszerűen kifelejtettem

Ja, és sajnos nem találtam a dokumentációk tanulmányozása során olyan funkciót, amit a Warp3D ismer, de a többi API nem. Ha kérdőjel van valahol, ott vagy nem tudom a pontos választ, vagy nem értek egyet a fenti cikkel. Szóval ha valami nem stimmel...

Tulajdonság Warp3D OpenGL Direct3D
3.0 1.2 core 7.x 8.x
Támogatott OS AmigaOS Win(9x,NT,2k),
AmigaOS, *IX,
MacOS, BeOS
Win(9x,2k,CE) Win(9x,2k)
Nem gyorsított funkciók szoftveres emulációja nem igen nem nem
Modellezés
Vertex transzformáció nem igen igen igen
Programozató vertex blending nem nem nem igen
Fixfunkciós vertex blending nem nem igen igen
Paraméterezhető görbe/felület primitívek nem igen nem igen
Hierarchical display lists nem igen nem nem
Rendering
Kétoldalú megvilágítás nem igen nem nem
Pontméret és vonalvastagság állítás igen igen nem igen
Programmable pixel shading nem nem nem igen
Triadic texture blending functions nem? nem igen igen
Cube environment mapping nem nem igen igen
Volume textures nem igen nem igen
Multitexture cascade nem igen nem igen
Texture temporary result register nem nem nem igen
Mirror texture addressing nem nem igen igen
Texture wrapping igen nem igen igen
Range based fogging igen nem? igen igen
Bump mapping nem nem igen igen
Add signed texture blend nem nem igen igen
Frame buffer
Hardware-független Z Buffer lekérdezés igen igen nem nem
Fullscreen antialiasing nem igen nem igen
Depth of field nem igen nem igen
Motion blur nem igen nem igen
Accumulation buffer nem igen nem nem
Egyéb
Picking support nem igen nem nem
Multiple monitor support nem nem igen igen

A dolgok persze nem mindig ennyire egyértelm\ek, pár igen/nem bitbe esetleg bele lehet kötni, de igyekeztem következetes lenni, azaz ha egy adott API nem tudja maradéktalanul az adott funkciót, akkor ott már "nem" szerepel.

Warp3D vagy Mesa3D?

Elég nehéz kérdés, hogy Amigán melyiket válasszuk. Az OpenGL sokkal több funkcióval bír, és nem utolsósorban software renderrel tűrhetően eldöcög egy *Vízió nélküli PPC-n is, valamint ezzel a 3D hardware képességeiben fellelhető hiányosságokat is képes befoltozni.

A Warp3D minden bizonnyal nagyobb sebességet képes produkálni, mint az OpenGL, és "Amigásabb" a programozói interfésze.

Így ha Amigásoknak szánunk pl. felhasználói egy 3D-s a programot, akkor talán a Mesa3D a praktikusabb, hiszen működik majdnem mindenütt. Portolhatóság kérdésében mindenképpen a Mesa a nyerő, bár C-ben tulajdonképp egy egyszerű interfész modullal "átfordíthatjuk" a Warp3D hívásokat OpenGL-re, vagy akár DirectX-re nem túl nagy energia-ráfordítással, így egy játékhoz, amelyet elsősorban Amigára szán a készítő, talán a Warp3D a jobb.

Hogy hétköznapian fejezzem ki magam: A Warp3D inkább sebesség-orientált, az OpenGL pedig inkább minőségre megy: előbbi a 3D hardware által nem támogatott funkciókat egyszerűen figyelmen kívül hagyja a sebesség érdekében, míg utóbbi azokat software renderrel megvalósítja. Viszont pont e célból született a MiniGL is...

Attis

 

 

 
 
 
GLOBAL LINKS DOWNLOAD AREA MESSAGE BOARD