Sunteți pe pagina 1din 48

Grafic pe calculator - 2011

Grafica pe calculator reprezinta acele metode si tehnici de conversie a datelor catre si de la un dispozitiv grafic prin intermediul calculatorului. Aplicarea graficii pe calculator este format din urmtoarele domenii principale:

Vizualizarea informaiei Proiectare Modelare (simulare) Interfa grafic pentru utilizatori GUI

n prezent cunoaterea elementelor de baz ale graficii pe calculator este necesar inginerului, omului de tiin, artitilor plastici, designerilor, fotografilor, pictorilor de animaie etc.

Datorit calculatorului putem avea la dispoziie n cteva fraciuni de secund variaii multiple de culoare, forme, compoziii etc. n baza tenologiilor graficii computerizate s-au dezvoltat:

Interfaa de utilizator - GUI Proiectarea digital n arhitectur i grafica industrial Efecte vizuale specializate, cinematografia digital Grafica pe computer pentru filme, animaie, televiziune Reeaua Internet Conferinele video
1

Grafic pe calculator - 2011


Televiziunea digital Proiecte multimedia, proiecte interactive Fotografia digital i posibilitile avansate de prelucrare a fotografiei Grafica i pictura digital (cu 2 laturi eseniale imitarea materialelor tradiionale i noile instrumente de lucru digitale) Vizualizarea datelor tiinifice i de afaceri Jocuri la calculator, sisteme de realitate virtual (de ex. simulatoare pentru aviaie) Sisteme de proiectare automatizat Tomografie computerizat Poligrafia Grafica laser

Grafica pe calculator este de asemenea i un domeniu de activitate tiinific Grafica digital OBSERVATIE: Grafica rastru i vector stau la baza graficii digitale. Grafica digital este un domeniu al informaticii care acoper toate aspectele legate de formarea imaginilor utiliznd un computer. Termenul englez corespunztor este computer graphics. Grafica digital mai este numit uneori grafic de computer, grafic de calculator, grafic pe calculator, grafic computerizat. Grafica digital este o activitate n care computerul este utilizat pentru sintetizarea i elaborarea imaginilor, dar i pentru prelucrarea informaiei vizuale obinute din realitatea ce ne nconjoar.
2

Grafic pe calculator - 2011

Grafica digital se divizeaz n mai multe categorii:

Grafica bidimensional (se constituie din grafic raster i grafic vector) Grafica Fractal Grafica tridimensional (este des utilizat n animaie, spoturi publicitare, jocuri la computer etc.) CGI grafica (CGI n englez imagini, personaje generate de computer) Grafica animat Grafica video Grafica web Grafica Multimedia

n grafica digital se opereaz cu diverse elemente grafice, pentru elaborarea i controlul imaginilor ca de exemplu: pixel, punct, linie, curb, poligon etc. La baza graficii digitale (i n special grafica bidimensionala) stau doua tipuri de calculaii, Raster (sau rastru) i Vector (vectorial). Grafica rastru i vector stau la baza graficii digitale, ele sunt utilizate de programele 3 dimensionale, programe pentru montare video, animaie, etc. Prezentarea la calculator a imaginii de tip Raster se face n baza segmentrii unei suprafee cu ajutorul unor ptrele mici care se numesc pixeli. O imagine rastru este un tablou format din mai multi pixeli. Cu ct mai muli pixeli avem n imagine cu att calitatea detaliilor e mai nalt. Acest tip de grafic permite s cream i s reproducem oricare imagine cu multitudinea de efecte i subtiliti, indiferent de complexitate. Imaginile procesate cu ajutorul scanerului sau aparatelor foto snt formulate ca raster.

Neajunsurile e complicata redimensionarea graficii rastru, deoarece la interpolare (adugare de pixeli n raport de cei
3

Grafic pe calculator - 2011

existeni n imagine) computerul inventeaz calculnd pixelii nu ntotdeauna satisfctor, cu toate c sunt diverse metode de interpolare. Grafica vectorial este un procedeu prin care imaginile sunt construite cu ajutorul descrierilor matematice prin care se determin poziia, lungimea i direcia liniilor folosite n desen. Grafica vectoriala e bazat ca principiu pe desen cu ajutorul liniilor calculate pe o suprafaa. Liniile pot fi drepte sau curbe. n cazul imaginilor vectoriale fiierul stocheaz liniile, formele i culorile care alctuiesc imaginea, ca formule matematice. Imaginile Vector pot fi mrite i micorate fr a pierde calitatea. O imagine poate fi modificat prin manipularea obiectelor din care este alctuit, acestea fiind salvate apoi ca variaii ale formulelor matematice specifice. Este des utilizata n imagini cu funcii decorative, caractere-text, logotipuri, infograme, decor, cat i n proiecte sofisticate 3D, montare video, animaie, etc. Exist sisteme sofisticate de control cromatic al imaginilor. Adaptarea valorilor cromatice se aplic n funcie de necesitai i scopuri. Astfel, pentru controlul de culoare la computere, exist mai multe modele cromatice (sau modele de culoare), care pot fi folosite pentru definirea cromatic a imaginii, pentru selectarea culorilor n procesul desenrii i crerii imaginii, pentru arhivare, etc.
n general exist dou tipuri majore de modele cromatice:

amestecul aditiv RGB (din englez de la Red-Green-Blue, rou-verde-albastru) amestec de culori lumin se utilizeaz pentru ecran, monitor, televiziune, scanare, aparate foto, design web, animaie i altele.
4

Grafic pe calculator - 2011

amestec substractiv CMYK (de la Cyan-Magenta-YellowblacK) amestec de culori pigment se utilizeaz pentru proiecte poligrafice destinate tiparului color.

Unele modele de culoare admit variaii ale diapazonului cromatic, din acest motiv sunt mprite n diverse profiluri de culoare destinate diferitelor necesiti. De exemplu, pentru modelul RGB exist mai multe profiluri. sRGB IEC61966-2.1 diapazon mediu utilizat mai des pentru pagini web, sau Adobe RGB (1998) diapazon mai mare utilizat pentru prelucrarea imaginilor destinate produselor pentru tipar. Pe lng modelele cromatice RGB i CMYK mai exist i altele precum: Lab, HSB / HSL / HSI, Culori Indexate, Culori Pantone/PMS (Pantone Matching System), Culori Spot.

Desktop publishing, abreviat DTP, este o expresie englez din domeniul tipografiei i care s-ar putea traduce prin "publicare cu ajutorul calculatorului de tip desktop". Este procesul de creare i editare (modificare) a unui document cu ajutorul unui computer avnd ca obiectiv final tiprirea lui. n acest domeniu exist programe de calculator specializate ce pot fi mprite n mai multe categorii:

programe de creaie i prelucrare foto (Adobe Photoshop, Corel Photopaint); programe de creaie i prelucrare de grafic vectorial (Adobe Illustrator, Corel Draw); programe de paginare (Adobe InDesign, QuarkXPress, Adobe Pagemaker, Corel Ventura); programe utilitare (Adobe Acrobat Professional, Adobe Acrobat Distiller etc);

Cel mai utilizat program pentru realizarea documentelor ce urmeaz a fi tiprite este Corel Draw. Are setri speciale pentru separaii, overprint
5

Grafic pe calculator - 2011

Monitoarele sunt aparatele ce decodific semnalul electric i genereaz culorile RGB (Red, Green, Blue rou, verde, albastru) prin suprapunere de lumin. Cnd nu exist nici un fel de lumin este generat culoarea neagr, cnd intensitatea prin cele trei canale este maxim, se obine culoarea alb. Teoretic s-ar putea tipri i folosind direct spaiul de culori RGB, ns datorit imperfeciunii hrtiei, cernelii i a mainilor de tipar, se folosete spaiul CMYK (Cyan, Magenta, Yellow, blacK), urmnd ca negrul, care se tiprete la sfrit de procedur, s acopere aceste imperfeciuni. La o lucrare pretenioas este indicat ca imaginile, textele i obiectele colorate s fie combinate atent, mai ales cnd se lucreaz cu culori Pantone, pentru ca la sfrit s nu rezulte amestecaturi nedorite de culoare. Funcia de overprint este suprapunerea la tipar a dou culori diferite, culoarea de deasupra (ultim) acoperind total culoarea de dedesubt (anterioar). Dac activm opiunea Overprint la culoarea neagr, atunci cercul va putea rmne ntreg i nu va mai fi nevoie s fie mai nainte decupat n locurile unde urmeaz a fi tiprit textul negru.

Afiarea i crearea imaginilor vectoriale


6

Grafic pe calculator - 2011

Display-urile computerelor sunt alctuite din puncte minuscule numite pixeli. Imaginile bitmap sunt de asemenea construite folosind aceste puncte. Cu ct sunt mai mici i mai apropiate, cu att calitatea imaginii este mai ridicat, dar i mrimea fiierului necesar pentru stocarea ei. Dac imaginea este afiat la o mrime mai mare dect cea la care a fost creat iniial, devine granulat i neclar, deoarece pixelii din alctuirea imaginii nu mai corespund cu pixelii de pe ecran. Pentru a crea i modifica imagini vectoriale sunt folosite programe software de desen vectorial. O imagine poate fi modificat prin manipularea obiectelor din care este alctuit, acestea fiind salvate apoi ca variaii ale formulelor matematice specifice. Operatori matematici din software pot fi folosii pentru a ntinde, rsuci, colora diferitele obiecte dintr-o imagine. n sistemele moderne, aceti operatori sunt prezentai n mod intuitiv folosind interfaa grafic a calculatorului. Conversia din i n format raster Vectorizarea imaginilor este util pentru eliminarea detaliilor nefolositoare dintr-o fotografie. Conversia din format vectorial se face practic de fiecare dat cnd este afiat imaginea, astfel nct procesul de l salva ca bitmap ntr-un fiier este destul de simplu. Mult mai dificil este procesul invers, care implic aproximarea formelor i culorilor din imaginea bitmap i crearea obiectelor cu proprietile corespunztoare. Numrul obiectelor generate este direct proporional cu complexitatea imaginii. Cu toate acestea, mrimea fiierului cu imaginea n format vectorial nu va depi de obicei pe cea a sursei bitmap. Aplicaiile grafice avansate pot combina imagini din surse vectoriale i raster i pun la dispoziie unelte pentru amndou, n cazurile n care unele pri ale proiectului pot fi obinute de la o camer, iar altele desenate prin grafic vectorial. Vectorizarea Aceasta se refer la programe i tehnologii/servicii folosite pentru a converti imagini de tip bitmap n imagini de tip vectorial. Exemple de utilizare:

n Proiectarea asistata pe calculator (CAD) schiele sunt scanate, vectorizate i transformate n fiiere CAD printr-un process denumit sugestiv hrtie-CAD. n GIS imaginile provenite de la satelii sunt vectorizate cu scopul de a obine hri. n arta digitala i fotografie, imaginile sunt de obicei vectorizate folosind plugin-uri pentru programe ca Adobe Photoshop sau Adobe Illustrator, dar vectorizarea se poate face i manual. Imaginile pot fi vectorizate pentru o mai
7

Grafic pe calculator - 2011

bun utilizare i redimensionare, de obicei far diferene mari fa de original. Vectorizarea unei fotografii i va schimba aspectul din fotografic n pictat sau desenat; fotografiile pot fi transformate i n siluete. Un avantaj al vectorizrii este c rezultatul poate fi integrat cu succes intr-un design precum un logo. Dezavantaje i limitri Principalul dezavantaj al imaginilor vectoriale este c, fiind alctuite din obiecte descrise cu formule matemetice, att numrul acestor obiecte ct i complexitatea lor sunt limitate, depinznd de biblioteca de formule matematice folosit de programul de desenare. De exemplu, dispozitivele digitale, cum ar fi camerele foto sau scannerele, produc fiiere raster care nu pot fi reprezentate fidel folosind imagini vectoriale. Chiar i n cazul n care se reuete vectorizarea unei astfel de imagini, editarea acesteia la complexitatea original este dificil. Un alt dezavantaj este c formatele n care sunt stocate imaginile vectoriale sunt foarte complexe. Implementarea acestor formate pe dispozitive diferite este problematic din aceast cauz. Conversia dintr-un format n altul este de asemenea dificil. Aplicaii Datorit flexibilitii n ceea ce privete rezoluia imaginilor vectoriale, acestea sunt folosite intensiv pentru crearea materialelor ce trebuie imprimate la mrimi foarte diverse: acelai fiier poate fi folosit pentru un card de vizit ct i pentru un panou publicitar, n ambele cazuri.rezultatele fiind foarte clare i precise. O alt aplicaie semnificativ a graficii vectoriale este n modelarea suprafeelor 3D, unde se dorete o calitate ridicat a obiectelor. GIS este acronimul provenit de la Geographic Information System (Sistem Informatic Geografic - uneori tradus n forma SIG n limba romn). Acest sistem e utilizat pentru a crea, stoca, a analiza i prelucra informaii distribuite spaial printrun proces computerizat. Tehnologia GIS poate fi utilizat n diverse domenii tiinifice cum ar fi: managementul resurselor, studii de impact asupra mediului, cartografie, planificarea rutelor. Specific unui GIS este modul de organizare a informaiei gestionate. Exist dou tipuri de informaie: una grafic care indic repartiia spaial a elementelor studiate i alta sub form de baz de date pentru a stoca atributele asociate acestor elemente (de ex. pentru o osea lungimea ei, limea, numrul benzilor, materialul de construcie etc.). Informaia grafic poate fi de dou feluri: raster sau vectorial. Grafica raster este o modalitate de reprezentare a imaginilor n aplicaii software sub forma de matrice de pixeli n timp ce grafica vectorial este o metoda de reprezentare a imaginilor cu ajutorul unor primitive geometrice (puncte, segmente, poligoane), caracterizate de
8

Grafic pe calculator - 2011

ecuatii matematice. Specific sistemelor GIS este asocierea unui sistem de coordonate geografic matricii de pixeli (la imaginile raster) sau vectorilor - procedeul poarta numele de Georeferentiere. Astfel unui obiect (reprezentat fie printr-o imagine, fie printr-un vector) i este asociat o poziie unic n Sistemul Informatic corespunztoare poziiei geografice din lumea real.

Informaie tip raster - imagine satelitar - dintr-un sistem GIS Datorit informaiilor asociate graficii, Sistemele Informatice Geografice beneficiaz de toate oportunitile de interogare pe care le ofera sistemele moderne de baze de date i n plus pot oferi uor analize orientate pe anumite zone geografice - aa numitele hri tematice. Un exemplu comun de Sistem Informatic Geografic l reprezent Sistemele de Navigaie. Harta rutier n form vectorial este georefereniat astfel nct Sistemul de Poziionare Global (Global Positioning System - GPS) s poat indica poziia exact a autovehiculului. Planificarea rutei este n fapt o hart tematic obinut n urma unei interogri spaiale (cutarea distanei celei mai scurte ntre dou puncte) combinat cu o interogare a bazei de date asociate drumurilor din hart astfel nct s fie respectate o serie de condiii (limitri de vitez, gabarit, sensuri de circulaie, interdicii, etc.). Datorit impactului pozitiv, sistemele software GIS s-au dezvoltat foarte mult. Exist pe pia un numr foarte mare de produse, att ale dezvoltatorilor consacrai (ESRI, Intergraph, Autodesk, MapInfo, etc.) dar i de tip Open source (Grass GIS, Quantum GIS, GVSIG, OpenJump, etc.).

Adobe Photoshop este un software folosit pentru editarea imaginilor digitale pe calculator, program produs i distribuit de compania american Adobe Systems i care se se adreseaz n special profesionitilor domeniului. Adobe Photoshop, aa cum este cunoscut astzi, este vrful de lance al gamei de produse software pentru editare de imagini digitale, fotografii, grafic pentru tipar, video i Web de pe pia. Photoshop este un program cu o interfa intuitiv i care
9

Grafic pe calculator - 2011

permite o multitudine extraordinar de modificri necesare n mod curent profesionitilor i nu numai: editri de luminozitate i contrast, culoare, focalizare, aplicare de efecte pe imagine sau pe zone (selecii), retuare de imagini degradate, numr arbitrar de canale de culoare, suport de canale de culoare pe 8, 16 sau 32 bii, efecte third-party etc. Exist situaii specifice pentru un profesionist n domeniu cnd alte pachete duc la rezultate mai rapide, ns pentru prelucrri generale de imagine, ntruct furnizeaz instrumente solide, la standard industrial, Photoshop este efectiv indispensabil. Alturi de aplicaia Photoshop (ajuns la versiunea CS5), este inclus i aplicaia ImageReady, cu un impresionant set de instrumente Web pentru optimizarea i previzualizarea imaginilor (dinamice sau statice), prelucrarea pachetelor de imagini cu ajutorul sistemului droplets-uri (mini-programe de tip drag and drop) i realizarea imaginilor rollover (imagini ce i schimb aspectul la trecerea cu mouse-ul peste), precum i pentru realizarea de GIF-uri animate. Avantaje Principalele elemente prin care Photshop se difereniaz de aplicaiile concurente i prin care stabilete noi standarde n industria prelucrrii de imagini digitale sunt:

Seleciile Straturile (Layers) Mtile (Masks) Canalele (Channels) Retuarea Optimizarea imaginilor pentru Web

Formate fiiere Photoshop poate citi majoritatea fiierelor raster i vector. De asemenea, are o serie de formate proprii:

PSD (abreviere pentru Photoshop Document). Acest format conine o imagine ca un set de straturi (Layers), incluznd text, mti (mask), informaii despre opacitate, moduri de combinare (blend mode), canale de culoare, canale alfa (alpha), ci de tiere (clipping path), setri duotone precum i alte elemente specifice Photoshop. Acesta este un format popular i des rspndit n rndul profesionitilor, astfel c este compatibil i cu unele aplicaii concurente Photoshop. PSB (denumit Large Document Format) este o versiune mai nou a formatului PSD, conceput special pentru fiiere mai mari (2GB) sau cu o informaie prezent pe o suprafa definit de laturi mai mari de 30.000 de pixeli (suport pn la 300.000x300.000 pixeli). PDD este un format mai puin ntlnit, fiind asociat iniial aplicaiei Adobe PhotoDeluxe, astzi (dup 2002) compatibil doar cu aplicaiile Adobe Photoshop sau Adobe Photoshop Elements.
10

Grafic pe calculator - 2011

Ultimele instrumente

Camera RAW: Instrumentul ofer acces rapid i facil la imaginile tip RAW produse de majoritatea camerelor foto digitale profesionale i de mijloc. Camera RAW se folosete de toate detaliile acestor fiiere pentru a obine un control total asupra aspectului imaginii, fr a modifica fiierul n sine. Adobe Bridge: Un browser complex, de ultim generaie, ce simplific gestionarea fiierelor, poate procesa mai multe fiiere de tip RAW n acelai timp i pune la dispoziia utilizatorului informaia metadata de tip EXIF etc. Multitasking: Adobe introduce posibilitatea de a folosi toate aplicaiile sale din suita "Creative suite 2" n sistem multitasking. Suport High Dynamic Range (HDR) pe 32 bii: Creeaz i editeaz imagini pe 32 bii, sau combin cadre fotografice de expuneri diferite ntr-una ce include valorile ideale de la cele mai intense umbre pn la cele mai puternice zone de lumin. Shadow/Highlight: mbuntete contrastul fotografiilor subexpuse sau supraexpuse, inclusiv imagini CMYK, pstrnd n continuare echilibrul vizual al imaginii. Vanishing Point: Ofer posibilitatea de a clona, picta sau lipi elemente ce automat se transpun n perspectiva obiectelor din imagine. Image Warp: Capacitatea de a deforma imaginile plane dup o matrice uor editabil, folosind mouse-ul. Corectarea deformrilor cauzate de lentile: Lens Distort corecteaz cu uurin efectele obinuite date de lentilele aparatelor foto precum cele cilindrice, sferice, tip plnie, "efectul de vignet" (funcie de poziionarea fa de lumin, colurile fotografiilor sunt fie ntunecate, fie luminate n contrast cu restul fotografiei) sau aberaiile cromatice. Personalizarea aplicaiei:Posibilitatea de a personaliza orice scurttur sau chiar funciile din meniul aplicaiei i posibilitatea de a salva modificrile pentru fiecare mod de lucru n parte. Control mbuntit al straturilor (layers): capacitatea de a selecta mai multe straturi n acelai timp. Smart objects: abilitatea de a deforma, redeforma i a reveni la starea iniial a obiectelor fr a pierde din calitate.

Aplicaiile grafice se realizeaz prin utilizarea urmtoarelor clase de produse software: editoare grafice, biblioteci grafice, programe grafice specializate, desktop publishing, worksheet graphics (birotic). Editoarele grafice sunt destinate prelucrrii grafice in domeniul proiectrii asistate de calculator dintre produsele care nglobeaz editoare grafice amintim: Auto Cad, Freelanec 2 Plus, Windows Paint, Corel Draw. Bibliotecile grafice sunt destinate prelucrrilor prin intermediul limbajelor de programare de nivel nalt (C, Visual C, Visual Basic, Delphi, Open GL etc...). Acestea conin biblioteci cu rutine (primitive) grafice care realizeaz funcii grafice
11

Grafic pe calculator - 2011

necesare aplicaii grafice. Programe grafice specializate sunt destinate rezolvrii problemelor din anumite domenii, oferind utilizatorului s enune probleme ct mai simplu i n concordan cu limbajul utilizat n domeniul su. De exemplu: Matlab, Mathematica, Mathcad. Desktop publishing sunt produse software destinate realizrii de publicatii (ziare, reviste, reclame, etc.) la birou, parcurgnd toate etapele dintr-o tipografie clasic. De exemplu: Xerox Ventura Publisher care este compatibil cu mai multe procesoare de text si cu unele editoare grafice, Pagemaker, Xpress, Super Paint, Publish IT, etc. O interfata API este un cod sursa oferit de catre sistemul de operare sau o librarie pentru a permite apeluri la serviciile care pot fi generate din API-uri respective de catre un program. Termenul API este folosit in 2 sensuri: - O interfata coerenta care consta din clase sau seturi de functii sau proceduri interconectate. - Un singur punct de intrare, cum ar fi o metoda, o functie sau o procedura. Doua Interfete API foarte cunoscute sunt Single UNIX Specification si Microsoft Windows API. Interfete API sunt deseori incorporate in Software Development Kit (SDK) . Modelul de design a Interfetelor API Exista o multime de modele de design a Interfetelor API. Cele prevazute pentru executie rapida deseori consta din functii, proceduri, variabile si structuri de date. Exista si alte modele cum ar fi interpretatori (emulatori) care evalueaza expresii in ECMAScript (cunoscut sub nume JavaScript) sau alt layer abstract, oferind programatorului posibilitatea de a evita implicarea in relatiile functiilor cu nivelul inferior al abstractiei. Unele Interfete API, cum sunt cele standard pentru un sistem de operare, sunt implementate ca librarii de cod separate care sunt distribuite impreuna cu sistemul de operare. Altele au integrata functionalitatea interfetei API direct in aplicatie. Microsoft Windows API este distribuita cu sistemul de operare. Interfetele API pentru sisteme embedded, cum sunt console de jocuri video, in general intra in categoria API-urilor integrate direct in aplicatie. O interfata API care nu necesita drepturi mari de acces sunt numite "open" (OpenGL ar fi un exemplu). Cateva exemple de Interfete API: Single UNIX Specification (SUS) Microsoft Win32 API Java Platform, Enterprise Edition API's OpenGL cross-platform API DirectX for Microsoft Windows
12

Grafic pe calculator - 2011

Google Maps API Wikipedia API Simple DirectMedia Layer (SDL) svgalib pentru Linux si FreeBSD Carbon si Cocoa pentru Macintosh OS

Microsoft Windows API's Windows API, neoficial WinAPI, este numele dat de catre Microsoft pentru un set de Interfete API disponibile in sisteme de operare Microsoft Windows. Aceste interfete au fost construite pentru a fi folosite de catre programatori C/C++ si sunt cel mai direct mod de a interactiona cu sistemul Windows pentru aplicatii software. Accesul la nivel inferior la sistemul Windows, in general necesar pentru drivere, este oferit de catre Windows Driver Foundation in versiunea curenta a Windows-ului. In sisteme de operare Windows este disponibil un Software Development Kit (SDK), care ofera documentatia si unelte pentru a permite dezvoltatorilor crearea aplicatiilor folosind Interfete API si tehnologii Windows asociate. Compilatoare suportate Pentru a dezvolta software care foloseste Interfetele API Windows, este nevoie de compilator care poate importa si manipula fisierele DLL si obiectele COM caracteristice Microsoft-ului. Compilatorul trebuie sa accepte dialectul limbajelor C sau C++ si sa manipuleze IDL (interface definition language) fisiere si fisiere header care expun denumirile functiilor interioare ale Interfetelor API. Aceste compilatoare, unelte, librarii si fisiere header sunt impreunate in Microsoft Platform SDK (Software Development Kit). Pentru mult timp familia de compilatoare si unelte Microsoft Visual Studio si compilatoare Borland, au fost singurele care puteau la cerintele sus mentionate. Acuma exista MinGW si Cygwin care ofera interfete bazate pe GNU Compiler Collection. LCC-Win32 este disponibil pentru utilizare non-comerciala, continand compilator C si intretinut de catre Jacob Navia. Pelles C este compilator C gratuit oferit de catre Pelle Orinius. Microsoft DirectX Microsoft DirectX este o colectie de Interfete API folosita pentru manipularea taskurilor legate de multimedia, in special programarea jocurilor si video, pe platforme Microsoft. DirectX este de asemenea folosit si de alti producatori software, in mare parte in sectorul de inginerie, din cauza abilitatii de redare rapida a obiectelor 3D de inalta calitate.
13

Grafic pe calculator - 2011

Atat DirectX runtime cat si software development kit (kitul de dezvoltare soft) sunt disponibilie gratuit, dar sunt proprietate Microsoft si sunt closed-source (fara posibilitate de schimbare, rescriere, suprascriere). DirectX a fost initial redistribuit de catre dezvoltatori de jocuri impreuna cu kiturile de instalare, dar in ultim timp DirectX a fost inclus in kit de instalare a sistemului de operare (sau in Service Packs). Unii dezvoltatori de jocuri inca mai includ DirectX in kitul de instalare si ofera posibilitate de a-l instala (sau de a face update) dupa instalarea jocului. Cel mai recente versiuni ale DirectX-ului sunt DirectX 10 si DirectX 9.0L, disponibile exclusiv pentru Windows Vista (motivul fiind, dupa cum sustine Microsoft, faptul ca exista schimbari in arhitectura grafica a Windowsului si din cauza introducerii Windows Display Driver Model). Interfetele API din DirectX Majoritatea Interfetelor API din DirectX sunt in forma de obiecte COM. Componentele care le contine DirectX sunt: DirectX Graphics, alcatuit din doua Interfete API (DirectX 8.0 sau mai mult): 1. DirectDraw: pentru generarea de obiecte grafice 2D (acum dezaprobat, desi este inca folosit de multi programatori) 2. Direct3D (D3D): pentru generarea obiectelor grafice in 3D DirectInput pentru tastaura, mouse, joustick sau alte controlere pentru jocuri (nu mai este folosit decat pentru Xinput, in controlere la Xbox 360) DirectPlay pentru comunicare jocurilor in retea (Impreuna cu DirectInput a fost folosit ultima data in DirectX 8. Acuma este dezaprobat) DirectSound pentru redarea sunetului si inregistrarea sunetului in forma wave DirectMusic pentru redarea sunetelor autorizate de catre DirectMusic Producer DirectX Media contine DirectAnimation pentru animatii web 2D, DirectShow pentru redare multimedia, DirectX Transform pentru interactionare web si Direct3D Retained Mode pentru obiecte grafice 3D de nivel inalt. DirectShow mai contine DirectX Plugins pentru procesarea semnalului audio si DirectX Video Acceseration pentru a accelera redarea video. DirectX Media Objects suport pentru pentru obiecte cu streamuri cum sunt encodere, decodere si efecte. DirectSetup pentru instalarea componentelor DirectX (care de fapt nu prea este API)
14

Grafic pe calculator - 2011

Inainte de existenta DirectX-ului, Microsoft avea deja inclus setul de API-uri OpenGL pe platformele Windows NT. In acel timp OpenGL necesita hardware de inalta performanta si era limitat pe inginerie si utilizatori CAD. Direct3D (introdus de persoane care au dezvoltat DirectX ca o alternativa pentru OpenGL) urma sa fie o concurenta pentru (atunci) mai costisitor (din punct de vedere hardware) OpenGL pentru dezvoltarea jocurilor. Cu timpul, dupa ce puterea placilor video au crescut, OpenGL a devenit standard si conducatorul pietei. In acel punct a inceput "batalia" intre adepti ai cross-platform OpenGL si Windows-only Direct3D, care dupa cum multi sustineau era inca un exemplu de adoptare, extindere si eliminare (embrace, extend and extinguish) de la Microsoft. Alte Interfete API din DirectX sunt deseori combinate cu OpenGL in crearea jocurilor video datorita faptului ca OpenGL nu include toate functionalitatile care le are DirectX (cum ar fi suport pentru sunet sau joystick). Totusi, combinatia intre OpenGL si OpenAL (Open Audio Library) pentru acest scop a devenit populara. DirectX este folosit ca si baza pentru Interfetele API de la console Xbox si Xbox 360, oferite de catre Microsoft. Interfetele API au fost dezvoltate de catre Microsoft si NVIDIA (care a dezvoltat hardware folosit de consola). Intefetele API din Xbox sunt similare cu cele din DirectX 8.1, dar fara posibilitate de update. Xbox a fost numit DirectXbox, dar numele a fost prescurtat pentru motive comerciale. Compatibilitate Producatori hardware sunt nevoiti sa scrie drivere si sa testeze fiecare bucata aparte, pentru a le face compatibile cu DirectX. Unele dispozitive hardware au doar drivere compatibile cu DirectX (ceea ce inseamna ca utilizatorul trebuie sa instaleze DirectX pentru a folosi acele dispozitive). Versiunile mai vechi de DirectX includeau si o librarie care continea toate driverele cunoscute si disponibile la momentul lansarii versiunii respective. La aceasta practica s-a renuntat in favoarea sistemului de reactualizare, bazat pe web, Windows Update care permite utilizatorilor sa descarce doar drivere relevante pentru dispozitivul lor. Inainte de DirectX 10, DirectX era considerat ca fiind compatibil cu versiuni precedente (versiunile noi erau compatibile cu cele vechi). Asta este consecinta pozitiva a modelului COM folosit pentru API-ul DirectX. Cu Windows Vista si Direct3D 10 cu schimbari radicale, compatibilitate nu mai este posibila. Din acest motiv DirectX 10 ofera Interfata API Direct3D 9, astfel incat sa fie posibila rularea jocurilor si aplicatiilor mai vechi. DirectX 10 si 9.0L Windows Vista este lansata cu DirectX 10 (si 9.0L pentru compatibilitate cu versiuni mai vechi) si este singurul sistem de operare din
15

Grafic pe calculator - 2011

familia Windows care il contine. Schimbari radicale au fost facute: DirectInput este defavorizat si inlocuit cu Xinput, din Xbox. De asemenea, DirectSound este defavorizat si inlocuit cu XACT. DirectX 10 a renuntat la suport pentru accelerarea dispozitivelor audio, iar sunetul este redat in softearul pe CPU. DirectPlay este defavorizat si inlocuit cu Games for Windows - LIVE, in timp ce DirectShow este defavorizat si inlocuit cu Media Foundation, un set diferit de Interfete API lansate impreuna cu Windows Vista, pentru manipularea de secvente audio si video. DirectMusic va fi probabil singurul ramas intact. Direct3D O proprietate noua majora in DirectX 10 este Direct3D (initial numit Windows Graphics Foundation). Folosind noul Windows Display Driver Model, Shader Model 4.0 si noile, mai stricte, cerinte pentru producatori de GPU (Graphical Processing Unit) care trebuie satisfacute pentru a sustine compatibilitate cu Direct3D, versiunea 10 de Direct3D reprezinta indepartarea de la practicile versiunilor mai vechi. Pentru a oferi compatibilitate cu versiunile precedente de Direct3D, DirectX 10 contine de fapt trei versiuni de Direct3D: - Direct3D 9: aceasta Interfata API emuleaza comportamentele ale Direct3D 9 pe Windows XP pentru a oferi compatibilitate cu aplicatii mai vechi. Toate detaliile si avantajele ale Windows Display Driver Model (WDDM) din Vista, sunt ascunse de aplicatie (in caz ca WDDM drivere sunt instalate). Aceasta este singura Interfata API disponibila in caz ca exista doar drivere grafice XP. - Direct3D 9Ex (initial numit 9.0L): permite acces total la noile capabilitati ale WDDM, in timp ce pastreaza compatibilitate pentru aplicatii Direct3D existente folosind o interfata API separata. Efectul de transparenta ("glass effect") din Windows Aero se bazeaza pe codul din Direct3D 0Ex. Cand 9Ex era inca sub numele de cod 9.0L, existau zvonuri ca acesta va fi Direct3D 10 pentru Windows XP. Pana la urma s-a demonstrat ca nu este asa, in mare parte din cauza incompatibilitati al WDDM pe Windows XP. - Direct3D 10: Temporar, singurul GPU compatibil cu Direct3D este NVIDIA GeForce 8 Series, care de fapt profita foarte putin de capabilitatile ale Direct3D 10. Alternative Exista alternative pentru aceasta arhitectura, unele mai complete decat altele. Nu exista o solutie unica care sa ofere toate functionalitatile care le ofera DirectX, dar prin combinare de librarii - OpenGL, OpenAL, SDL, OpenML, FMOD, etc - utilizatorul pote sa implementeze o solutie comparabila cu DirectX si in aceasi timp gratuita si cross-platform (poate fi folosite pe diferite platforme).

OpenGl
16

Grafic pe calculator - 2011 Cnd vorbim despre o aplicaie OpenGl, nseamn c este scris ntr-un limbaj de programare (ca C/C++) ce apeleaz una sau mai multe librrii OpenGL.

API OpenGL

Un OpenGL API poate conine urmtoarele librrii. Funciile efective ce definesc OpenGL sunt coninute n librria opengl32.dll i fiierul header GL/gl.h. OpenGL utility library (GLU) cu librria glu32.dll i fiierul header GL/glu.h, contine functii ce usureaza crearea programelor, ca de exemplu desenarea sferelor, discurilor si cilindrelor, etc. Auxiliary (toolkit) library (AUX) este glaux.lib, iar declaratiile acesteia sunt continute in GL/glaux.h. Permite de exemplu scrierea rapida a unui program care foloseste OpenGL fara sa mai pierdeti timpul cu gestiunea ferestrelor etc. Folositi biblioteca glut (The OpenGL Utility Toolkit = GLUT). Pentru sisteme X Window (UNIX), extensia OpenGL se numeste GLX, iar pentru Microsoft Windows se numeste WGL. OpenGL (Open Graphics Library) permite primitive grafice de baz cum ar fi punctele, segmentele de dreapt, poligoanele i imaginile, precum i operaii de redare de baz cum ar fi transformrile afine i proiective i calculele de iluminare. El permite de asemenea operaii de redare avansat cum ar fi maparea texturilor i redarea cu antialiasing. OpenGL este o interfa software pentru plcile grafice. OpenGL se bazeaz pe IrisGL dezvoltat de Silicon Graphics (SGI). Scopul iniial al dezvoltrii IrisGL a fost de a dezvolta o interfa programabil pentru staiile grafice SGI. Aceast interfa programabil s-a intenionat iniial a fi independent de hardware i a ndeplini cerinele speciale ale programrii grafice 3D. Ulterior IrisGL a devenit interesant i pentru alte staii (www.opengl.org). OpenGL este portabil, fiind disponibil pe o varietate de sisteme cum ar fi PC, Macintosh, Silicon Graphics, UNIX, Linux, Irix, Solaris, HP-UX OpenGL ruleaz pe fiecare din principalele sisteme de operare incluznd MacOS, OS/2, UNIX, Windows95, Windows NT, Linux, OPENStep, Python i BeOS. OpenGL este de asemenea scalabil deoarece poate rula pe o varietate de calculatoare, de la cele personale pn la staii de lucru i supercalculatoare Aceasta se realizeaz prin mecanismul OpenGL de cerere a capacitilor hardware.
17

Grafic pe calculator - 2011

OpenGL este bine structurat avnd o arhitectur intuitiv i comenzi logice (n numr de cteva sute). Utiliznd comenzile OpenGL se pot scrie aplicaii avnd cteva linii de cod spre deosebire de programele realizate utiliznd alte biblioteci. Una din caracteristicile forte ale interfeei OpenGL este c interfaa sa este uor de utilizat de ctre nceptori fiind n acelai timp suficient de puternic pentru a satisface cerinele unor aplicaii profesioniste indiferent c acestea sunt simulatoare de zbor, animaii, aplicaii de proiectare asistat sau vizualizri tiinifice. Driverele OpenGL ncapsuleaz informaii despre substratul hardware, elibernd dezvoltatorul aplicaiei de necesitatea de a scrie aplicaiile pentru anumite caracteristici hardware. Sisteme grafice pentru grafica 3D

Pentru grafica 3D sunt disponibile cteva sisteme. Un sistem relativ bine cunoscut este PHIGS (Programmer's Hierarchical Interactive Graphics System). Bazat pe GKS (Graphics Kernal Systems), PHIGS este standard ANSI. PHIGS asigur modalitatea de a manipula i a desena obiecte 3D prin ncapsularea descrierii obiectelor i a atributelor ntr-o list de display care este apoi referit cnd obiectul este afiat sau manipulat. Un avantaj al listei de display este c un obiect complex este descris doar o dat chiar dac este afiat de mai multe ori. Aceasta este important n special dac obiectul de afiat trebuie transmis dea lungul unui canal de band joas (cum ar fi reeaua). Un dezavantaj al listei de display este c poate cere un efort considerabil pentru respecificarea obiectului dac el este modificat continuu ca rezultat al interaciunii cu utilizatorul. O alt dificultate cu PHIGS este lipsa suportului caracteristic de redare avansat cum ar fi suportul pentru maparea texturilor. n final, exist API-uri care asigur accesul la redarea 3D ca un rezultat al metodelor pentru descrierea obiectelor grafice de nivel ridicat. Liderii acestora sunt HOOPS i IRIS Inventor. Caracteristicile de standardizare, stabilitate, fiabilitate, portabilitate, uurin n utilizare i buna documentare fac din OpenGL un produs preferat naintea altor biblioteci pentru realizarea vizualizrilor tiinifice, a mediilor virtuale, aplicaiilor CAD/CAM/CAE, imagistic medical, jocuri, etc. Cei mai renumii dezvoltatori de software utilizeaz OpenGL ca suport pentru realizarea unor API de nivel mai nalt. Lista aplicaiilor realizate avnd la baz OpenGL este mare i ea cuprinde aplicaii de modelare i animaie 3D (Maya, truSpace, 3D Studio Max, etc.), aplicaii CAD/CAM (CATIA, 3D Studio Viz, Pro/ENGINEER, I-DEAS, etc), simulri vizuale i realitate virtual (Visualisation Data Explorer, WorldToolKit, Designer, Workbranch, etc.), playere VRML {Cosmo World, RenderSoft VRML Editor, etc.), jocuri (Quake2, X-Plane, Unreal, etc.). OpenGL permite dezvoltatorilor de software accesul la primitive geometrice i imagine, liste de display, transformri de modelare, iluminare i texturare, antialiasing, blending i multe alte faciliti. Din punctul de vedere al programatorului, OpenGL reprezint un set de comenzi care permit specificarea obiectelor geometrice n dou sau trei dimensiuni, mpreun cu comenzi care controleaz felul n care aceste obiecte sunt rasterizate n buffer-ul cadru (framebuffer). Pentru cele mai multe din aceste comenzi, OpenGL asigur o interfa cu efect imediat, n sensul c specificarea unui obiect determin desenarea sa. OpenGL conine o mare cantitate de informaii de stare. Aceast stare controleaz modul n care sunt desenate obiectele n framebuffer. OpenGL se afl totdeauna ntr-o stare definit, setat prin variabile de condiie; aceasta nseamn c
18

Grafic pe calculator - 2011

OpenGL este o maina de stare. Un exemplu de variabil de condiie este culoarea curent cu care sunt redate (desenate) primitivele individuale. Aceasta este setat utiliznd comanda glcolor() i apoi culoarea setat se aplic tuturor obiectelor care se deseneaz, pn cnd este utilizat o nou comand de modificare a culorii. La un anumit moment, o parte din aceast stare -chiar i coninutul unei texturi i al memoriei video - este disponibil n mod direct utilizatorului, care poate utiliza comenzi pentru a obine valori asociate cu diferite informaii de stare. O parte a informaiilor de stare sunt vizibile, ns, doar prin efectul pe care l au asupra a ceea ce se deseneaz. OpenGL permite de asemenea aplicaii de vizualizare cu imagini 2D tratate ca tipuri de primitive care pot fi manipulate la fel ca i obiectele geometrice 3D. OpenGL dispune de unmai 10 primitive geometrice, i orice obiect care se deseneaz n OpenGL este compus din aceste primitive. Setul de instruciuni din bibliotec conine cteva sute de comenzi, toate fiind prefixate de gl. OpenGL asigur controlul direct asupra operaiilor fundamentale de grafic 3D i 2D. Aceste operaii includ specificarea unor parametrii cum ar fi matricele transformrilor, coeficienii ecuaiilor de iluminare, operatori pentru actualizarea pixelilor. El nu asigur o modalitate pentru descrierea sau modelarea obiectelor geometrice complexe (cum ar fi cilindrul, cubul, sfera, etc.). Altfel spus, OpenGL asigur mecanismele pentru a descrie cum sunt redate obiectele geometrice complexe i nu mecanismele de a descrie obiectele complexe nsele. Toate corpurile complexe trebuie s fie construite de dezvoltatorul aplicaiei 3D pe baza primitivelor simple - puncte, linii, poligoane. Pentru a simplifica puin lucrurile pentru dezvoltatorii de aplicaii, experii n grafica 3D au dezvoltat cteva biblioteci dintre care cele mai importante sunt GLU (OpenGL Utility Library), GLUT (OpenGL Utility Toolkit) sau echivalentul su Microsoft -GLAUX. GLU simplific lucrurile pentru crearea calculelor de proiecie i pentru construirea suprafeelor complexe, reprezentnd printre altele curbe i suprafee NURBS (Non-uniformrational-B-splines). GLUT este un utilitar independent de sistem pentru manevrarea n mod simplu a ferestrelor OpenGL i pentru furnizarea dezvoltatorului de aplicaii de rutine pentru controlarea evenimentelor externe provenite de la utilizator prin mouse sau tastatur. Oricine dorete s devin expert n grafica 3D trebuie s se familiarizeze cu cteva noiuni fundamentale de algebr i geometrie analitic. Altfel utilizarea comenzilor OpenGL se face mecanic fr o profund nelegere a mecanismelor interne. Aceste noiuni sunt calculul vectorial (produs scalar, produs vectorial), calcul matricial (nmulirea matricelor, matrice identitate), transformri geometrice. Sunt de asemenea necesare cteva cunotine din domeniul opticii. Cei interesai pot s i remprospteze aceste cunotine i din cri care prezint fundamentele graficii cu calculatorul. Un program tipic care utilizeaz OpenGL ncepe cu deschiderea unei ferestre n framebuffer-ul n care programul va desena. Apoi, se apeleaz funcii pentru alocarea unui context GL i asocierea sa cu fereastra. Odat ce contextul OpenGL este alocat, programatorul este liber s dea comenzi OpenGL. Unele comenzi sunt utilizate pentru desenarea obiectelor geometrice simple (cum ar fi puncte, segmente de dreapt i poligoane), n timp ce altele au efect asupra redrii acestor primitive inclusiv a felului cum sunt iluminate, colorate i a modului n care spaiul modelului utilizatorului este mapat la ecranul bidimensional. Sunt i comenzi care controleaz efectiv framebuffer-ul, cum ar fi citirea i scrierea pixelilor. Din punctul de vedere al implementatorului, OpenGL este un set de comenzi care au efect asupra felului n care opereaz hardware-ul grafic. Dac hardware-ul const doar dintr-un framebuffer adresabil, atunci comenzile OpenGL trebuie s fie implementate n ntregime software, de CPU-ul calculatorului gazd. Tipice pentru acest moment sunt ns plcile grafice care conin acceleratoare grafice variind de la
19

Grafic pe calculator - 2011

cele cu un subsistem de redare capabil s redea linii i poligoane 2D pn la procesoare n virgul mobil sofisticate capabile de transformri i calcule asupra datelor geometrice. Sarcina implementatorului este de a asigura interfaa software CPU astfel nct pentru fiecare comand OpenGL s se divid sarcinile ntre CPU i placa grafic. Pentru a se obine un optim al performanei n executarea comenzilor OpenGL, aceast diviziune trebuie s fie n concordan cu placa grafic disponibil.

OpenGL deseneaz primitive ntr-o memorie video, subiectul a numeroase moduri selectabile. O primitiv poate fi un punct, segment de dreapt, poligon sau bitmap. Fiecare mod poate fi modificat independent; setarea unuia nu afecteaz setarea altora (dei pot interaciona n mai multe moduri pentru a determina ceea ce se produce n final n memoria video). Modurile sunt setate, primitivele specificate i celelalte operaii OpenGL sunt descrise prin intermediul comenzilor, n forma apelurilor de funcii sau proceduri.

Schema fluxului de procesare OpenGL Modelul de interpretare a comenzilor de ctre OpenGL este client-server. Aceasta nseamn c programul (client) d comenzile i aceste comenzi sunt procesate i interpretate de OpenGL (server). Serverul poate sau nu s opereze pe acelai calculator cu client-ul. Multe dintre comenzi pot fi acumulate n liste de display pentru o procesare ulterioar. n cazul n care se lucreaz cu procesare imediat (deci fr liste de display) comenzile sunt transmise prin fluxul de procesare OpenGL. Comenzile nu sunt altceva dect apeluri de funcii i proceduri OpenGL. Primul stadiu de procesare asigur o modalitate eficient pentru aproximarea curbelor i a suprafeelor curbe prin evaluarea funciilor polinomiale ale valorilor de la intrare. Acest stadiu este parcurs doar de acele comenzi utilizate pentru reprezentarea curbelor i a suprafeelor Bezier i spline. Urmtorul nivel opereaz asupra primitivelor geometrice descrise prin coordonatele vrfurilor: puncte, segmente de dreapt i poligoane. n acest stadiu vrfurile sunt transformate i iluminate, i primitivele sunt decupate fa de volumul de vizualizare pentru a fi pregtite pentru nivelul urmtor -rasterizarea. Rasterizarea convertete o primitiv proiectat, scalat la viewport ntr-o serie de fragmente. Fiecare fragment comprim pentru o locaie a unui pixel din memoria video -culoarea, coordonatele de textur i adncimea (z). Rasterizarea produce o serie de adrese i de valori pentru memoria video utiliznd descrierea 2D a unui punct, segment de dreapt, sau poligon. Fiecare fragment astfel produs alimenteaz nivelul 20

Grafic pe calculator - 2011 urmtor care asigur operaii asupra fragmentelor individuale nainte ca ele s modifice memoria video. Aceste operaii includ actualizri condiionale n memoria video pe baza noilor valori sau a valorilor de adncime memorate anterior (pentru efectuarea testului de ascundere), amestecarea culorilor fragmentelor cu culorile memorate, precum i mascarea i celelalte operaii logice asupra valorilor din fragment. Cnd este rasterizat un segment de dreapt sau un poligon, aceste date asociate sunt interpolate de-a lungul primitivei pentru a obine o valoare pentru fiecare fragment. Rasterizarea fiecrui tip de primitiv este controlat de un grup corespunztor de parametrii (atribute de redare a primitivelor). Un atribut de lime afecteaz rasterizarea punctului i un altul afecteaz rasterizarea segmentelor de dreapt. Suplimentar, se poate specifica o secven stipple (stilul liniei -linie punctata, ntrerupt, etc.) pentru segmentele de dreapt, i un model de haur pentru poligoane. Antialiasing-ul poate fi activat sau dezactivat individual pentru fiecare tip de primitiv. Cnd este activat, o valoare acoperitoare este calculat pentru fiecare fragment ce descrie poriunea acelui fragment care este acoperit de primitiva proiectat. Aceast valoare acoperitoare este utilizat dup ce texturarea a fost terminat pentru modificarea valorii alfa a fragmentului (n modul RGBA) sau valorii color index (n modul index). Procesarea pixelilor i a imaginilor trece peste seciunea de procesare a vrfurilor din flux pentru a transmite un bloc de fragmente n mod direct prin blocul de rasterizare spre blocul operaiilor pe fragmente individuale, determinnd eventual ca un bloc de pixeli s fie scris direct n memoria video. Valorile pot fi de asemenea citite din memoria video sau copiate dintr-o poriune a memoriei video n alta. Aceste transferuri pot include unele tipuri de decodificri i codificri. Se poate constata c exist dou fluxuri de date. Fluxul din partea de sus a schemei este pentru primitivele bazate pe vertex-uri. Fluxul din partea de jos este pentru primitive bazate pe pixeli - primitive imagine. Se poate spune c texturarea combin cele dou tipuri de primitive. Aa cum s-a mai artat, la modul general, sunt dou operaii principale care se pot face utiliznd OpenGL: - Se deseneaz ceva; - Se modific starea (aspectul) a ceea ce se deseneaz. n ceea ce privete obiectele pe care le putem desena cu OpenGL, i acestea sunt de dou tipuri: - Primitive geometrice; - Primitive imagine. Altfel spus, grafica pe care o putem realiza utiliznd OpenGL este att grafic vectorial ct i grafic punctual. Primitivele geometrice pe care le poate reda OpenGL sunt puncte, linii i poligoane. Primitivele imagine sunt bitmap-uri i imagini grafice (adic pixeli care se pot extrage dintr-o imagine JPEG dup ce s-a citit aceast imagine n program). Suplimentar, OpenGL prin maparea texturilor unete primitivele geometrice cu cele imagine. O alt operaie comun care se face asupra ambelor tipuri de primitive este setarea strii. Setarea strii este procesul de iniializare al datelor interne, utilizate de OpenGL pentru redarea primitivelor. Setarea poate fi o operaie simpl cum ar fi stabilirea dimensiunii i culorii unui punct desenat dar i o operaie mai complicat cum ar fi iniializarea nivelelor multiple pentru maparea texturilor. Trebuie subliniat c dei primitivele geometrice pe care le poate reda OpenGL nu sunt spaiale, n sensul c ele pot fi redate i n plan, totui OpenGL este o bibliotec de grafic 3D. Ceea ce este deosebit n felul n care se deseneaz un punct ntr-o bibliotec 2D, i felul n care se deseneaz un punct ntr-o bibliotec 3D sunt coordonatele acestui punct. Bibliotecii 2D i se furnizeaz coordonate 2D, pe cnd bibliotecii 3D i se furnizeaz coordonate 3D i prin mecanismele proieciei se face transformarea din sistemul de coordonate 3D n 2D urmnd ca apoi primitivele s fie redate pe dispozitivul de afiare. Efectul comenzilor OpenGL asupra memoriei video este fundamental controlat de sistemul de ferestre care aloc resurse de memorie video. Sistemul de ferestre este cel care determin care poriuni ale memoriei video pot fi accesate de OpenGL la un anumit moment de timp i tot el este cel care i comunic lui OpenGL cum sunt structurate acele poriuni. n mod similar, afiarea coninutului memoriei video pe un tub CRT nu este controlat de OpenGL (incluznd transformarea valorilor individuale din memoria video prin asemenea tehnici, cum ar fi corecia gamma). Configurarea memoriei video are loc n exteriorul OpenGL, n conjuncie cu sistemul de ferestre; iniializarea unui context OpenGL are loc cnd sistemul de ferestre aloc o fereastr pentru redare OpenGL. Suplimentar, OpenGL nu are faciliti de obinere a 21

Grafic pe calculator - 2011 intrrilor de la utilizator, deoarece este de ateptat ca sistemul de ferestre sub care ruleaz OpenGL s asigure asemenea faciliti. Aceste considerente fac de fapt OpenGL independent de sistemul de ferestre. ,
Jf

Sistem de coordonate OpenGL foloseste un sistem de coordonate dreapta. Dei cred ca este mai usor de tinut minte imaginea decat o metoda de identificare a unui sistem de coordonate dreapta, pentru cei care nu sunt de aceasi parere iata o conditie usor de verificat: un sistem de coordonate este dreapta, daca privind de-a lungul unei axe dinspre +oospre origine, o rotatie in sens trigonometric va aduce o axa pozitiva, peste axa pozitiva urmatoare. De exemplu: (Ox peste Oy) sau (Oy peste Oz) sau (Oz peste Ox). Intern, OpenGL foloseste coordonate omogene astfel c fiecare punct 3D este de fapt reprezentat prin (x, y, z, w); daca w este nenul, acestea corespund punctului euclidian (x/w, y/w, z/w). Exemplu de cel mai scurt program OpenGL scris folosind Visual C++: _______________________
#include <windows.h> //headerul pentru ferestre necesr in toate programele #include <gl\gl.h> //headerul functiilor OpenGL #include <gl\glaux.h> //functiile librariei AUX void main(void) { //functii AUX pentru setarea unei ferestre auxInitDisplayMode(AUX_SINGLE | AUX_RGBA); auxInitPosition(50,50,350,350);//setarea ferestrei auxInitWindow("p1 - program OpenGL");//crearea efectiva a ferestrei //functii OpenGL ce fac ceva in fereastra glClearColor(0.0f, 0.0f, 1.0f, 1.0f);//stabilirea culorii de sters glClear(GL_COLOR_BUFFER_BIT);//stergerea efectiva a continutului ferestrei glFlush(); //executarea celor doua functiilor de sus

J ________________________________________________________________________________ De exemplu: glVertex3d - primete 3 parametri de tip GLdouble glColor3f - 3 parametri de tip GLfloat Totui existi cteva excepii n care lipsesc numrul i tipul parametrilor (de exemplu glBegin) sau care incep cu un alt prefix (gluLookAt). Gestiunea ferestrelor folosind librria AUX auxInitDisplayMode(Gluint mode) initializeaza modul de afisare folosit cand se va crea fereastra. Mode specifica: folosirea unei ferestre cu buffer simplu sau dublu: AUXSINGLE sau AUXDOUBLE modelul de culoare folosit - se recomanda AUXRGBA folosirea bufferului de adancime pentru algoritmul z-buffer: AUXDEPTH Pentru a obtine valoarea lui mode putem aplica | intre valorile care ne intereseaza. O fereastra cu buffer simplu presupune faptul ca toate comenzile de desenare se fac in fereastra afisata; alternativa este un buffer dublu, cand comenzile de desenare creeaza o scena efectiv in afara ferestrei, apoi rapid este trecuta in fereastra afisata - se foloseste des in animatie. Modelul de culoare RGBA presupune ca pentru a defini o culoare trebuie specificate componentele red (rosu), green (verde) si blue (albastru). auxInitPosition(GLint x, GLint y, Glsizei latime, Glsizei inaltime) Dupa setarea modului de afisare, se poate preciza locul unde sa fie pozitionata fereastra si dimensiunile acesteia. 22

Grafic pe calculator - 2011 auxInitWindow(char* nume) creaza o fereastra conform setarilor anterioare (care pot fi modificate ulterior), in titlul ferestrei fiind scris numele dat ca parametru. Daca programul se opreste aici, se va crea doar o ferastra goala (implicit fundalul acesteia este negru). De-acum toate comenzile OpenGL se vor executa n aceasta fereastra. Culori void glClearColor (Glclampf red, Glclampf green, Glclampf blue, Glclampf alpha) Stabilete culoarea cu care se va curata interiorul ferestrei, prin parametrii dati stabilindu-se componenetele culorii ce au valori reale de la 0.0 la 1.0 (cu pasi aproximativi de 0.00006). Este similar cu specificarea culorilor in Windows folosing macrouri RGB pentru a crea o valoare COLORREF cu valori intregi insa, intre 0 si 255. Cel de-al patrulea parametru este folosit pentru amestecarea culorilor si efecte speciale si reprezinta opacitatea transluciditatea (proprietatea de a fi partial transparent). Daca nu se doresc efecte speciale, atunci alfa = 1.0f. glClear(GL_COLOR_BUFFER_BIT) Sterge efectiv eventualele desene din fereastra curenta. Constanta data ca parametru arata ce buffer vrem sa stergem. Prin buffer intelegem zona unde se memoreaza informatiile unei imagini. OpenGL foloseste mai multe buffere in diverse scopuri: GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT, GL_ACCUM_BUFFER_BIT, GL_STENCIL_BUFFER_BIT. Putem sterge mai multe cu acelasi apel; de exemplu, glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) sterge imaginea si bufferul folosit pentru a determina care figuri sunt vizibile (folosit de algoritmul z-buffer). Componenetele R, G, B ale unui desen au buffere separate, dar de obicei sunt referite prin "buffer-ul culorii".

glColor3f(GLfloat R, GLfloat G, GLfloat B) Se stalileste culoarea cu care se va desena pana o schimbam din nou, de componente R,G,B. Exemplu: Culoarea Componenta Componenta Componenta rezultata rosu verde albastru Black 0.0 0.0 0.0 1.0 0.0 0.0 Red 0.0 1.0 0.0 Green 1.0 1.0 0.0 0.0 0.0 1.0 Blue 1.0 0.0 1.0 Magenta 0.0 1.0 1.0 Cyan Dark gray 0.25 0.25 0.25 Light gray 0.75 0.75 0.75 Brown 0.60 0.40 0.12 Pumpkin orange 0.98 0.625 0.12 Pastel pink 0.98 .04 0.7 Barney purple 0.6 0.4 0.7 White 1.0 1.0 1.0

23

Grafic pe calculator

2011

glFlush() Se executa comenzile OpenGL neexecutate inca, de obicei: glClearColor, glClear si desenarea primitivelor. Intern, OpenGL foloseste un "render pipeline" ce proceseaza comenzile secvential.

#include <windows.h> #include <GL\glaux.h> #include <GL\gl.h> void CALLBACK Deseneaza(void) //funcia efectiva pentru desenare { glClearColor(1.0f,1.0f,1.0f,0.0f);//culoarea de sters fer = alb glClear(GL_COLOR_BUFFER_BIT);//se sterge efectiv fereastra glColor3f(1.0f,0.0f,0.0f);//culoarea de desenare = rosu glBegin(GL_POLYGON); //de fapt un triunghi glVertex3f(100.0f, 25.0f, 0.0f); glVertex3f(100.0f, 130.0f, 0.0f); glVertex3f(140.0f, 130.0f, 0.0f); glEnd(); glFlush(); } void main() { auxInitDisplayMode(AUX_SINGLE | AUX_RGBA); auxInitPosition(50,50,300,300) ; auxInitWindow("P1-OpenGL"); auxMainLoop(Deseneaza); }

Executia aplicatiei auxMainLoop(void (*f)(void)) Preia numele functiei ce deseneaza ceva in fereastra curenta si programul ruleaza pana cand fereastra in care se deseneaza este inchisa. Functia "CALLBACK" se apeleaza cand fereastra este afisata prima data, cand fereastra este mutata sau redimensionata. Procesul de desenare in OpenGL este numit deseori "rendering", iar functia de desenare "render function". Cuvantul CALLBACK spune librariei OpenGL sa apeleze aceasta functie de fiecare data cand fereastra se actualizeaza in functie de comportamentul utilizatorului. Desenarea primitivelor in OpenGL 24

2011 Grafic pe calculator Exista mai multe tipuri de primitive pe care le putem desena folosind OpenGL. Pentru inceput insa nu le voi prezenta pe toate. Putem desena ceva pe ecran folosind functia: glVertex3f(GLfloat x, GLfloat y, GLfloat z). Pentru a avea vreun efect apelurile acestei functii trebuiesc incadrate intre apelurile glBegin(GLenum tip_primitiva) si glEnd(), unde tipul primitivei este identificat printr-una din constantele: GL_POINTS - pentru desenare puncte GLLINES, GLLINESTRIP, GL_LINE_LOOP - pentru segmente. GLTRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN -triunghiuri GL_QUADS, GL_QUAD_STRIP - pentru patrulatere GL_POLYGON - pentru poligoane Intre glBegin si glEnd puteti apela si glColor* pentru a stabili culoarea varfurilor urmatoare. Modul in care sunt afisate poligoanele se poate stabili (inainte de glBegin) folosind: glPolygonMode (GLenum face, GLenum mode) face poate fi GL_FRONT_AND_BACK sau GLFRONT sau GLBACK. Aceste constante identifica fetele fata sau spate (in mod implicit fetele care sunt definite prin varfuri parcurse in sens trigonometric sunt considerate fete fata). Mode poate fi GL_POINT, GL_LINE sau GLFILL.

Desenarea liniilor in OpenGL Exemplu: ______________ glBegin (GLLINES); glVertex3f (xl, yl, zl); glVertex3f (x2, y2, z2); glVertex3f (x3, y3, z3); glVertex3f (x4, y4, z4); glVertex3f (x5, y5, z5); glVertex3f (x6, y6, z6); glEnd(); ____________ | Desenarea poligoanelor in OpenGl OpenGl are comenzi pentru desenarea triunghiurilor, a patrulaterelor si a poligoanelor convexe, nu prin desenarea conturului acestuia, ci prin umplerea interiorului acestora cu o culoare anume. Pentru desenarea unui triunghi de varfuri vi(xi, yi, zi):

25

Grafic pe calculator glBegin(GLTRIANGLES); glVertex3f (xl, yl, zl); glVertex3f (x2, y2, z2); glVertex3f (x3, y3, z3); glEnd(); glBegin(GLTRIANGLES); glVertex3f (xl, yl, zl); glVertex3f ( x 2, y 2, z 2); glVertex3f ( x 3, y 3, z 3); glVertex3f (x4, y4, z4); glVertex3f ( x 5, y 5, z 5); glVertex3f (x6, y6, z6); glEnd();__________________

2011

Se pot specifica mai multe triunhiuri in acelasi glBegin (GLTRIANGLES), pentru desenarea a n triunghiuri fiind necesare 3*n comenzi glVertex*. Deseori se doreste combinarea a mai multor triunghiuri pentru a obtine o suprafata continua. Pentru aceasta este convenabila declararea triunghiurilor o singura data (fara a specifica varfurile comune de mai multe ori pentru fiecare triunghi). Daca se foloseste GL_TRIANGLE_STRIP si se specifica n varfuri, atunci se deseneaza triunghiurile (vi, ^+1,^+2) , pentru i = 1 , 2,...,n-2. Alta varianta este aceea in care un varf este omun: GL_TRIANGLE_FAN si varfurile v1,...,vn. Deseneaza triunghiurile (v1, vi, vi+1), pentru i = 2, 3,.., n1. Pentru desenarea patrulaterelor convexe, OpenGL nu verifica daca acesta sunt convexe, ci imparte patrulaterul in 2 triunghiuri pentru a-l desena ca un poligon plin. Comanda pentru desenarea unuia sau mai multor patrulatere este: glBegin (GLQUADS); glVertex3f (xl, yl, zl); glVertex3f (xn, yn, zn); glEnd(); unde n este multiplu de 4. Se deseneaza n/4 patrulatere cu varfurile v4i-3, v4i-2, v4i-1, v4i, cu 1 < i < n/4. Se poate de asemenea folosi GL_QUADS_STRIP pentru a uni patrulatere - in acest caz n trebuie sa fie par si se deseneaza n/21 patrulatere cu varfurile v2i-3, v2i-2, v2i-1, v2i, cu 2 < i < n/2.

26

Pentru desenare se apeleaz glBegin Dimensiunea punctelor se controleaza cu comanda glPointSize (GLfloat dimensiune) unde dimesniune reprezinta latimea in pixeli a punctelor, care trebuie sa fie mai mare decat 0.0, valoarea implicita fiind 1.0. Grosimea liniilor se controleaza cu comanda glLineWidth(GLfloat grosime) unde grosimea reprezinta latimea in pixeli cu care se vor desena liniile dupa setare; trebuie sa fie mai mare decat 0.0, valoarea implicita fiind 1.0. // Exemplu: Redesenarea si redimensionarea ferestrei de lucru OpenGL #include <windows.h> #include <gl\gl.h> #include <gl\glaux.h> // Apelata de biblioteca AUX pentru redesenarea ferestrei OpenGL void CALLBACK RedeseneazaScena(void) { glClearColor(0.0f, 0.0f, 1.0f, 1.0f); // Culoarea de stergere (albastru) glClear(GL_COLOR_BUFFER_BIT); // tergerea ferestrei glColor3f(1.0f, 0.0f, 0.0f); // Culoarea de desenare (rosu) glRectf(100.0f, 150.0f, 150.0f, 100.0f); // Desenarea dreptunghi rosu glFlush(); } // Apelata de biblioteca AUX cnd s-a schimbat dimensiunea ferestrei void CALLBACK ModificaDimensiune (GLsizei w, GLsizei h) // w noua latime a ferestrei, h=noua inaltime a ferestrei
{

if (h==0) h = 1; glViewport(0, 0, w, h); // Stabilirea viewportului la dimensiunea ferestrei glLoadIdentity(); // Reinitializeaza sistemul de coordonate // Stabileste volumul de vedere folosind o proiectie ortografica if (w<=h) glOrtho(0.0f, 250.0f, 0.0f, 250.0f*h/w, 1.0, -1.0); else glOrtho(0.0f, 250.0f*w/h, 0.0f, 250.0f, 1.0, -1.0);
}

void main(void)
{

// Stabilirea ferestrei de lucru OpenGL auxInitDisplayMode(AUX_SINGLE | AUXRGBA); auxInitPosition(50, 50, 300, 300); auxInitWindow("p2 OpenGl"); // nregistrarea functiilor callback auxReshapeFunc(ModificaDimensiune); auxMainLoop(RedeseneazaScena);
}

// Exemplu: Animaie folosind biblioteca AUX #include <windows.h> #include <gl\gl.h> #include <gl\glaux.h>

27

// Poziia si marimea iniiala a patratului GLfloat xl = 100.0f; GLfloat yl = 150.0f; GLsizei rsize = 50; GLfloat xstep = 1.0f; GLfloat ystep = 1.0f; // Marimea pasului pe Ox si Oy GLfloat windowWidth; GLfloat windowHeight; // Dimensiunea feretrei void CALLBACK ModificaDimensiune(GLsizei w, GLsizei h) { if (h==0) h = 1; glViewport(0, 0, w, h); // Stabilirea viewportului la dimensiunea ferestrei glLoadIdentity(); // Initializeaza sistemul de coordonate if (w<=h) // Stabileste volumul de vedere folosind o proiectie ortografica { windowHeight = 250.0f*h/w; windowWidth = 250.0f; } else { windowWidth = 250.0f*w/h; windowHeight = 250.0f; } // Stabilirea volumului de vedere glOrtho(0.0f, windowWidth, 0.0f, windowHeight, 1.0f, -1.0f);
}

void CALLBACK RedeseneazaScena(void) glClearColor(0.0f, 0.0f, 1.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0f, 0.0f, 0.0f); glRectf(x1, y1, x1+rsize, y1+rsize); glFlush(); auxSwapBuffers();
}

// Calculeaza noua pozitie a patratului la fiecare pas al animatiei void CALLBACK AvanseazaAnimatie(void)
{

// Inversarea directiei cnd s-au atins marginile (st. sau dr.) if (x1>windowWidth-rsize || x1<0) xstep = -xstep; // Inversarea directiei cnd s-au atins marginile (sus sau jos) if (y1>windowHeight-rsize || y1<0) ystep = -ystep; // Repozitionare in fereastra if (x1>windowWidth-rsize) x1 = windowWidth-rsize-1; if (y1>windowHeightrsize) y1 = windowHeight-rsize-1; x1 += xstep; y1 += ystep; // Redesenarea scenei RedeseneazaScena();
}

void main(void) { // Stabilirea ferestrei de lucru OpenGL auxInitDisplayMode(AUX_DOUBLE|AUX_RGBA); auxInitPosition(10, 10, 500, 500); auxInitWindow("Animatie in OpenGL!"); // nregistrarea functiilor CALLBACK auxReshapeFunc(ModificaDimensiune); auxIdleFunc(AvanseazaAnimatie); auxMainLoop(RedeseneazaScena);
}

Funcii GLAUX pentru desenarea primitivelor 3D n exemplul anterior s-a constatat c s-a utilizat o funcie GLAUX pentru desenarea unui cub wireframe avnd latura de 100 de uniti - auxWireCube(100). Dimensiunea unei uniti n pixeli fiind cea specificat n funcia myReshape(). Biblioteca GLAUX dispune de funcii pentru desenarea i a altor corpuri 3D. n continuare vom enumera aceste funcii.

28

void auxSolidBox(Gldouble width, Gldouble height, Gldouble depth); permite desenarea unui paralelipiped, centrat n origine, pentru care se specific limea, nlimea i adncimea. Paralelipipedul are atribut de umplere. - void auxWireBox(Gldouble width, Gldouble height, Gldouble depth); similar cu auxSolidBox() dar wireframe (doar cu atribut de contur). - void auxSolidCube(Gldouble width); permite desenarea unui cub, centrat n origine, pentru care se specific latura. Cubul are atribut de umplere. - void auxWireCube(Gldouble width); similar cu auxSolidCube() dar wireframe (doar cu atribut de contur). - void auxSolidTetrahedron(Gldouble radius); permite desenarea unui tetraedru (poliedru cu 4 fee, feele sunt triunghiulare), centrat n origine, pentru care se specific raza. Corpul are atribut de umplere. - void auxWireTetrahedron(Gldouble radius); similar cu auxSolidTetrahedron() dar wireframe (doar cu atribut de contur). - void auxSolidOctahedron(Gldouble radius); permite desenarea unui octaedru (poliedru cu 8 fee, feele sunt triunghiulare), centrat n origine, pentru care se specific raza. Corpul are atribut de umplere. - void auxWireOctahedron (Gldouble radius); similar cu auxSolidOctahedron() dar wireframe (doar cu atribut de contur). - void auxSolidDodecahedron(Gldouble radius); permite desenarea unui dodecaedru (poliedru cu 12 fee, feele sunt pentagonale), centrat n origine, pentru care se specific raza. Corpul are atribut de umplere. - void auxWireDodecahedron(Gldouble radius); similar cu auxSolidDodecahedron() dar wireframe (doar cu atribut de contur). - void auxSolidDodecahedron (Gldouble radius); permite desenarea unui icosaedru (poliedru cu 20 fee, feele sunt triunghiulare), centrat n origine, pentru care se specific raza. Corpul are atribut de umplere. - void auxWireIcosahedron(Gldouble radius); similar cu auxSolidicosahedron() dar wireframe (doar cu atribut de contur). - void auxSolidCylinder{Gldoubble radius, Gldouble height); permite desenarea unui cilindru, centrat n origine, pentru care se specific raza bazei i nlimea. Cilindrul are atribut de umplere. - void auxWireCylinder(Gldouble radius, Gldouble height); similar cu auxSolidCylinder() dar wireframe (doar cu atribut de contur). void auxSolidCone(Gldouble radius, Gldouble height); permite desenarea unui con, centrat n origine, pentru care se specific raza bazei i nlimea. Conul are atribut de umplere. void auxWireCone(Gldouble radius, Gldouble height); similar cu auxSolidConeOdar wireframe (doar cu atribut de contur). void auxSolidSphere(Gldouble radius); permite desenarea unei sfere, centrat n origine, pentru care se specific raza. Corpul are atribut de umplere. void auxWireSphere(GldoublG radius); similar cu auxSoildSphere() dar wireframe (doar cu atribut de contur). void auxSolidTorus{Gldouble InnerRadius, Gldouble outerRadius); permite desenarea unui tor (forma colacului), centrat n origine. Parametrul innerRadius este raza seciunii prin tor, iar outerRadius este raza gurii din centrul torului. Corpul are atribut de umplere. void auxWireTorus(Gldouble innerRadius, Gldouble outerRadius); similar cu auxSolidTorus() dar wireframe (doar cu atribut de contur). void auxSolidTeapot(Gldouble size); permite desenarea unui ceainic, centrat n origine, pentru care se specific dimensiunea (aproximativ diametrul). Corpul are atribut de umplere.

29

void auxWireTeapot (Gldouble size); similar cu auxSolidTorus() dar wireframe (doar cu atribut de contur).

Exemple OpenGl Exemplu 1

Exemplu 2

Exemplu 3

30

Exemplu 4

Exemplu 5

31

Exemplu 6

Exemplu 7

32

Exemplu 8

Exemplu 9

33

Exemplu 10

Exemplu 11

34

Exemplu 12

35

Exemplu 13

Exemplu 14

36

Exemplu 15

Exemplu 16

37

Exemplu 17

Exemplu 18 38

Exemplu 19

Exemplu 20

39

Exemplu 21

40

Exemplu 22

41

Exemplu 23

42

Exemplu 24

Exemplu 25

43

Exemplu 26

Exemplu 27

44

Exemplu 28

45

Exemplu 29

46

Exemplu 30

Exemplu 31

47

Exemplu 32

48