OpenGL (Open Graphics Library)[3][4][5] este o specificație a unui standard care definește unAPI (Application Programming Interface)multiplatformă foarte utilizat pentru programarea componentelor grafice2D și3D ale programelor de calculator.Interfața constă în peste 250 de apeluri diferite care folosesc la a desena pe ecranul calculatorului scene 3D complexe din primitive (dinprimitives, elemente simple). OpenGL a fost inițial dezvoltat de companiaSilicon Graphics, Inc. (SGI) în 1992 și este foarte utilizat în grafică asistată de calculator,realitate virtuală, vizualizare științifică, simulări de zboruri sau jocuri pe calculator. Acest ultim domeniu este în strânsă competiție cu tehnologiaDirectX de laMicrosoft (compară OpenGL cuDirect3D). Proiectul OpenGL este condus de compania Khronos Group, un consorțiu tehnologic non-profit.
să mascheze (ascundă) complexitatea interfețelor cu diferite acceleratoare 3D, prin confruntarea programatorului cu un singur API uniform.
să mascheze capabilitățile diferitelor platformehardware, prin cerința ca toate implementările să accepte OpenGL ca un set complet (cu ajutorul emulării de software, dacă este necesar).
Funcțiia de bază a OpenGL este de a accepta primitive, cum ar fi puncte, linii și poligoane, și de a le converti înpixeli. Acest lucru se face printr-oconductă grafică (graphics pipeline), cunoscută sub numele demașină de stare OpenGL. Cele mai multe comenzi OpenGL primitive, sunt fie probleme laconducta grafică, sau configurarea felului în care aceste procese de conducte de primitive. Înainte de introducerea OpenGL 2.0, fiecare etapă din conductă efectua o funcție fixă și a fost configurabilă numai în limite restrânse. OpenGL 2.0 oferă mai multe etape, care sunt pe deplin programabile folosindGLSL.
OpenGL este un API procedural de nivel mic, care necesită ca un programator să impună măsurile exacte necesare pentru a face o scenă. Acest lucru contrastează cu alte API-uri, în care un programator are nevoie doar pentru a descrie o scenă și poate lăsa biblioteca să gestioneze detalile redând finalul scenei. OpenGL's de nivel mic, impune programatorilor să aibă o bună cunoaștere aconductei grafice, dar, de asemenea, oferă o anumită libertatea de a pune în aplicare algoritmi noi de redare.
OpenGL are un istoric de influențe de la dezvoltarea acceleratoarelor 3D, promovând un nivel de bază de funcționalitate, care este acum în comun cu nivelul hardware-ului de consum:
Acest exemplu va elabora un pătrat verde de pe ecran. OpenGL are mai multe moduri de a realiza această sarcină, dar acest lucru este cel mai ușor de înțeles. Cu toate acestea, cititorul ar trebui să fie conștient de faptul că cea mai mare parte din API-urile folosite în codul de mai jos au fost scoase din uz în și după specificațiile OpenGL 3.0.
glClear(GL_COLOR_BUFFER_BIT);
Această declarație golește tamponul de culoare, astfel încât ecranul va începe gol.
glMatrixMode(GL_PROJECTION);/* Subsequent matrix commands will affect the projection matrix */glLoadIdentity();/* Initialise the projection matrix to identity */glFrustum(-1,1,-1,1,1,1000);/* Apply a perspective-projection matrix */
Aceste declarații vor inițializa matricea de proiecție, stabilind o matrice 3D care reprezintă zona de vizualizat. Această matrice transformă obiecte de la aparatul de fotografiat din spațiu relativ la spațiul de proiecție al OpenGL.
glMatrixMode(GL_MODELVIEW);/* Subsequent matrix commands will affect the modelview matrix */glLoadIdentity();/* Initialise the modelview to identity */glTranslatef(0,0,-3);/* Translate the modelview 3 units along the Z axis */
Aceste declarații inițializează matricea modelview. Această matrice definește o transformare de la model de-relativă coordonate în spațiu la aparat de fotografiat. Combinația matricei modelview și matricea de proiecție transformă obiectele de la modelul spațiu de proiecție comparativ cu spațiul ecranului.
glBegin(GL_POLYGON);/* Begin issuing a polygon */glColor3f(0,1,0);/* Set the current color to green */glVertex3f(-1,-1,0);/* Issue a vertex */glVertex3f(-1,1,0);/* Issue a vertex */glVertex3f(1,1,0);/* Issue a vertex */glVertex3f(1,-1,0);/* Issue a vertex */glEnd();/* Finish issuing the polygon */
Aceste comenzi vor desena un pătrat verde în planul XY.