Sunteți pe pagina 1din 58

Grafică pe calculator

UNIVRSITATEA TITU MAIORESCU FACULTATEA DE INFORMATICA

GRAFICA PE CALCULATOR
GRAFICA PE CALCULATOR

Mironela Pîrnău

1

Grafică pe calculator

Acest

specializarea Informatică.

material

este

destinat

studentilor

anului

II,

invatamant

la

distantă,

Modul de prezentare are în vedere particularităţile învăţământului la distanţă, în care studiul individual este determinant. În timp ce profesorul sprijină studentul prin coordonarea învătării si prin feedback periodic asupra acumulării cunostintelor si a deprinderilor, studentul alege locul, momentul si ritmul pentru studiu, dispune de capacitatea de a studia independent si totodată îsi asumă responsabilitatea pentru initierea si continuarea procesului educational.

pentru initierea si continuarea procesului educational. Disciplina Grafica pe calculator utilizeaz ă no ţ

Disciplina Grafica pe calculator utilizează noţiunile predate la disciplinele Bazele informaticii, Geometrie computaţională, discipline studiate în anul I si anul II sem I.

O neîntelegere a notiunilor fundamentale prezentate în acest curs poate genera dificultăti în asimilarea conceptelor complexe introduse în alte cursuri de specialitate.

2

Grafică pe calculator

Competenţe specifice disciplinei

1. Competenţe profesionale Cunoasterea si utilizarea conceptelor si tehnicilor pentru proiectarea, elaborarea si
1. Competenţe profesionale
Cunoasterea si utilizarea conceptelor si tehnicilor pentru proiectarea, elaborarea si
utilizarea programelor specifice pentru grafica pe calculator;
Intelegerea si asimilarea principalelor cunostinte privind modelarea, reprezentarea si
prelucrarea obiectelor 2D sau 3D in domeniul aplicatiilor software;
Programare de grafica C++, OpenGL, Java 3D, SVG (Scalable Vector Graphics)
2.
Explicare şi interpretare
Explicarea rolului şi importantei mediului grafic
Înţelegerea functionarii functiilor si metodelor
3.
Instrumental - aplicative
Corelarea cunoştinţelor teoretice cu abilitatea de a le aplica în practică
Posibilitatea de exemplificare a tehnologiilor utilizate in grafica pe calculator

3

Grafică pe calculator

Continutul disciplinei

Lucrul cu obiecte imagine de tip „Bitmap”(conversia obiectelor vectoriale in obiecte bitmap, rezolutie, culoare, transparenta/opacitate fundal; importul imaginilor, tipuri de fisiere ce contin imagini bitmap; filtre aplicate imaginilor pentru a crea efecte speciale). Introducere în VRML; Crearea si vizualizarea fisierele VRML Filmul cu desene animate. Elaborarea de aplicatii grafice in OpenGL Desenare vectoriala (desenarea conturului unei forme.desenarea unei forme scalabile; transformarea unei forme vectoriale in selectie); Modele, spatii si moduri de culoare (intelegerea culorilor si moduri de culoare uzuale; conversia unei imagini dintr-un mod de culoare in altul; utilizarea tonurilor de gri; utilizarea si gestionarea culorilor cu paletele Color si Swatches, folosirea pipetei pentru culegerea culorii dintr-o imagine). Manipularea obiectelor (selectarea si deselectarea obiectelor, copierea, duplicarea, clonarea si stergerea obiectelor; culoarea de umplere si de contur si preluarea acestora de la un alt obiect; pozitionarea obiectelor in pagina direct sau prin aliniere si distribuire; dimensionarea, scalarea, rotirea si inclinarea obiectelor) Efecte speciale aplicate obiectelor (perspectiva, contur, infasuratoare (envelope), extruziune; tranzitii graduale intre 2 sau mai multe obiecte (blend); umbra, transparenta, efect de lentila, efectul PowerClip; distorsionarea obiectelor; copierea unui efect de la un obiect la altul).

Bibliografia 1. G. Albeanu, Grafică pe calculator. Algoritmi fundamentali, Editura Univ. Bucureşti,2001. 2. Baciu,
Bibliografia
1. G. Albeanu, Grafică pe calculator. Algoritmi fundamentali, Editura Univ.
Bucureşti,2001.
2. Baciu, R., Programarea aplicaţiilor grafice 3D cu OpenGL, Editura
Albastră, Cluj-Napoca, 2005.
3. Moldoveanu, F., Racoviţă, Z.,Hera, G., Petrescu, Ş., Zaharia, M., Grafica
pe calculator, Editura Teora, Bucureşti, 1996.
4. Ionescu, F., Grafica în realitatea virtuală, Editura Tehnică, Bucureşti 2000.
5. Hearn, Donald, Backer,M. Pauline, Computer Graphics, Prentice-Hall, Inc,
Englewood Cliffs, New Jersy, 1986
6. Foley,J., A.vanDame, Feiner, S.K., Hughes, J.F., Computer Graphics:
principles and practice, Addison Wesley Publishing Company, second
edition, 1993.
7. Neider, J., Davis, T., Woo, M., OpenGL Programming Guide, Addison-
Wesley, Menlo Park, 1993.
8. www.wikipedia.org

4

Grafică pe calculator

Nota finală acordata fiecărui student, va conţine

Nota final ă acordata fiec ă rui student, va con ţ ine urm ă toarele componente
urm ă toarele componente în procentele men ţ ionate:

următoarele componente în procentele menţionate:

- proba scrisa 60% - realizare referat 40% Conditia de participare la proba de verificare,
- proba scrisa
60%
- realizare referat
40%
Conditia de participare la proba de verificare, este ca
fiecare student sa prezinte un referat de maxim 15
pagini despre unul sau mai multe subiecte tratate in
suportul de curs, sa testeze si sa comenteze functiile
folosite in exemplele rezolvate la paginile 31-49, pentru
cel
putin 5 probleme.
Referatul
si fisierele cpp vor fi
predate odata cu lucrarea scrisa, pe un CD ce va contine
obligatoriu numele studentului.

5

Grafică pe calculator

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 •
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
• Televiziunea digitală

6

Grafică pe calculator • Proiecte multimedia, proiecte interactive • Fotografia digitală şi posibilităţile
Grafică pe calculator
• 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ă.

7

Grafică pe calculator

Grafica digitală se divizează în mai multe categorii:

Grafica bidimensională (se constituie din grafică raster şi • grafică vector) Grafica Fractal • Grafica
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

8

Grafică pe calculator

ş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 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
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:

9

Grafică pe calculator

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.

Cyan-Magenta-Yellow-

amestec substractiv CMYK (de la

blacK)

– amestec de culori pigment – se utilizează pentru

proiecte poligrafice destinate tiparului color. Unele modele de culoare admit variaţii ale diapazonului cromatic, din
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,

prelucrare de grafic ă vectorial ă ( Adobe Illustrator , Corel Draw ); • programe de

Corel Draw);

programe de paginare (Adobe InDesign, QuarkXPress, Adobe Pagemaker, Corel Ventura);

programe utilitare (Adobe Acrobat Professional, Adobe Acrobat Distiller etc);

10

Grafică pe calculator

Cel mai utilizat program pentru realizarea documentelor ce urmeaz ă a fi tip ă rite

Cel mai utilizat program pentru realizarea documentelor ce urmează a fi tipărite este Corel Draw. Are setări speciale pentru

separaţii, overprint

documentelor ce urmeaz ă a fi tip ă rite este Corel Draw . Are set ă
Monitoarele sunt aparatele ce decodifică semnalul electric şi generează culorile RGB (Red, Green, Blue –
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.

11

Grafică pe calculator

Afişarea şi crearea imaginilor vectoriale Display-urile computerelor sunt alcătuite din puncte minuscule numite
Afişarea şi crearea imaginilor vectoriale
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

12

Grafică pe calculator

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
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
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

13

Grafică pe calculator

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.

(Sistem

Informatic Geografic - uneori tradus în forma SIG în limba română). Acest sistem e

GIS este acronimul provenit de la

Geographic Information System

utilizat pentru a crea, stoca, a analiza şi prelucra informaţii distribuite spaţial Specific unui GIS
utilizat pentru a crea, stoca, a analiza şi prelucra informaţii distribuite spaţial
Specific unui
GIS
şi alta sub formă de bază de date pentru a stoca
(de
ex.
pentru o
construcţie etc.).
Informaţia grafică poate fi de două feluri: raster sau vectorială
grafică poate fi de două feluri: raster sau vectorială printr- un proces computerizat. Tehnologia GIS poate

printr-

un 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.

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

atributele asociate acestor elemente

şosea lungimea ei, lăţimea, numărul benzilor, materialul de

. 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 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.

14

Grafică pe calculator

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.).

(ajuns la versiunea CS5), este inclusă şi aplicaţia
(ajuns la versiunea CS5), este inclusă şi aplicaţia

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 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

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:

15

Grafică pe calculator

Selecţiile

 

Straturile (Layers)

 

Măştile (Masks)

 

Canalele (Channels)

 

Retuşarea

 

Optimizarea imaginilor pentru Web

Formate fişiere

PDD este un format mai puţin întâlnit, fiind asociat iniţial aplicaţiei Adobe PhotoDeluxe, astăzi (după
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.

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ă.

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).

Ultimele instrumente

16

Grafică pe calculator

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
• 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
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.)

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.

cu mai multe procesoare de text si cu unele editoare grafice, Pagemake r, Xpress, Super Pain

17

Grafică pe calculator

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 - Single UNIX Specification (SUS) - Microsoft Win32 API -
Single UNIX Specification
si
Microsoft
- Single UNIX Specification (SUS)
- Microsoft Win32 API
- Java Platform, Enterprise Edition API's
- OpenGL cross-platform API
- DirectX for Microsoft Windows
- Google Maps API
- Wikipedia API

interfata API care nu necesita drepturi mari de acces sunt numite "open"

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

(OpenGL ar fi un exemplu). Cateva exemple de Interfete API:

- Simple DirectMedia Layer (SDL)

- svgalib pentru Linux si FreeBSD

- Carbon si Cocoa pentru Macintosh OS

Microsoft Windows API's

18

Grafică pe calculator

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
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.

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

19

Grafică pe calculator

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.
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.
2.
DirectDraw: pentru generarea de obiecte grafice 2D (acum
dezaprobat, desi este inca folosit de multi programatori)
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)

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

Inainte de existenta

necesita hardware de inalta performanta si era limitat pe inginerie si utilizatori CAD. Direct3D Inainte de

20

Grafică pe calculator

(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.

(Open Audio Library) pentru acest scop a devenit populara. DirectX este folosit ca si baza pentru
DirectX
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

21

Grafică pe calculator

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.

video. DirectMusic va fi probabil singurul ramas intact. Direct3D O pr oprietate noua majora in DirectX

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:

-

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 9: aceasta Interfata API emuleaza comportamentele ale Direct3D 9

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.

-

-

GeForce 8 Series, care de fapt profita foarte putin de capabilitatile ale Direct3D

10.

Direct3D 10: Temporar, singurul GPU compatibil cu Direct3D este NVIDIA

Alternative

Exis ta alternative pentru aceasta ar hitectura, unele mai complete decat altele. Nu exista o

Exista alternative pentru aceasta arhitectura, unele mai complete

decat altele. Nu exista o solutie unica ca re sa ofere toate functionalitatile care le

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

22

Grafică pe calculator

cu DirectX si in aceasi timp gratuita si cross-platform (poate fi folosite pe

cu DirectX si in aceasi timp gratuita si cross-platform (poate fi folosite pe

diferite platforme).

cu DirectX si in aceasi timp gratuita si cross-platform (poate fi folosite pe diferite platforme).

OpenGl

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.

C/C++) ce apeleaz ă una sau mai multe libr ă rii OpenGL. API OpenGL Un OpenGL
API OpenGL Un OpenGL API poate conţine următoarele librării. • Funcţiile efective ce definesc 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

ale program ă rii grafice 3D. Ulterior IrisGL a devenit interesant ă ş i pentru alte

(www.opengl.org).

23

Grafică pe calculator

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. 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.

OpenGL este portabilă,

Sisteme grafice pentru grafica 3D Cei mai renumiţi dezvoltatori de software utilizează OpenGL ca suport
Sisteme grafice pentru grafica 3D
Cei mai renumiţi dezvoltatori de software utilizează OpenGL ca suport pentru
realizarea unor API de nivel mai înalt.

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.

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.).

24

Grafică pe calculator

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ă 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
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-uniform-
rational-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

25

Grafică pe calculator

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
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
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.

26

Grafică pe calculator

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). Server-ul 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

Bezier şi Următorul nivel operează asupra primitivelor geometrice descrise prin coordonatele Rasterizarea
Bezier şi
Următorul
nivel
operează
asupra
primitivelor
geometrice
descrise
prin
coordonatele
Rasterizarea converteşte o primitivă proiectată
, scalată la viewport într-o serie de fragmente.
Rasterizarea fiecărui tip de primitivă este controlată de un grup corespunzător de parametrii
fragmentului (în modul RGBA)

parcurs doar de acele comenzi utilizate pentru reprezentarea curbelor şi a suprafeţelor

spline.
spline.

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.

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 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.

(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

a fost terminat ă pentru modificarea valorii alfa a sau valorii color index (în modul index).

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:
tipuri:

27

Grafică pe calculator

- Primitive geometrice;

- Primitive imagine. Altfel spus, grafica pe care o putem realiza utilizând OpenGL este atât
- 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 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.
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 <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)

{

28

Grafică pe calculator

//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

glVertex3d - primeşte 3 parametri de tip GLdouble

glColor3f - 3 parametri de tip GLfloat

glVertex3d - prime ş te 3 parametri de tip GLdouble glColor3f - 3 parametri de tip
Totuşi există şi câteva excepţii în care lipsesc numărul şi tipul parametrilor (de exemplu glBegin)
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).
auxInitPosition(GLint x, GLint y, Glsizei latime, Glsizei inaltime)
void glClearColor (Glclampf red, Glclampf green, Glclampf blue, Glclampf alpha)

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).

Dupa setarea modului de afisare, se poate preciza locul unde sa fie pozitionata fereastra si dimensiunile acesteia.

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

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.

29

Grafică pe calculator

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
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
Red
1.0
0.0
0.0
Green
0.0
1.0
0.0
1.0
1.0
0.0
Blue
0.0
0.0
1.0
Magenta
1.0
0.0
1.0
Cyan
0.0
1.0
1.0
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
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) //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);

30

Grafică pe calculator

glEnd();

glFlush();

}

void

main()

2011

{

auxInitDisplayMode(AUX_SINGLE | AUX_RGBA); auxInitPosition(50,50,300,300) ;

auxInitWindow("P1-OpenGL");

auxMainLoop(Deseneaza);

}

auxMainLoop(Deseneaza); } Executia aplicatiei Procesul de desenare in OpenGL este
Executia aplicatiei Procesul de desenare in OpenGL este numit deseori "rendering", Desenarea primitivelor in
Executia aplicatiei
Procesul de desenare in OpenGL este numit deseori
"rendering",
Desenarea primitivelor in OpenGL

|

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.

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.

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:

-triunghiuri

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:

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.

GL_POINTS - pentru desenare puncte GLLINES, GLLINESTRIP, GL_LINE_LOOP - pentru segmente. GLTRIANGLES,
GL_POINTS
- pentru desenare puncte
GLLINES, GLLINESTRIP, GL_LINE_LOOP
- pentru segmente.
GLTRIANGLES,
GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN
GL_QUADS, GL_QUAD_STRIP
- pentru patrulatere
GL_POLYGON
- pentru poligoane
glPolygonMode (GLenum face, GLenum mode)
face poate fi
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):

31

Grafică pe calculator

2011

glBegin(GLTRIANGLES); glVertex3f (xl, yl, zl);

glVertex3f (x2, y2, z2); glVertex3f (x3, y3, z3); glEnd(); glBegin(GLTRIANGLES); glVertex3f (xl, yl, zl);

glVertex3f ( x 2,

glVertex3f ( x 3, y 3, z 3);

z 2);

y 2,

glVertex3f (x4, y4, z4); glVertex3f ( x 5, y 5, z 5); glVertex3f (x6, y6, z6); glEnd();

( x 5, y 5, z 5); glVertex3f (x6, y6, z6); glEnd(); deseneaza triunghiurile (v i
( x 5, y 5, z 5); glVertex3f (x6, y6, z6); glEnd(); deseneaza triunghiurile (v i
deseneaza triunghiurile (v i , ^+1,^+2) , pentru i = 1 , 2, ,n-2. omun:
deseneaza triunghiurile (v i , ^+1,^+2) , pentru i = 1 , 2,
,n-2.
omun: GL_TRIANGLE_FAN si varfurile v 1 ,
,v
1.
glBegin (GLQUADS);
glVertex3f (xl, yl, zl);
v 1 , ,v 1. glBegin (GLQUADS); glVertex3f (xl, yl, zl); glVertex3f (xn, yn, zn); glEnd();

glVertex3f (xn, yn, zn); glEnd(); unde n este multiplu de 4. Se deseneaza n/4 patrulatere cu varfurile v 4i-3 , v 4i-2 , v 4i-1 , v 4i , 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 v 2i-3 , v 2i-2 , v 2i-1 , v 2i , cu 2 < i < n/2.

v 2 i - 1 , v 2 i , cu 2 < i < n

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

Alta varianta este aceea in care un varf este

, n-

n . Deseneaza triunghiurile (v 1 , v i , v i + 1 ), pentru i = 2, 3,

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:

2 triunghiuri pentru a-l desena ca un poligon plin. Comanda pent ru desenarea unuia sau mai

32

Pentru desenare se apelează

glBegin
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

implicita fiind 1.0. Grosimea liniilor se controleaza cu comanda glLineWidth(GLfloat grosime) // Exemplu:
comanda glLineWidth(GLfloat grosime) // Exemplu: Redesenarea si redimensionarea ferestrei de lucru OpenGL #include
comanda
glLineWidth(GLfloat
grosime)
// 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)
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 (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);

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.

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

}

// Exemplu: Animaţie folosind biblioteca AUX #include <windows.h>

33

#include <gl\gl.h> #include <gl\glaux.h>

// Poziţia si marimea iniţiala 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
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 =
{ 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 când s-au atins marginile (st. sau dr.)
if (x1>windowWidth-rsize || x1<0) xstep = -xstep;
// Inversarea directiei când 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>windowHeight-rsize) 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);

}

34

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.

- 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).

35

- 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.

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

Exemple OpenGl Exemplu 1 Exemplu 2
Exemple OpenGl
Exemplu
1
Exemplu 2

36

Exemplu 3

Exemplu 4
Exemplu 4

Exemplu 5

37

Exemplu 6 Exemplu 7
Exemplu 6
Exemplu 7

38

Exemplu 8
Exemplu 8

Exemplu 9

39

Exemplu 10 Exemplu 11
Exemplu 10
Exemplu 11

40

Exemplu 12 41

Exemplu 12

41

Exemplu 13 Exemplu 14
Exemplu 13
Exemplu 14

42

Exemplu 15
Exemplu 15

Exemplu 16

43

Exemplu 17
Exemplu 17

Exemplu 18

44

Exemplu 19
Exemplu 19

Exemplu 20

45

Exemplu 21
Exemplu 21

46

Exemplu 22
Exemplu 22

47

Exemplu 23
Exemplu 23

48

Exemplu 24 Exemplu 25
Exemplu 24
Exemplu 25

49

Exemplu 26
Exemplu 26

Exemplu 27

50

Exemplu 28
Exemplu 28

51

Exemplu 29
Exemplu 29

Exemplu 30

52

Exemplu 31
Exemplu 31

53

Exemplu 32
Exemplu 32

54

MODEL BILET 1

1. Caracterizati grafica digitală (2 pct).

2. Caracterizati grafica vectorială (2 pct).

3.

4.

Explicati modelele de culori RGB si CMYK (2 pct).

Sa se explice fiecare functie OpenGl utilizata in programul urmator (1.5 pct). 19. { 20.
Sa se explice fiecare functie OpenGl utilizata in programul urmator (1.5 pct).
19. {
20. glViewport (0, 0, (GLsizei) w, (GLsizei) h);
21. glMatrixMode (GL_PROJECTION);
#include <GL/glut.h>
22. glLoadIdentity ();
void init()
23. gluOrtho2D
(0.0,
(GLdouble)
w,
{
(GLdouble) h);
glClearColor (0.0, 0.0, 0.0, 0.0);
24. }
glShadeModel (GL_FLAT);
25. int main(int argc, char** argv)
}
26. {
void display()
27. glutInit(&argc, argv);
{
28. glutInitDisplayMode
(GLUT_SINGLE
glClear (GL_COLOR_BUFFER_BIT);
GLUT_RGB);
glColor3f (1.0, 0.0, 0.0);
29. glutInitWindowSize (600, 600);
glBegin(GL_POLYGON);
30. glutInitWindowPosition (100,100);
glVertex2f(200.0,200.0);
31. glutCreateWindow (argv[0]);
glVertex2f(400.0,200.0);
32. init ();
glVertex2f(400.0, 400.0);
33. glutDisplayFunc(display);
glEnd();
34. glutReshapeFunc(reshape);
glFlush ();
35. glutMainLoop();
}
36. return 0;
void reshape (int w, int h)
37. }

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

0.0,

|

5. Sa se scrie setul de comenzi (utilizand OpenGl) care, in urma executiei, vor conduce la fereastra din figura alaturata (1.5 pct).

de comenzi (utilizand OpenGl) care, in urma executiei, vor conduce la fereastra din figura alaturata (1.5

55

Model bilet 2

1. Prezentati cel putin 4 idei principale din referatul intocmit (2 pct).

2. Caracterizati grafica vectorială (2 pct).

3. Explicati modelele de culori RGB si CMYK (1 pct). 4. Sa se explice fiecare
3.
Explicati modelele de culori RGB si CMYK (1 pct).
4.
Sa se explice fiecare functie OpenGl utilizata in programul urmator (2 pct).
1.
#include <GL/glut.h>
21.
glMatrixMode
2.
void init()
(GL_PROJECTION);
3.
{
22.
glLoadIdentity ();
4.
glClearColor (0.0, 0.0, 0.0, 0.0);
23.
gluOrtho2D (0.0, (GLdouble) w,
5.
glShadeModel (GL_FLAT);
0.0, (GLdouble) h);
6.
}
24. }
7.
void display()
25. int main(int argc, char** argv)
8.
{
26. {
9.
glClear
(GL_COLOR_BUFFER_BIT);
27. glutInit(&argc, argv);
28. glutInitDisplayMode
10.
(GLUT_SINGLE | GLUT_RGB);
11.
glColor3f (1.0, 0.0, 0.0);
glBegin(GL_POLYGON);
29. glutInitWindowSize (600, 600);
12.
glVertex2f(200.0,200.0);
30. glutInitWindowPosition
13.
glVertex2f(400.0,200.0);
(100,100);
14.
glVertex2f(400.0, 400.0);
31. glutCreateWindow (argv[0]);
15.
16.
33. glutDisplayFunc(display);
17.
34. glutReshapeFunc(reshape);
18.
35. glutMainLoop();
19.
glEnd();
glFlush ();
}
void reshape (int w, int h)
{
32. init ();
36. return 0;
20.
glViewport
(0,
0,
(GLsizei)
w,
37. }
(GLsizei) h);
5. Explicati ce rezulta in urma testarii setului de comenzi (2 pct).
1.
#include <GL/glut.h>
iv.
}
2.
#include <stdlib.h>
e. glEnd();
3.
#include <math.h>
f. glFlush();
4.
void Display(void)
g. }
a.
{
b. glClear(GL_COLOR_BU
5.
int main(void)
FFER_BIT);
a. {
c. glBegin(GL_LINES);
b. glutCreateWindow("mode
l");
d. for(int i=0;i<100;++i)
{
c. glutDisplayFunc(Display);
i.
d. glColor3f(1,1,0);
ii.
glVertex3f(0,0,0);
e. glutMainLoop();
iii.
glVertex3f(1-
f. return 0;
i/100.0,i/100.0,0);
g. }

56

În dorinţa de ridicare continuă a standardelor desfăşurării activitatilor dumneavoastra, va rugăm să completaţi acest chestionar şi să-l transmiteţi indrumatorului de an.

Disciplina: Unitatea de invatare/modulul: Anul/grupa: Tutore: Partea I . Conţinut 1. Care dintre subiectele tratate
Disciplina:
Unitatea de invatare/modulul:
Anul/grupa:
Tutore:
Partea I . Conţinut
1.
Care dintre subiectele tratate in aceasta unitate/modul consideraţi că este cel mai
util şi eficient? Argumentati raspunsul.
2.
Ce
aplicatii/proiecte
din
activitatea dumneavoastra doriţi să
imbunatatiti/modificaţi/implementaţi în viitor în urma cunoştinţelor acumulate în cadrul
acestei unitati de invatare/modul?

3. Ce subiecte consideraţi că au lipsit din acesta unitate de invatare/modul?

57

4.

La care aplicatii practice ati intampinat dificultati in realizare? Care credeti ca este

motivul dificultatilor intalnite?

 
5. Timpul alocat acestui modul a fost suficient? 6. Daca ar fi sa va evaluati
5. Timpul alocat acestui modul a fost suficient?
6. Daca ar fi sa va evaluati cunostintele acumulate din parcurgerea unitatii de
invatare/modului, care este nota pe care v-o alocati, pe o scala de la 1-10?.
Argumentati.
Partea II. Impresii generale
1.
Acest modul a întrunit aşteptările dumneavoastră?
În totalitate
În mare măsură
În mică măsură
2)
Aveţi
sugestii
care
conducă
la
creşterea
calităţii
acestei
unitati
de
invatare/modul?

Nu

3) Aveţi propuneri pentru alte unitati de invatare?Argumentati.

Vă mulţumim pentru feedback-ul dumneavoastră!

58