OpenGL in njega nasledniki

Čez prvonovembrske praznike sem se lotil nepojmljivega: skodiral sem svojo prvo OpenGL aplikacijo. Moram reči, da sem navdušen nad preprostostjo vmesnika (OpenGL je nizkonivojski API za 2D in 3D grafiko); vedno sem imel občutek da gre za nekaj zelo kompliciranega1, ampak dejanska uporaba je zelo podobna konceptom iz 3D paketov (3DSmax, Blender,..).

Definiraš točke v 3D koordinatnem sistemu, potem nanje napneš trikotnike, črte ali druge primitive, in zadeva že kar nekako izgleda. Če točkam določiš še barvo, bo renderer sam interpoliral barvo ploskev. Ko je objekt pripravljen, ga lahko premakneš po (x,y,z) ali poljubno rotiraš, tako da je v resnici najmanjši problem narisati vrtečo se kocko:

Na posnetku sta 2 vrteča se ikozaedra2 (dvanajsterca oz. telesi z 12 ogljišči) in kocka, ki se premika po Lissajousovi krivulji (frekvenca po osi y je točno dvakratnik frekvence po osi x).

Pri učenju sem si pomagal z naravnost odličnim tutorialom Jeffa LaMarcha, ki sicer opisuje uporabo na iPhonu, se pa tematike res loti pri osnovah. Priporočam! Zadeva pa je zaradi abstrakcijske narave OpenGL-a aplikabilna na praktično vsa okolja.

In prav to me je pri vsem tem najbolj fasciniralo: totalna abstrakcija. OpenGL definira celo svoje podatkovne tipe (GLint, GLfloat, ipd.), s katerimi jamči, da se bo zadeva prevedla na praktično vsaki arhitekturi, ne glede na uporabljano velikost (sizeof) tipov. Zadeva si zato lahko brez težav sposodi moto Jave “napiši enkrat, poganjaj povsod”.

In povsod pomeni tudi na spletu, v obliki WebGL. Ta je trenutno sicer še v postopku standardizacije3, gre pa za razširitev HTML canvasa z API-ji na osnovi OpenGL ES (= OpenGL for Embedded Systems), ki predstavlja podmnožico funkcionalnosti polnega OpenGL. OpenGL ES je podprt tudi na vseh iOS napravah (iPhone, iPad), Androidu, Symbianu in WebOS-u.

Ta prenosljivost pa tudi razjasni, kako so lahko Googlovci tako hitro sportali Quake v HTML5: koda za quake 3 je pod GPL, tako da jo je bilo treba najbrž samo prestavit.

  1. kriva je seveda prva izkušnja, ko sem kot froc, še preden sem poznal sinus in kosinus, brez uspeha poskušal reverse-engineerati demo vrteče se kocke v Delphiju. Pa tudi OpenGL še ni bil ravno polnoleten takrat :) []
  2. koordinate ogljišč mnogih teles lahko dobimo na Wolfram Alphi, takole: dodekaeder []
  3. za poganjanje rabiš zaenkrat še development build Firefoxa, Chroma ali Safarija []