OpenGL
OpenGL (Open Graphic Librarie) OpenGL este o specificație standard care definește o aplicatie cross-platform API (application programming interface) foarte utilizat pentru programarea componentelor grafice 2D si 3D ale programelor de calculator. Interfața constă in peste 250 de apeluri diferite care pot fi folosite pentru a desenta scene 3D complexe din primitive simple. OpenGL a fost dezvoltat de Silicon Graphics Inc. (SGI) in 1992 și este foarte utilizat in softuri CAD, realitate virtuală, visualizare științifică, simulări de zboruri sau jocuri pe calculator. Acest ultim domeniu este in strânsă competiție cu tehnologia DirectX de la Microsoft (vezi OpenGL vs. Direct3D). OpenGL este condus de un consortiu tehnologic non-profit, Khronos Grup.
Design
OpenGL servește două scopuri principale:
- Pentru a ascunde complexitatea interfațare cu diferite 3D acceleratoarele, prin prezentarea programatorului cu un singur API uniform.
- Pentru a ascunde capabilități diferitelor platforme hardware, prin solicitarea ca toate implementarile acceptă caracteristica OpenGL ca un set complet (cu ajutorul software-ul emulation, dacă este necesar).
Funcționarea OpenGL de bază este de a accepta primitive, cum ar fi puncte, linii și poligoane, și de a le converti în pixeli. Acest lucru se face printr-o conducta grafică - (graphics pipeline), cunoscută sub numele de mașină de stare OpenGL. Cele mai multe comenzi OpenGL primitive, fie problema la conducta grafica, sau configura felul în care aceste procese de conducte de primitive. Înainte de introducerea OpenGL 2.0, fiecare etapă din conducta efectuat o funcție fixă și a fost configurabil numai în limite restranse. OpenGL 2.0 oferă mai multe etape, care sunt pe deplin programabile folosind GLSL.
OpenGL este API procedural de nivel mic, care necesită ca un programator să impună măsurile exacte necesare pentru a face o scena. Acest lucru contrastează cu alte API-uri, în care un programator are nevoie doar pentru a descrie o scenă și poate lăsa biblioteca și gestiona detalile și redand finalul scenei. OpenGL's de nivel mic, impune programatori să aibă o bună cunoaștere a conducta grafică, dar, de asemenea, oferă o anumită libertatea de a pune în aplicare algoritmi noi de redare.
OpenGL are un istoric de influente de la dezvoltarea acceleratoarelor 3D, promovănd un nivel de bază de funcționalitate, care este acum în comun cu nivelul hardwareului de consum:
Example
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știenți de faptul că cea mai mare parte API-urile folosite în codul de mai jos au fost scoase din uz în și după specificatiile OpenGL 3.0.
glClear( GL_COLOR_BUFFER_BIT );
- Această declarație golește tampon 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 spatiu relativ la spatiul de proiectie 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 a inițializa matricea modelview. Această matrice defineste o transformare de la model de-relativă coordonate în spațiu aparat de fotografiat. Combinație a matricei modelview și matricea de proiecție transformă obiecte 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 desena un pătrat verde în planul XY.