Usporedba Direct3D i OpenGL

Direct3D

OpenGL i Direct3D su, što se tiče matematičke podloge, identični. Razlikuju se samo u nekim pristupima kod 3D modeliranja koji se opisuju u nastavku. Kao prvo, Direct3D podržava samo sljedeće primitivne oblike:

  • Point List

  • Line List

  • Line Strip

  • Triangle List

  • Triangle Strip

  • Triangle Fan

U odnosu na OpenGL nedostaju neki primitivni oblici vezani uz poligone: Quad List, Quad Strip. Direct3D koristi dva trokuta preko kojih se sastavlja bilo koji četverokut. Postoji i pristup kod kojeg je i preko TRIANGLE FAN-a isto moguće nacrtati četverokut.

U odnosu na GLUT, Direct3D ima specifičan način na koji se prikazuju primitivni oblici na ekranu. Koristi se tzv. Flexible Vertex Format. Radi se o tome da je unaprijed potrebno pripremiti točke u međuspremnik (vertex buffer) iz kojeg će se, ovisno o vrsti primitivnog oblika, točke prikazati na ekranu tako da tvore primitivne oblike.

Razlog korištenje FVF načina je u tome što se grafičkoj kartici ne trebaju poslati npr. podaci da nema teksture, da nije definirana normala za osvjetljenje ili da nije postavljen alpha blending. To je nepotrebno, ako ne postoji podatak tada ga ne treba ni slati. Stoga je prije upisa točaka u vertex buffer potrebno definirati strukturu u koju će se upisivati podaci te opisati Direct3D-u format strukture (koji su podaci upisani u strukturu).

Na sljedećoj slici se može vidjeti koji se svi podaci vežu uz jednu točku. Korištenjem FVF načina grafičkoj kartici se šalju samo oni podaci koji joj trebaju, a ne svi podaci jer je nepotrebno.

U primjerima se nalaze primjeri programa za Direct3D koji su izrađeni u sklopu seminara i koji mogu pomoći u shvaćanju osnova Direct3D-a. Znanje iz OpenGL-a (GLUT) je moguće jednostavno iskoristiti i u Direct3D programiranju uz manje napore. Poteškoću predstavlja programiranje na nižoj razini (u C++-u), ali razvoj vlastitih code snippeta može pojednostaviti dosta stvari.