Curs Grafica

December 20, 2016 | Author: BlackFlame40 | Category: N/A
Share Embed Donate


Short Description

Download Curs Grafica...

Description

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 următoarele domenii principale: • • • •

Vizualizarea informaţiei Proiectare Modelare (simulare) Interfaţă grafică pentru utilizatori GUI

În prezent cunoaşterea elementelor de bază ale graficii pe calculator este necesară − − − − − −

inginerului, omului de ştiinţă, artiştilor plastici, designerilor, fotografilor, pictorilor de animaţie etc.

Datorită calculatorului putem avea la dispoziţie în câteva fracţiuni de secundă variaţii multiple de culoare, forme, compoziţii etc. În baza tenologiilor graficii computerizate s-au dezvoltat: • • • • • •

Interfaţa de utilizator - GUI Proiectarea digitală în arhitectură şi grafica industrială Efecte vizuale specializate, cinematografia digitală Grafica pe computer pentru filme, animaţie, televiziune Reţeaua Internet Conferinţele video 1

Grafică pe calculator - 2011 • • •



• •

• • • •

Televiziunea digitală Proiecte multimedia, proiecte interactive Fotografia digitală şi posibilităţile avansate de prelucrare a fotografiei Grafica şi pictura digitală (cu 2 laturi esenţiale – imitarea materialelor tradiţionale şi noile instrumente de lucru digitale) Vizualizarea datelor ştiinţifice şi de afaceri Jocuri la calculator, sisteme de realitate virtuală (de ex. simulatoare pentru aviaţie) Sisteme de proiectare automatizată Tomografie computerizată Poligrafia Grafica laser

Grafica pe calculator este de asemenea şi un domeniu de activitate ştiinţifică 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 utilizând un computer. Termenul englez corespunzător 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 informaţiei vizuale obţinute 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 animaţie, 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 calculaţii, 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, animaţie, etc. Prezentarea la calculator a imaginii de tip Raster se face în baza segmentării unei suprafeţe cu ajutorul unor pătrăţele mici care se numesc pixeli. O imagine rastru este un tablou format din mai multi pixeli. Cu cât mai mulţi pixeli avem în imagine cu atât calitatea detaliilor e mai înaltă. Acest tip de grafică permite să cream şi să reproducem oricare imagine cu multitudinea de efecte şi subtilităţi, indiferent de complexitate. Imaginile procesate cu ajutorul scanerului sau aparatelor foto sânt formulate ca raster. •

Neajunsurile – e complicata redimensionarea graficii rastru, deoarece la interpolare (adăugare de pixeli în raport de cei 3

Grafică pe calculator - 2011

existenţi în imagine) computerul inventează calculând pixelii nu întotdeauna satisfăcător, 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ă poziţia, lungimea şi direcţia liniilor folosite în desen. Grafica vectoriala e bazată ca principiu pe desen cu ajutorul liniilor calculate pe o suprafaţa. Liniile pot fi drepte sau curbe. În cazul imaginilor vectoriale fişierul stochează liniile, formele şi culorile care alcătuiesc imaginea, ca formule matematice. Imaginile Vector pot fi mărite şi micşorate fără a pierde calitatea. O imagine poate fi modificată prin manipularea obiectelor din care este alcătuită, acestea fiind salvate apoi ca variaţii ale formulelor matematice specifice. Este des utilizata în imagini cu funcţii decorative, caractere-text, logotipuri, infograme, decor, cat şi în proiecte sofisticate 3D, montare video, animaţie, etc. Există sisteme sofisticate de control cromatic al imaginilor. Adaptarea valorilor cromatice se aplică în funcţie de necesitaţi ş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 desenării şi creării imaginii, pentru arhivare, etc. În general există două tipuri majore de modele cromatice: •

amestecul aditiv RGB (din engleză de la Red-Green-Blue, roşu-verde-albastru) – amestec de culori lumină – se utilizează pentru ecran, monitor, televiziune, scanare, aparate foto, design web, animaţie ş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 variaţii ale diapazonului cromatic, din acest motiv sunt împărţite în diverse profiluri de culoare destinate diferitelor necesităţi. 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 lângă 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 având ca obiectiv final tipărirea lui. În acest domeniu există programe de calculator specializate ce pot fi împărţite în mai multe categorii: •







programe de creaţie şi prelucrare foto (Adobe Photoshop, Corel Photopaint); programe de creaţie ş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 tipărite este Corel Draw. Are setări speciale pentru separaţii, overprint 5

Grafică pe calculator - 2011

Monitoarele sunt aparatele ce decodifică semnalul electric şi generează culorile RGB (Red, Green, Blue – roşu, verde, albastru) prin suprapunere de lumină. Când nu există nici un fel de lumină este generată culoarea neagră, când intensitatea prin cele trei canale este maximă, se obţine culoarea albă. Teoretic s-ar putea tipări şi folosind direct spaţiul de culori RGB, însă datorită imperfecţiunii hârtiei, cernelii şi a maşinilor de tipar, se foloseşte spaţiul CMYK (Cyan, Magenta, Yellow, blacK), urmând ca negrul, care se tipăreşte la sfârşit de procedură, să acopere aceste imperfecţiuni. La o lucrare pretenţioasă este indicat ca imaginile, textele şi obiectele colorate să fie combinate atent, mai ales când se lucrează cu culori Pantone, pentru ca la sfârşit să nu rezulte amestecaturi nedorite de culoare. Funcţia de overprint este suprapunerea la tipar a două culori diferite, culoarea de deasupra (ultimă) acoperind total culoarea de dedesubt (anterioară). Dacă activăm opţiunea Overprint la culoarea neagră, atunci cercul va putea rămâne întreg şi nu va mai fi nevoie să fie mai înainte decupat în locurile unde urmează a fi tipărit textul negru.

Afişarea şi crearea imaginilor vectoriale 6

Grafică pe calculator - 2011

Display-urile computerelor sunt alcătuite din puncte minuscule numite pixeli. Imaginile bitmap sunt de asemenea construite folosind aceste puncte. Cu cât sunt mai mici şi mai apropiate, cu atât calitatea imaginii este mai ridicată, dar şi mărimea fişierului necesar pentru stocarea ei. Dacă imaginea este afişată la o mărime mai mare decât cea la care a fost creată iniţial, devine granulată şi neclară, deoarece pixelii din alcătuirea 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 alcătuită, acestea fiind salvate apoi ca variaţii ale formulelor matematice specifice. Operatori matematici din software pot fi folosiţi pentru a întinde, răsuci, colora diferitele obiecte dintr-o imagine. În sistemele moderne, aceşti operatori sunt prezentaţi în mod intuitiv folosind interfaţa 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ă când este afişată imaginea, astfel încât procesul de îl salva ca bitmap într-un fişier este destul de simplu. Mult mai dificil este procesul invers, care implică aproximarea formelor şi culorilor din imaginea bitmap şi crearea obiectelor cu proprietăţile corespunzătoare. Numărul obiectelor generate este direct proporţional cu complexitatea imaginii. Cu toate acestea, mărimea fişierului cu imaginea în format vectorial nu va depăşi de obicei pe cea a sursei bitmap. Aplicaţiile grafice avansate pot combina imagini din surse vectoriale şi raster şi pun la dispoziţie unelte pentru amândouă, în cazurile în care unele părţi ale proiectului pot fi obţinute 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) schiţele sunt scanate, vectorizate şi transformate în fişiere CAD printr-un process denumit sugestiv hârtie-CAD.



În GIS imaginile provenite de la sateliţi sunt vectorizate cu scopul de a obţine hărţi.



Î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ă diferenţe 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 vectorizării este că rezultatul poate fi integrat cu succes intr-un design precum un logo. Dezavantaje şi limitări Principalul dezavantaj al imaginilor vectoriale este că, fiind alcătuite din obiecte descrise cu formule matemetice, atât numărul acestor obiecte cât şi complexitatea lor sunt limitate, depinzând de biblioteca de formule matematice folosită de programul de desenare. De exemplu, dispozitivele digitale, cum ar fi camerele foto sau scannerele, produc fişiere raster care nu pot fi reprezentate fidel folosind imagini vectoriale. Chiar şi în cazul în care se reuşeşte 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ă. Aplicaţii Datorită flexibilităţii în ceea ce priveşte rezoluţia imaginilor vectoriale, acestea sunt folosite intensiv pentru crearea materialelor ce trebuie imprimate la mărimi foarte diverse: acelaşi fişier poate fi folosit pentru un card de vizită cât şi pentru un panou publicitar, în ambele cazuri.rezultatele fiind foarte clare şi precise. O altă aplicaţie semnificativă a graficii vectoriale este în modelarea suprafeţelor 3D, unde se doreşte o calitate ridicată a obiectelor. GIS este acronimul provenit de la Geographic Information System (Sistem Informatic Geografic - uneori tradus în forma SIG în limba română). Acest sistem e utilizat pentru a crea, stoca, a analiza şi prelucra informaţii distribuite spaţial printrun proces computerizat. Tehnologia GIS poate fi utilizată în diverse domenii ştiinţifice cum ar fi: managementul resurselor, studii de impact asupra mediului, cartografie, planificarea rutelor. Specific unui GIS este modul de organizare a informaţiei gestionate. Există două tipuri de informaţie: una grafică care indică repartiţia spaţială 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, lăţimea, numărul benzilor, materialul de construcţie etc.). Informaţia grafică poate fi de două feluri: raster sau vectorială. Grafica raster este o modalitate de reprezentare a imaginilor în aplicaţii 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 poziţie unică în Sistemul Informatic corespunzătoare poziţiei geografice din lumea reală.

Informaţie tip raster - imagine satelitară - dintr-un sistem GIS Datorită informaţiilor asociate graficii, Sistemele Informatice Geografice beneficiază de toate oportunităţile de interogare pe care le ofera sistemele moderne de baze de date şi în plus pot oferi uşor analize orientate pe anumite zone geografice - aşa numitele hărţi tematice. Un exemplu comun de Sistem Informatic Geografic îl reprezentă Sistemele de Navigaţie. Harta rutieră în formă vectorială este georeferenţiată astfel încât Sistemul de Poziţionare Globală (Global Positioning System - GPS) să poată indica poziţia exactă a autovehiculului. Planificarea rutei este în fapt o hartă tematică obţinută în urma unei interogări spaţiale (căutarea distanţei celei mai scurte între două puncte) combinată cu o interogare a bazei de date asociate drumurilor din hartă astfel încât să fie respectate o serie de condiţii (limitări de viteză, gabarit, sensuri de circulaţie, interdicţii, etc.). Datorită impactului pozitiv, sistemele software GIS s-au dezvoltat foarte mult. Există pe piaţă un număr foarte mare de produse, atât ale dezvoltatorilor consacraţi (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 profesioniştilor domeniului. Adobe Photoshop, aşa cum este cunoscut astăzi, este vârful 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 modificări necesare în mod curent profesioniştilor şi nu numai: editări de luminozitate şi contrast, culoare, focalizare, aplicare de efecte pe imagine sau pe zone (selecţii), retuşare de imagini degradate, număr arbitrar de canale de culoare, suport de canale de culoare pe 8, 16 sau 32 biţi, efecte third-party etc. Există situaţii specifice pentru un profesionist în domeniu când alte pachete duc la rezultate mai rapide, însă pentru prelucrări generale de imagine, întrucât furnizează instrumente solide, la standard industrial, Photoshop este efectiv indispensabil. Alături de aplicaţia Photoshop (ajuns la versiunea CS5), este inclusă şi aplicaţia 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 diferenţiază de aplicaţiile concurente şi prin care stabileşte noi standarde în industria prelucrării de imagini digitale sunt: • • • • • •

Selecţiile Straturile (Layers) Măştile (Masks) Canalele (Channels) Retuşarea Optimizarea imaginilor pentru Web

Formate fişiere Photoshop poate citi majoritatea fişierelor raster şi vector. De asemenea, are o serie de formate proprii: •





PSD (abreviere pentru Photoshop Document). Acest format conţine o imagine ca un set de straturi (Layers), incluzând text, măşti (mask), informaţii despre opacitate, moduri de combinare (blend mode), canale de culoare, canale alfa (alpha), căi de tăiere (clipping path), setări duotone precum şi alte elemente specifice Photoshop. Acesta este un format popular şi des răspândit în rândul profesioniştilor, astfel că este compatibil şi cu unele aplicaţii concurente Photoshop. PSB (denumit Large Document Format) este o versiune mai nouă a formatului PSD, conceput special pentru fişiere mai mari (2GB) sau cu o informaţie prezentă pe o suprafaţă definită de laturi mai mari de 30.000 de pixeli (suportă până la 300.000x300.000 pixeli). PDD este un format mai puţin întâlnit, fiind asociat iniţial aplicaţiei Adobe PhotoDeluxe, astăzi (după 2002) compatibil doar cu aplicaţiile 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 foloseşte de toate detaliile acestor fişiere pentru a obţine un control total asupra aspectului imaginii, fără a modifica fişierul în sine. Adobe Bridge: Un browser complex, de ultimă generaţie, ce simplifică gestionarea fişierelor, poate procesa mai multe fişiere de tip RAW în acelaşi timp şi pune la dispoziţia utilizatorului informaţia metadata de tip EXIF etc. Multitasking: Adobe introduce posibilitatea de a folosi toate aplicaţiile sale din suita "Creative suite 2" în sistem multitasking. Suport High Dynamic Range (HDR) pe 32 biţi: Creează şi editează imagini pe 32 biţi, sau combină cadre fotografice de expuneri diferite într-una ce include valorile ideale de la cele mai intense umbre până la cele mai puternice zone de lumină. Shadow/Highlight: Îmbunătăţeşte contrastul fotografiilor subexpuse sau supraexpuse, inclusiv imagini CMYK, păstrând î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 uşor editabilă, folosind mouse-ul. Corectarea deformărilor cauzate de lentile: Lens Distort corectează cu uşurinţă efectele obişnuite date de lentilele aparatelor foto precum cele cilindrice, sferice, tip pâlnie, "efectul de vignetă" (funcţie de poziţionarea faţă de lumină, colţurile fotografiilor sunt fie întunecate, fie luminate în contrast cu restul fotografiei) sau aberaţiile cromatice. Personalizarea aplicaţiei:Posibilitatea de a personaliza orice scurtătură sau chiar funcţiile din meniul aplicaţiei şi posibilitatea de a salva modificările pentru fiecare mod de lucru în parte. Control îmbunătăţit al straturilor (layers): capacitatea de a selecta mai multe straturi în acelaşi timp. Smart objects: abilitatea de a deforma, redeforma şi a reveni la starea iniţială a obiectelor fără a pierde din calitate.

Aplicaţiile grafice se realizează prin utilizarea următoarelor clase de produse software: editoare grafice, biblioteci grafice, programe grafice specializate, desktop publishing, worksheet graphics (birotică). Editoarele grafice sunt destinate prelucrării grafice in domeniul proiectării asistate de calculator dintre produsele care înglobează editoare grafice amintim: Auto Cad, Freelanec 2 Plus, Windows Paint, Corel Draw. Bibliotecile grafice sunt destinate prelucrărilor prin intermediul limbajelor de programare de nivel înalt (C, Visual C, Visual Basic, Delphi, Open GL etc...). Acestea conţin biblioteci cu rutine (primitive) grafice care realizează funcţii grafice 11

Grafică pe calculator - 2011

necesare aplicaţii grafice. Programe grafice specializate sunt destinate rezolvării problemelor din anumite domenii, oferind utilizatorului să enunţe probleme cât mai simplu şi în concordanţă cu limbajul utilizat în domeniul său. De exemplu: Matlab, Mathematica, Mathcad. Desktop publishing sunt produse software destinate realizării de publicatii (ziare, reviste, reclame, etc.) la birou, parcurgând 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 Când vorbim despre o aplicaţie OpenGl, înseamnă că este scrisă într-un limbaj de programare (ca C/C++) ce apelează una sau mai multe librării OpenGL.

API OpenGL

Un OpenGL API poate conţine următoarele librării. • Funcţiile efective ce definesc OpenGL sunt conţinute în librăria opengl32.dll şi fişierul header GL/gl.h. • OpenGL utility library (GLU) cu librăria glu32.dll şi fişierul 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 operaţii de redare de bază cum ar fi transformările afine şi proiective şi calculele de iluminare. El permite de asemenea operaţii de redare avansată cum ar fi maparea texturilor şi redarea cu antialiasing. OpenGL este o interfaţă software pentru plăcile grafice. OpenGL se bazează pe IrisGL dezvoltat de Silicon Graphics (SGI). Scopul iniţial al dezvoltării IrisGL a fost de a dezvolta o interfaţă programabilă pentru staţiile grafice SGI. Această interfaţă programabilă s-a intenţionat iniţial a fi independentă de hardware şi a îndeplini cerinţele speciale ale programării grafice 3D. Ulterior IrisGL a devenit interesantă şi pentru alte staţii (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 incluzând 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 până la staţii de lucru şi supercalculatoare Aceasta se realizează prin mecanismul OpenGL de cerere a capacităţilor hardware. 17

Grafică pe calculator - 2011

OpenGL este bine structurat având o arhitectură intuitivă şi comenzi logice (în număr de câteva sute). Utilizând comenzile OpenGL se pot scrie aplicaţii având câteva linii de cod spre deosebire de programele realizate utilizând alte biblioteci. Una din caracteristicile forte ale interfeţei OpenGL este că interfaţa sa este uşor de utilizat de către începători fiind în acelaşi timp suficient de puternică pentru a satisface cerinţele unor aplicaţii profesioniste indiferent că acestea sunt simulatoare de zbor, animaţii, aplicaţii de proiectare asistată sau vizualizări ştiinţifice. Driverele OpenGL încapsulează informaţii despre substratul hardware, eliberând dezvoltatorul aplicaţiei de necesitatea de a scrie aplicaţiile pentru anumite caracteristici hardware. Sisteme grafice pentru grafica 3D

Pentru grafica 3D sunt disponibile câteva 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ă când obiectul este afişat sau manipulat. Un avantaj al listei de display este că un obiect complex este descris doar o dată chiar dacă este afişat de mai multe ori. Aceasta este important în special dacă obiectul de afişat trebuie transmis dea lungul unui canal de bandă joasă (cum ar fi reţeaua). Un dezavantaj al listei de display este că poate cere un efort considerabil pentru respecificarea obiectului dacă el este modificat continuu ca rezultat al interacţiunii 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, uşurinţă în utilizare şi buna documentare fac din OpenGL un produs preferat înaintea altor biblioteci pentru realizarea vizualizărilor ştiinţifice, a mediilor virtuale, aplicaţiilor CAD/CAM/CAE, imagistică medicală, jocuri, etc. Cei mai renumiţi dezvoltatori de software utilizează OpenGL ca suport pentru realizarea unor API de nivel mai înalt. Lista aplicaţiilor realizate având la bază OpenGL este mare şi ea cuprinde aplicaţii de modelare şi animaţie 3D (Maya, truSpace, 3D Studio Max, etc.), aplicaţii CAD/CAM (CATIA, 3D Studio Viz, Pro/ENGINEER, I-DEAS, etc), simulări 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, transformări de modelare, iluminare şi texturare, antialiasing, blending şi multe alte facilităţi. 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 conţine o mare cantitate de informaţii 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 condiţie; aceasta înseamnă că 18

Grafică pe calculator - 2011

OpenGL este o maşina de stare. Un exemplu de variabilă de condiţie este culoarea curentă cu care sunt redate (desenate) primitivele individuale. Aceasta este setată utilizând comanda glcolor() şi apoi culoarea setată se aplică tuturor obiectelor care se desenează, până când este utilizată o nouă comandă de modificare a culorii. La un anumit moment, o parte din această stare -chiar şi conţinutul unei texturi şi al memoriei video - este disponibilă în mod direct utilizatorului, care poate utiliza comenzi pentru a obţine valori asociate cu diferite informaţii de stare. O parte a informaţiilor de stare sunt vizibile, însă, doar prin efectul pe care îl au asupra a ceea ce se desenează. OpenGL permite de asemenea aplicaţii 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 instrucţiuni din bibliotecă conţine câteva sute de comenzi, toate fiind prefixate de gl. OpenGL asigură controlul direct asupra operaţiilor fundamentale de grafică 3D şi 2D. Aceste operaţii includ specificarea unor parametrii cum ar fi matricele transformărilor, coeficienţii ecuaţiilor 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 aplicaţiei 3D pe baza primitivelor simple - puncte, linii, poligoane. Pentru a simplifica puţin lucrurile pentru dezvoltatorii de aplicaţii, experţii în grafica 3D au dezvoltat câteva biblioteci dintre care cele mai importante sunt GLU (OpenGL Utility Library), GLUT (OpenGL Utility Toolkit) sau echivalentul său Microsoft -GLAUX. GLU simplifică lucrurile pentru crearea calculelor de proiecţie şi pentru construirea suprafeţelor complexe, reprezentând printre altele curbe şi suprafeţe 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 aplicaţii de rutine pentru controlarea evenimentelor externe provenite de la utilizator prin mouse sau tastatură. Oricine doreşte să devină expert în grafica 3D trebuie să se familiarizeze cu câteva noţiuni fundamentale de algebră şi geometrie analitică. Altfel utilizarea comenzilor OpenGL se face mecanic fără o profundă înţelegere a mecanismelor interne. Aceste noţiuni sunt calculul vectorial (produs scalar, produs vectorial), calcul matricial (înmulţirea matricelor, matrice identitate), transformări geometrice. Sunt de asemenea necesare câteva cunoştinţe din domeniul opticii. Cei interesaţi pot să îşi reîmprospăteze aceste cunoştinţe şi din cărţi 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ă funcţii 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 redării acestor primitive inclusiv a felului cum sunt iluminate, colorate şi a modului în care spaţiul 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ă plăcile grafice care conţin acceleratoare grafice variind de la 19

Grafică pe calculator - 2011

cele cu un subsistem de redare capabil să redea linii şi poligoane 2D până la procesoare în virgulă mobilă sofisticate capabile de transformări şi calcule asupra datelor geometrice. Sarcina implementatorului este de a asigura interfaţa software CPU astfel încât pentru fiecare comandă OpenGL să se dividă sarcinile între CPU şi placa grafică. Pentru a se obţine un optim al performanţei î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 (deşi pot interacţiona în mai multe moduri pentru a determina ceea ce se produce în final în memoria video). Modurile sunt setate, primitivele specificate şi celelalte operaţii OpenGL sunt descrise prin intermediul comenzilor, în forma apelurilor de funcţii sau proceduri.

Schema fluxului de procesare OpenGL Modelul de interpretare a comenzilor de către 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 acelaşi 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 fără liste de display) comenzile sunt transmise prin fluxul de procesare OpenGL. Comenzile nu sunt altceva decât apeluri de funcţii şi proceduri OpenGL. Primul stadiu de procesare asigură o modalitate eficientă pentru aproximarea curbelor şi a suprafeţelor curbe prin evaluarea funcţiilor polinomiale ale valorilor de la intrare. Acest stadiu este parcurs doar de acele comenzi utilizate pentru reprezentarea curbelor şi a suprafeţelor Bezier şi spline. Următorul nivel operează asupra primitivelor geometrice descrise prin coordonatele vârfurilor: puncte, segmente de dreaptă şi poligoane. în acest stadiu vârfurile sunt transformate şi iluminate, şi primitivele sunt decupate faţă de volumul de vizualizare pentru a fi pregătite pentru nivelul următor -rasterizarea. Rasterizarea converteşte o primitivă proiectată, scalată la viewport într-o serie de fragmente. Fiecare fragment comprimă pentru o locaţie a unui pixel din memoria video -culoarea, coordonatele de textură şi adâncimea (z). Rasterizarea produce o serie de adrese şi de valori pentru memoria video utilizând descrierea 2D a unui punct, segment de dreaptă, sau poligon. Fiecare fragment astfel produs alimentează nivelul 20

Grafică pe calculator - 2011 următor care asigură operaţii asupra fragmentelor individuale înainte ca ele să modifice memoria video. Aceste operaţii includ actualizări condiţionale în memoria video pe baza noilor valori sau a valorilor de adâncime memorate anterior (pentru efectuarea testului de ascundere), amestecarea culorilor fragmentelor cu culorile memorate, precum şi mascarea şi celelalte operaţii logice asupra valorilor din fragment. Când este rasterizat un segment de dreaptă sau un poligon, aceste date asociate sunt interpolate de-a lungul primitivei pentru a obţine o valoare pentru fiecare fragment. Rasterizarea fiecărui tip de primitivă este controlată de un grup corespunzător de parametrii (atribute de redare a primitivelor). Un atribut de lăţime 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 haşură pentru poligoane. Antialiasing-ul poate fi activat sau dezactivat individual pentru fiecare tip de primitivă. Când este activat, o valoare acoperitoare este calculată pentru fiecare fragment ce descrie porţiunea 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 secţiunea de procesare a vârfurilor din flux pentru a transmite un bloc de fragmente în mod direct prin blocul de rasterizare spre blocul operaţiilor pe fragmente individuale, determinând 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 porţiune a memoriei video în alta. Aceste transferuri pot include unele tipuri de decodificări şi codificări. 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. Aşa cum s-a mai arătat, la modul general, sunt două operaţii principale care se pot face utilizând OpenGL: - Se desenează ceva; - Se modifică starea (aspectul) a ceea ce se desenează. În ceea ce priveşte 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 utilizând OpenGL este atât grafică vectorială cât ş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 uneşte primitivele geometrice cu cele imagine. O altă operaţie comună care se face asupra ambelor tipuri de primitive este setarea stării. Setarea stării este procesul de iniţializare al datelor interne, utilizate de OpenGL pentru redarea primitivelor. Setarea poate fi o operaţie simplă cum ar fi stabilirea dimensiunii şi culorii unui punct desenat dar şi o operaţie mai complicată cum ar fi iniţializarea nivelelor multiple pentru maparea texturilor. Trebuie subliniat că deşi primitivele geometrice pe care le poate reda OpenGL nu sunt spaţiale, în sensul că ele pot fi redate şi în plan, totuşi 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 când bibliotecii 3D i se furnizează coordonate 3D şi prin mecanismele proiecţiei se face transformarea din sistemul de coordonate 3D în 2D urmând ca apoi primitivele să fie redate pe dispozitivul de afişare. 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 porţiuni 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 porţiuni. în mod similar, afişarea conţinutului memoriei video pe un tub CRT nu este controlată de OpenGL (incluzând transformarea valorilor individuale din memoria video prin asemenea tehnici, cum ar fi corecţia gamma). Configurarea memoriei video are loc în exteriorul OpenGL, în conjuncţie cu sistemul de ferestre; iniţializarea unui context OpenGL are loc când sistemul de ferestre alocă o fereastră pentru redare OpenGL. Suplimentar, OpenGL nu are facilităţi de obţinere a 21

Grafică pe calculator - 2011 intrărilor de la utilizator, deoarece este de aşteptat ca sistemul de ferestre sub care rulează OpenGL să asigure asemenea facilităţi. Aceste considerente fac de fapt OpenGL independent de sistemul de ferestre. ■, Jf 

Sistem de coordonate OpenGL foloseste un sistem de coordonate dreapta. Deşi 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 +oo spre 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 //headerul pentru ferestre necesr in toate programele #include //headerul functiilor OpenGL #include //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 - primeşte 3 parametri de tip GLdouble glColor3f - 3 parametri de tip GLfloat Totuşi există şi câteva excepții în care lipsesc numărul şi tipul parametrilor (de exemplu glBegin) sau care incep cu un alt prefix (gluLookAt). Gestiunea ferestrelor folosind librăria 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) Stabileşte 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

2011

Grafică pe calculator

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 #include #include void CALLBACK Deseneaza(void) //funcţia 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

2011

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();__________________

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 #include #include // 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 când 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 (wwindowHeightrsize) 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); }

Funcţii GLAUX pentru desenarea primitivelor 3D În exemplul anterior s-a constatat că s-a utilizat o funcţie GLAUX pentru desenarea unui cub wireframe având latura de 100 de unităţi - auxWireCube(100). Dimensiunea unei unităţi în pixeli fiind cea specificată în funcţia myReshape(). Biblioteca GLAUX dispune de funcţii pentru desenarea şi a altor corpuri 3D. În continuare vom enumera aceste funcţii.

28

-

-

-

void auxSolidBox(Gldouble width, Gldouble height, Gldouble depth); permite desenarea unui paralelipiped, centrat în origine, pentru care se specifică lăţimea, înălţimea şi adâncimea. 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 feţe, feţele 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 feţe, feţele 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 feţe, feţele 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 feţe, feţele 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 înălţimea. 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 înălţimea. 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 secţiunii prin tor, iar outerRadius este raza găurii 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

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF