Documente Academic
Documente Profesional
Documente Cultură
FACULTATEA DE INFORMATICA
GRAFICA PE CALCULATOR
grafica pe calculator
Mironela Prnu
2015-2016
grafica pe calculator
2. Explicare i interpretare
3. Instrumental - aplicative
grafica pe calculator
60%
40%
Continut
Unitatea de invatare 1 Unitatea de invatare 2 Unitatea de invatare 3 Unitatea de invatare 4 -
grafica pe calculator
Grafica pe calculator
Biblioteca grafic OpenGL
Java 2D
Unity Game Engine
Bibliografie
1
Termenul fractal provine din latinescul fractus, care nseamn "spart, "fracturat".
Acest termen a fost introdus de Benot Mandelbrot, n 1975.
Un fractal este un obiect matematic care are o structur detaliat la orice scar. n
structura unui fractal, fiecare parte este asemntoare cu fractalul ntreg (este autosimilar).
grafica pe calculator
Desktop publishing, abreviat DTP, este o expresie englez din domeniul tipografiei i care sar putea traduce prin "publicare cu ajutorul calculatorului de tip desktop". Este procesul de
creare i editare (modificare) a unui document cu ajutorul unui computer avnd ca obiectiv
final tiprirea lui.
n acest domeniu exist programe de calculator specializate ce pot fi mprite n mai multe
categorii:
programe de creaie i prelucrare foto (Adobe Photoshop, Corel Photopaint);
programe de creaie i prelucrare de grafic vectorial (Adobe Illustrator, Corel
Draw,);
programe de paginare (Adobe InDesign, QuarkXPress, Adobe Pagemaker, Corel
Ventura);
programe utilitare (Adobe Acrobat Professional, Adobe Acrobat Distiller etc);
Cel mai utilizat program pentru realizarea documentelor ce urmeaz a fi tiprite este Corel
Draw. Are setri speciale pentru separaii, overprint
Monitoarele sunt aparatele ce decodific semnalul electric i genereaz culorile RGB (Red,
Green, Blue rou, verde, albastru) prin suprapunere de lumin. Cnd nu exist nici un fel de
lumin este generat culoarea neagr, cnd intensitatea prin cele trei canale este maxim, se
obine culoarea alb.
Teoretic s-ar putea tipri i folosind direct spaiul de culori RGB, ns datorit imperfeciunii
hrtiei, cernelii i a mainilor de tipar, se folosete spaiul CMYK (Cyan, Magenta, Yellow,
blacK), urmnd ca negrul, care se tiprete la sfrit de procedur, s acopere aceste
imperfeciuni.
La o lucrare pretenioas este indicat ca imaginile, textele i obiectele colorate s fie
combinate atent, mai ales cnd se lucreaz cu culori Pantone, pentru ca la sfrit s nu rezulte
amestecaturi nedorite de culoare.
Funcia de overprint este suprapunerea la tipar a dou culori diferite, culoarea de deasupra
(ultim) acoperind total culoarea de dedesubt (anterioar). Dac activm opiunea Overprint la
culoarea neagr, atunci cercul va putea rmne ntreg i nu va mai fi nevoie s fie mai nainte
decupat n locurile unde urmeaz a fi tiprit textul negru.
grafica pe calculator
iniial, devine granulat i neclar, deoarece pixelii din alctuirea imaginii nu mai corespund
cu pixelii de pe ecran.
Pentru a crea i modifica imagini vectoriale sunt folosite programe software de desen
vectorial. O imagine poate fi modificat prin manipularea obiectelor din care este alctuit,
acestea fiind salvate apoi ca variaii ale formulelor matematice specifice. Operatori
matematici din software pot fi folosii pentru a ntinde, rsuci, colora diferitele obiecte dintr-o
imagine. n sistemele moderne, aceti operatori sunt prezentai n mod intuitiv folosind
interfaa grafic a calculatorului.
Conversia din i n format raster
Vectorizarea imaginilor este util pentru eliminarea detaliilor nefolositoare dintr-o fotografie.
Conversia din format vectorial se face practic de fiecare dat cnd este afiat imaginea, astfel
nct procesul de l salva ca bitmap ntr-un fiier este destul de simplu.
Mult mai dificil este procesul invers, care implic aproximarea formelor i culorilor din
imaginea bitmap i crearea obiectelor cu proprietile corespunztoare. Numrul obiectelor
generate este direct proporional cu complexitatea imaginii. Cu toate acestea, mrimea
fiierului cu imaginea n format vectorial nu va depi de obicei pe cea a sursei bitmap.
Aplicaiile grafice avansate pot combina imagini din surse vectoriale i raster i pun la
dispoziie unelte pentru amndou, n cazurile n care unele pri ale proiectului pot fi obinute
de la o camer, iar altele desenate prin grafic vectorial.
Vectorizarea
Aceasta se refer la programe i tehnologii/servicii folosite pentru a converti imagini de tip
bitmap n imagini de tip vectorial. Exemple de utilizare:
n Proiectarea asistata pe calculator (CAD) schiele sunt scanate, vectorizate i
transformate n fiiere CAD printr-un process denumit sugestiv hrtie-CAD.
n GIS imaginile provenite de la satelii sunt vectorizate cu scopul de a obine hri.
n arta digitala i fotografie, imaginile sunt de obicei vectorizate folosind plugin-uri
pentru programe ca Adobe Photoshop sau Adobe Illustrator, dar vectorizarea se poate
face i manual. Imaginile pot fi vectorizate pentru o mai bun utilizare i
redimensionare, de obicei far diferene mari fa de original. Vectorizarea unei
fotografii i va schimba aspectul din fotografic n pictat sau desenat; fotografiile pot fi
transformate i n siluete. Un avantaj al vectorizrii este c rezultatul poate fi integrat
cu succes intr-un design precum un logo.
Dezavantaje i limitri
Principalul dezavantaj al imaginilor vectoriale este c, fiind alctuite din obiecte descrise cu
formule matemetice, att numrul acestor obiecte ct i complexitatea lor sunt limitate,
depinznd de biblioteca de formule matematice folosit de programul de desenare. De
exemplu, dispozitivele digitale, cum ar fi camerele foto sau scannerele, produc fiiere raster
care nu pot fi reprezentate fidel folosind imagini vectoriale. Chiar i n cazul n care se
reuete vectorizarea unei astfel de imagini, editarea acesteia la complexitatea original este
dificil.Un alt dezavantaj este c formatele n care sunt stocate imaginile vectoriale sunt foarte
complexe. Implementarea acestor formate pe dispozitive diferite este problematic din aceast
cauz. Conversia dintr-un format n altul este de asemenea dificil.
Aplicaii
Datorit flexibilitii n ceea ce privete rezoluia imaginilor vectoriale, acestea sunt folosite
intensiv pentru crearea materialelor ce trebuie imprimate la mrimi foarte diverse: acelai
fiier poate fi folosit pentru un card de vizit ct i pentru un panou publicitar, n ambele
cazuri.rezultatele fiind foarte clare i precise.
O alt aplicaie semnificativ a graficii vectoriale este n modelarea suprafeelor 3D, unde se
dorete o calitate ridicat a obiectelor.
GIS este acronimul provenit de la Geographic Information System (Sistem Informatic
Geografic - uneori tradus n forma SIG n limba romn). Acest sistem e utilizat pentru a
crea, stoca, a analiza i prelucra informaii distribuite spaial printr-un proces computerizat.
grafica pe calculator
11
Tehnologia GIS poate fi utilizat n diverse domenii tiinifice cum ar fi: managementul
resurselor, studii de impact asupra mediului, cartografie, planificarea rutelor.
Specific unui GIS este modul de organizare a informaiei gestionate. Exist dou tipuri de
informaie: una grafic care indic repartiia spaial a elementelor studiate i alta sub form
de baz de date pentru a stoca atributele asociate acestor elemente (de ex. pentru o osea
lungimea ei, limea, numrul benzilor, materialul de construcie etc.).
Informaia grafic poate fi de dou feluri: raster sau vectorial. Grafica raster este o
modalitate de reprezentare a imaginilor n aplicaii software sub forma de matrice de pixeli n
timp ce grafica vectorial este o metoda de reprezentare a imaginilor cu ajutorul unor
primitive geometrice (puncte, segmente, poligoane), caracterizate de ecuatii matematice.
Specific sistemelor GIS este asocierea unui sistem de coordonate geografic matricii de pixeli
(la imaginile raster) sau vectorilor - procedeul poarta numele de Georeferentiere. Astfel unui
obiect (reprezentat fie printr-o imagine, fie printr-un vector) i este asociat o poziie unic n
Sistemul Informatic corespunztoare poziiei geografice din lumea real.
12
Alturi de aplicaia Photoshop (ajuns la versiunea CS5), este inclus i aplicaia ImageReady,
cu un impresionant set de instrumente Web pentru optimizarea i previzualizarea imaginilor
(dinamice sau statice), prelucrarea pachetelor de imagini cu ajutorul sistemului droplets-uri
(mini-programe de tip drag and drop) i realizarea imaginilor rollover (imagini ce i schimb
aspectul la trecerea cu mouse-ul peste), precum i pentru realizarea de GIF-uri animate.
Avantaje
Principalele elemente prin care Photshop se difereniaz de aplicaiile concurente i prin care
stabilete noi standarde n industria prelucrrii de imagini digitale sunt:
Seleciile
Straturile (Layers)
Mtile (Masks)
Canalele (Channels)
Retuarea
Optimizarea imaginilor pentru Web
Formate fiiere
Photoshop poate citi majoritatea fiierelor raster i vector. De asemenea, are o serie de
formate proprii:
PSD (abreviere pentru Photoshop Document). Acest format conine o imagine ca un
set de straturi (Layers), incluznd text, mti (mask), informaii despre opacitate,
moduri de combinare (blend mode), canale de culoare, canale alfa (alpha), ci de
tiere (clipping path), setri duotone precum i alte elemente specifice Photoshop.
Acesta este un format popular i des rspndit n rndul profesionitilor, astfel c este
compatibil i cu unele aplicaii concurente Photoshop.
PSB (denumit Large Document Format) este o versiune mai nou a formatului PSD,
conceput special pentru fiiere mai mari (2GB) sau cu o informaie prezent pe o
suprafa definit de laturi mai mari de 30.000 de pixeli (suport pn la
300.000x300.000 pixeli).
PDD este un format mai puin ntlnit, fiind asociat iniial aplicaiei Adobe
PhotoDeluxe, astzi (dup 2002) compatibil doar cu aplicaiile Adobe Photoshop sau
Adobe Photoshop Elements.
Ultimele instrumente
Camera RAW: Instrumentul ofer acces rapid i facil la imaginile tip RAW produse
de majoritatea camerelor foto digitale profesionale i de mijloc. Camera RAW se
folosete de toate detaliile acestor fiiere pentru a obine un control total asupra
aspectului imaginii, fr a modifica fiierul n sine.
Adobe Bridge: Un browser complex, de ultim generaie, ce simplific gestionarea
fiierelor, poate procesa mai multe fiiere de tip RAW n acelai timp i pune la
dispoziia utilizatorului informaia metadata de tip EXIF etc.
Multitasking: Adobe introduce posibilitatea de a folosi toate aplicaiile sale din suita
"Creative suite 2" n sistem multitasking.
Suport High Dynamic Range (HDR) pe 32 bii: Creeaz i editeaz imagini pe 32
bii, sau combin cadre fotografice de expuneri diferite ntr-una ce include valorile
ideale de la cele mai intense umbre pn la cele mai puternice zone de lumin.
Shadow/Highlight: mbuntete contrastul fotografiilor subexpuse sau supraexpuse,
inclusiv imagini CMYK, pstrnd n continuare echilibrul vizual al imaginii.
Vanishing Point: Ofer posibilitatea de a clona, picta sau lipi elemente ce automat se
transpun n perspectiva obiectelor din imagine.
Image Warp: Capacitatea de a deforma imaginile plane dup o matrice uor editabil,
folosind mouse-ul.
Corectarea deformrilor cauzate de lentile: Lens Distort corecteaz cu uurin
efectele obinuite date de lentilele aparatelor foto precum cele cilindrice, sferice, tip
plnie, "efectul de vignet" (funcie de poziionarea fa de lumin, colurile
grafica pe calculator
13
fotografiilor sunt fie ntunecate, fie luminate n contrast cu restul fotografiei) sau
aberaiile cromatice.
Personalizarea aplicaiei:Posibilitatea de a personaliza orice scurttur sau chiar
funciile din meniul aplicaiei i posibilitatea de a salva modificrile pentru fiecare
mod de lucru n parte.
Control mbuntit al straturilor (layers): capacitatea de a selecta mai multe
straturi n acelai timp.
Smart objects: abilitatea de a deforma, redeforma i a reveni la starea iniial a
obiectelor fr a pierde din calitate.
Aplicaiile grafice se realizeaz prin utilizarea urmtoarelor clase de produse software:
editoare grafice, biblioteci grafice, programe grafice specializate, desktop publishing,
worksheet graphics (birotic).
Editoarele grafice sunt destinate prelucrrii grafice in domeniul proiectrii asistate de
calculator dintre produsele care nglobeaz editoare grafice amintim: Auto Cad, Freelanec 2
Plus, Windows Paint, Corel Draw.
Bibliotecile grafice sunt destinate prelucrrilor prin intermediul limbajelor de programare de
nivel nalt (C, Visual C, Visual Basic, Delphi, Open GL etc...). Acestea conin biblioteci cu
rutine (primitive) grafice care realizeaz funcii grafice necesare aplicaii grafice.
Programe grafice specializate sunt destinate rezolvrii problemelor din anumite domenii,
oferind utilizatorului s enune probleme ct mai simplu i n concordan cu limbajul utilizat
n domeniul su. De exemplu: Matlab, Mathematica, Mathcad.
Desktop publishing sunt produse software destinate realizrii de publicatii (ziare, reviste,
reclame, etc.) la birou, parcurgnd toate etapele dintr-o tipografie clasic. De exemplu: Xerox
Ventura Publisher care este compatibil cu mai multe procesoare de text si cu unele editoare
grafice, Pagemaker, Xpress, Super Paint, Publish IT, etc.
grafica 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
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
14
Wikipedia API
grafica pe calculator
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
15
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. LCCWin32 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 kitul de instalare si ofera posibilitate de
a-l instala (sau de a face update) dupa instalarea jocului.
grafica pe calculator
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)
16
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
17
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 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:
grafica pe calculator
18
Daca folosim CodeBlocks atunci realizam un proiect de tip GLUT project si selectam apoi
locatie unde am pus libratia GLUTMingw32 (ca in figurele de mai jos).
grafica pe calculator
20
grafica pe calculator
n orice aplicaie OpenGL trebuie s fie incluse fiierele header gl.h i glu.h sau glut.h (dac
este utilizat biblioteca GLUT). Toate funciile bibliotecii OpenGL ncep cu prefixul gl,
funciile GLU ncep cu prefixul glu, iar funciile GLUT ncep cu prefixul glut.
Dezvoltarea programelor grafice folosind utilitarul GLUT
Biblioteca grafic OpenGL conine funcii de redare a primitivelor geometrice
independente de sistemul de operare, de orice sistem Windows sau de platforma hardware. Ea
nu conine nici o funcie pentru a crea sau administra ferestre de afiare pe display (windows)
i nici funcii de citire a evenimentelor de intrare (mouse sau tastatur).
Pentru crearea i administarea ferestrelor de afiare i a evenimentelor de intrare se pot
aborda mai multe soluii: utilizarea direct a interfeei Windows (Win32 API), folosirea
compilatoarelor sub Windows, care conin funcii de acces la ferestre i evenimente sau
folosirea altor instrumente (utilitare) care nglobeaz interfaa OpenGL n sistemul de operare
respectiv.
Un astfel de utilitar este GLUT, care se compileaz i instaleaz pentru fiecare tip de
sistem Windows. Header-ul glut.h trebuie s fie inclus n fiierele aplicaiei, iar biblioteca
glut.lib trebuie legat (linkat) cu programul de aplicaie.
Sub GLUT, orice aplicaie se structureaz folosind mai multe funcii callback. O
funcie callback este o funcie care aparine programului aplicaiei i este apelat de un alt
program, n acest caz sistemul de operare, la apariia anumitor evenimente. n GLUT sunt
predefinite cteva tipuri de funcii callback; acestea sunt scrise n aplicaie i pointerii lor sunt
transmii la nregistrare sistemului Windows, care le apeleaz (prin pointerul primit) n
momentele necesare ale execuiei.
Funcii de control ale ferestrei de afiare
void glutInit(int* argc, char** argv);
21
Aceast funcie iniializeaz GLUT folosind argumentele din linia de comand; ea trebuie s
fie apelat naintea oricror alte funcii GLUT sau OpenGL.
void glutInitDisplayMode(unsigned int mode);
Specific caracteristicile de afiare a culorilor i a bufferului de adncime i numrul de
buffere de imagine. Parametrul mode se obine prin SAU logic ntre valorile fiecrei opiuni.
Exemplu
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH)
iniializeaz afiarea culorilor n modul RGB, cu dou buffere de imagine i buffer de
adncime. Alte valori ale parametrului mode sunt: GLUT_SINGLE (un singur buffer de
imagine), GLUT_RGBA (modelul RGBA al culorii), GLUT_STENCIL (validare buffer
ablon) GLUT_ACCUM (validare buffer de acumulare).
void glutInitWindowPosition(int x, int y);
Specific locaia iniial pe ecran a colului stnga sus al ferestrei de afiare.
void glutInitWindowSize(int width, int heigth);
Definete dimensiunea iniial a ferestrei de afiare n numr de pixeli pe lime
(width) i nlime (heigth) .
int glutCreateWindow(char* string);
Creeaz fereastra n care se afieaz contextul de redare OpenGL i returneaz
identificatorul ferestrei. Aceast fereastr este afiat numai dup apelul funciei
glutMainLoop().
Funcii callback.
Funciile callback se definesc n program i se nregistreaz n sistem prin intermediul
unor funcii GLUT. Ele sunt apelate de sistemul de operare atunci cnd este necesar, n funcie
de evenimentele aprute.
a. glutDisplayFunc(void(*Display)(void));
Aceast funcie nregistreaz funcia callback Display n care se calculeaz i se
afieaz imaginea. Argumentul funciei este un pointer la o funcie fr argumente care nu
returneaz nici o valoare.
Atentie:
Funcia Display (a aplicaiei) este apelat oridecte ori este necesar desenarea ferestrei: la
iniializare, la modificarea dimensiunilor ferestrei.
glutReshapeFunc(void(*Reshape)(int w, int h));
nregistreaz funcia callback Reshape care este apelat ori de cte ori se modific
dimensiunea ferestrei de afiare. Argumentul este un pointer la funcia cu numele Reshape cu
dou argumente de tip ntreg i care nu returneaz nici o valoare. n aceast funcie,
programul de aplicaie trebuie s refac transformarea fereastr-poart, dat fiind c fereastra
de afiare i-a modificat dimensiunile.
glutKeyboardFunc(void(*Keyboard)(unsigned int key,
int x, int y);
nregistreaz funcia callback Keyboard care este apelat atunci cnd se acioneaz o
tast. Parametrul key este codul tastei, iar x i y sunt coordonatele (relativ la fereastra de
afiare) a mouse-ului n momentul acionrii tastei.
glutMouseFunc(void(*MouseFunc)(unsigned int button, int state, int x, int y);
nregistreaz funcia callback MouseFunc care este apelat atunci cnd este apsat sau
eliberat un buton al mouse-ului.
Parametrul button este codul butonului si poate avea una din constantele
GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON sau GLUT_RIGHT_BUTTON) .
Parametrul state indic apsarea (GLUT_DOWN) sau eliberarea (GLUT_UP) al unui buton al
mouse-ului. Parametrii x i y sunt coordonatele relativ la fereastra de afiare a mouse-ului n
momentul evenimentului.
Exemplu:
grafica pe calculator
22
Programele GLUT au un mod specific de organizare, care provine din felul n care
sunt definite i apelate funciile callback.
Poarta de afiare OpenGL
Poarta de afiare mai este numit context de redare (rendering context), i este asociat unei
ferestre din sistemul Windws. Dac se programeaz folosind biblioteca GLUT, corelarea
dintre fereastra Windows i portul OpenGL este asigurat de funcii ale acestei biblioteci.
Dac nu se folosete GLUT, atunci funciile bibliotecilor de extensie XGL, WGL sau PGL
permit atribuirea unui context de afiare Windows pentru contextul de redare OpenGL i
accesul la contextul de afiare Windows (device context). Funcia OpenGL care definete
transformarea fereastr-poart este:
void glViewport(GLint x, GLint y,
GLsizei width, GLsizei height);
unde x i y specific poziia colului stnga-jos al dreptunghiului porii n fereastra de
afiare (window) i au valorile implicite 0, 0. Parametrii width i heigth specific limea,
respectiv nlimea, porii de afiare, dat ca numr de pixeli.
Exemplu: glViewport (0, 0, (GLsizei) w, (GLsizei) h);
23
Aceste date sunt prelucrate independent, n ordine i n acelai mod pentru toate primitivele
geometrice. Singura deosebire care apare este aceea c, dac o linie sau o suprafa este
24
decupat, atunci grupul de vrfuri care descriau iniial primitiva respectiv este nlocuit cu un
alt grup, n care pot apare vrfuri noi rezultate din intersecia laturilor cu planele volumului de
decupare (volumul canonic) sau unele vrfuri din cele iniiale pot s dispar.
Comenzile sunt prelucrate n ordinea n care au fost primite n OpenGL, adic orice comand
este complet executat nainte ca s fie executat o nou comand.
Biblioteca OpenGL primete o succesiune de primitive geometrice pe care le
deseneaz, adic le convertete n mulimea de pixeli corespunztoare, nscriind valorile
culorilor acestora ntr-un buffer de imagine. n continuare sunt detaliate fiecare dintre
operaiile grafice prezentate n figur.
Modul n care este executat secvena de operaii pentru redarea primitivelor grafice depinde
de starea bibliotecii OpenGL, stare care este definit prin mai multe variabile de stare ale
acesteia (parametri).
Numrul de variabile de stare ale bibliotecii - OpenGL Reference Manual
La iniializare, fiecare variabil de stare este setat la o valoare implicit. O stare o
dat setat i menine valoarea neschimbat pn la o nou setare a acesteia. Variabilele de
stare au denumiri sub form de constante simbolice care pot fi folosite pentru aflarea valorilor
acestora.
De exemplu variabile de stare, culoarea curent i normala curent, care denumirile
definite n gl.h:
#define GL_CURRENT_COLOR
0x0B00
#define GL_CURRENT_NORMAL
0x0B02
Variabilele de stare OpenGL sunt de dou categorii: variabile de tip binar i variabile
definite prin diferite structuri de date.
Variabile de tip binar pot avea una din dou stri: starea activ (enabled) sau starea
inactiv (disabled). Setarea la starea activ se realizeaz prin apelul funciei:
void glEnable(GLenum param);
unde param este numele simbolic al parametrului (variabilei de stare).
Setarea la starea inactiv se realizeaz prin apelul funciei:
void glDisable(GLenum param);
n orice loc ntr-un program OpenGL, se poate afla valoarea unui parametru binar prin
apelul funciei:
GLboolean glIsEnabled(GLenum param);
care returneaz GL_TRUE dac parametrul param este n starea activ, i GL_FALSE, dac
parametrul param este n starea inactiv.
grafica pe calculator
Valoarea unei variabile de stare care nu este de tip binar se seteaz prin apelul unei
funcii specifice variabilei respective, care are ca argumente valorile necesare pentru
actualizare.
De
exemplu,
variabila
de
stare
culoare
curent,
denumit
GL_CURRENT_COLOR, se seteaz prin funcia:
void glColor3f(GLfloat red, GLfloat green, GLfloat blue);
la o valoare dat prin trei componente: rou (red), verde (green), albastru (blue).
se obin cele patru componente ale culorii curente (red, green, blue, alpha) n vectorul color.
GLfloat color[4];
glGetFloatv(GL_CURRENT_COLOR, color);
Primitive geometrice
OpenGL execut secvena de operaii grafice asupra fiecrei primitive geometrice, definit
printr-o mulime de vrfuri i tipul acesteia. Coordonatele unui vrf sunt transmise ctre
OpenGL prin apelul unei funcii glVertex#(). Aceasta are mai multe variante, dup numrul i
tipul argumentelor. Iat, de exemplu, numai cteva din prototipurile funciilor glVertex#():
void glVertex2d(GLdouble x, GLdouble y);
void glVertex3d(GLdouble x, GLdouble y, GLdouble z);
25
Primitiv geometric
Deseneaz n puncte
Deseneaz segmentele de dreapt izolate (v 0,v1),
(v2,v3), .a.m.d. Dac n este impar ultimul vrf
este ignorat
GL_LINE_STRIP
Deseneaz linia poligonal format din segmentele
(v0,v1), (v1,v2), .. . (vn2, v n1)
GL_LINE_LOOP
La fel ca primitiva GL_LINE_STRIP, dar se mai
desenez segmentul (vn, v0) care nchide o bucl.
GL_TRIANGLES
Deseneaz o serie de triunghiuri folosind vrfurile
(v0,v1,v2), (v3,v4,v5), .a.m.d. Dac n nu este
multiplu de 3, atunci ultimele 1 sau 2 vrfuri sunt
ignorate.
GL_TRIANGLE_STRIP
Deseneaz o serie de triunghiuri folosind vrfurile
(v0,v1,v2), (v2,v1,v3),...a.m.d. Ordinea este aleas
astfel ca triunghiurile s aib aceeai orientare, deci
s poat forma o suprafa nchis.
GL_TRIANGLE_FAN
Deseneaz triunghiurile (v0,v1,v2), (v0,v2,v3),
.a.m.d.
GL_QUADS
Deseneaz o serie de patrulatere (v0,v1,v2,v3),
(v4,v5,v6,v7), .a.m.d. Dac n nu este multiplu de 4,
ultimele 1, 2 sau 3 vrfuri sunt ignorate.
GL_QUADS_STRIP
Deseneaz o serie de patrulatere (v0,v1,v3,v2),
(v3,v2,v5,v4), .a.m.d Dac n < 4, nu se desenaz
nimic. Dac n este impar, ultimul vrf este ignorat.
GL_POLYGON
Deseneaz un poligon cu n vrfuri, (v 0,v1,vn1).
Dac poligonul nu este convex, rezultatul este
impredictibil.
Primitivele de tip suprafa (triunghiuri, patrulatere, poligoane) pot fi desenate n modul
cadru de srm (wireframe), sau n modul plin (fill), prin setarea variabilei de stare
GL_POLYGON_MODE folosind funcia:
void glPolygonMode(GLenum face, GLenum mode);
unde argumentul mode poate lua una din valorile:
GL_POINT : se deseneaz numai vrfurile primitivei, ca puncte n spaiu,
indiferent de tipul acesteia.
GL_LINE: muchiile poligoanelor se deseneaz ca segmente de dreapt.
GL_FILL: se deseneaz poligonul plin.
Argumentul face se refer la tipul primitivei geometrice (din punct de vedere al orientrii)
creia i se aplic modul de redare mode. Din punct de vedere al orientrii, OpenGL admite
grafica pe calculator
26
primitive orientate direct (frontface) i primitive orientate invers (backface). Argumentul face
poate lua una din valorile: GL_FRONT, GL_BACK sau GL_FRONT_AND_BACK, pentru a
se specifica primitive orientate direct, primitive orientate invers i, respectiv ambele tipuri de
primitive.
n mod implicit, sunt considerate orientate direct suprafeele ale cror vrfuri sunt parcurse n
ordinea invers acelor de ceas. Acest setare se poate modifica prin funcia
glFrontFace(GLenum mode), unde mode poate lua valoarea GL_CCW, pentru orientare n
sens invers acelor de ceas (counterclockwise) sau GL_CW, pentru orientare n sensul acelor
de ceasornic (clockwise).
Reprezentarea culorilor n OpenGL
n biblioteca OpenGL sunt definite dou modele de culori: modelul de culori RGBA i
modelul de culori indexate. n modelul RGBA sunt memorate componentele de culoare R, G,
B i transparena A pentru fiecare primitiv geometric sau pixel al imaginii. n modelul de
culori indexate, culoarea primitivelor geometrice sau a pixelilor este reprezentat printr-un
index ntr-o tabel de culori (color map), care are memorate pentru fiecare intrare (index)
componentele corespunztoare R,G,B,A ale culorii. n modul de culori indexate numrul de
culori afiabile simultan este limitat de dimensiunea tabelei culorilor i, n plus, nu se pot
efectua unele dintre prelucrrile grafice importante (cum sunt umbrirea, antialiasing, ceaa).
De aceea, modelul de culori indexate este folosit n principal n aplicaii de proiectare grafic
(CAD) n care este necesar un numr mic de culori i nu se folosesc umbrirea, ceaa, etc.
n aplicaiile de realitate virtual nu se poate folosi modelul de culori indexate, de
aceea n continuare nu vor mai fi prezentate comenzile sau opiunile care se refer la acest
model i toate descrierile consider numai modelul RGBA.
Culoarea care se atribuie unui pixel dintr-o primitiv geometric depinde de mai multe
condiii, putnd fi o culoare constant a primitivei, o culoare calculat prin interpolare ntre
culorile vrfurilor primitivei, sau o culoare calculat n funcie de iluminare, anti-aliasing i
texturare. Presupunnd pentru moment culoarea constant a unei primitive, aceasta se obine
prin setarea unei variabile de stare a bibliotecii, variabila de culoare curent
(GL_CURRENT_COLOR). Culoarea curent se seteaz folosind una din funciile glColor#(),
care are mai multe variante, n funcie de tipul i numrul argumentelor. De exemplu, cteva
din prototipurile acestei funcii definite n gl.h sunt:
void glColor3f(GLfloat red, GLfloat green, GLfloat blue);
void glColor3ub(GLubyte red,GLubyte green, GLubyte blue);
void glColor4d(GLdouble red, GLdouble green,
GLdouble blue, GLdouble alpha);
Culoarea se poate specifica prin trei sau patru valori, care corespund componentelor rou
(red), verde (green), albastru (blue), respectiv transparen (alpha) ca a patra component
pentru funciile cu 4 argumente. Fiecare component a culorii curente este memorat ca un
numr n virgul flotant cuprins n intervalul [0,1]. Valorile argumentelor de tip ntreg fr
semn (unsigned int, unsigned char, etc.) sunt convertite liniar n numere n virgul flotant,
astfel nct valoarea 0 este transformat n 0.0, iar valoarea maxim reprezentabil este
transformat n 1.0 (intensitate maxim). Valorile argumentelor de tip ntreg cu semn sunt
convertite liniar n numere n virgul flotant, astfel nct valoarea negativ maxim este
transformat n 1.0, iar valoarea pozitiv maxim este transformat n 1.0 (intensitate
maxim).
Valoarea final a culorii unui pixel, rezultat din toate calculele de umbrire, anti-aliasing,
texturare, etc, este memorat n bufferul de imagine, o component fiind reprezentat printrun numr n de bii (nu neaprat acelai numr de bii pentru fiecare component). Deci
componentele culorilor pixelilor memorate n bufferul de imagine sunt numere ntreg n
intervalul (0 , 2n 1), care se obin prin conversia numerelor n virgul mobil prin care sunt
reprezentate i prelucrate culorile primitivelor geometrice, ale materialelor, etc.
grafica pe calculator
27
glColor3f(0.8,0.8,0.8);
glBegin(GL_POLYGON);
glVertex3d(-4,2,-20);
glVertex3d(-1,5,-20);
glVertex3d(5,2.5,-20);
glVertex3d(3,-3,-20);
glVertex3d(-1,-4,-20);
glEnd();
Sistemul de vizualizare OpenGL
Sistemul de vizualizare OpenGL definete sistemele de referin, transformrile geometrice i
relaiile (matriceale) de transformare pentru redarea primitivelor geometrice. Sistemul de
vizualizare OpenGL este o particularizare a sistemului PHIGS, n care centrul sistemului de
referin de observare (VRP) coincide cu centrul de proiecie (PRP).
Transformri geometrice
Aa dup cum s-a mai artat, nu este eficient s se calculeze produsul dintre matricea de
reprezentare a fiecrui punct i matricele de transformri succesive, ci se calculeaz o matrice
de transformare compus, care se poate aplica unuia sau mai multor obiecte. Pentru calculul
matricelor de transformare compuse (prin produs de matrice) se folosete o matrice de
transformare curent i operaii de acumulare n matricea curent prin postmultiplicare
(nmulire la dreapta): se nmulete matricea curent cu noua matrice (n aceast ordine) i
rezultatul nlocuiete coninutul matricei curente. Pentru nceput, se consider o matrice
curent oarecare C stabilit n OpenGL. Matricea curent se poate iniializa cu matricea
identitate prin funcia glLoadIdentity(), sau cu o matrice oarecare, dat prin pointer la un
vector de 16 valori consecutive, prin funcia glLoadMatrix#():
glLoadMatrixd(const GLdouble* m);
glLoadMatrixf(const GLfloat* m);
Valorile din vectorul GLdouble* m (respectiv GLfloat* m) sunt atribuite n ordinea coloan
major matricei curente.
Coninutul matricei curente poate fi modificat prin multiplicare (la dreapta) cu o alt matrice,
dat printr-un vector de 16 valori de tip double sau float utiliznd funcia glMultMatrix#():
glMultMatrixd(const GLdouble* m);
glMultMatrixf(const GLfloat* m);
Transformarea de translaie cu valorile x, y, z se implementeaz prin apelul uneia din
funciile glTranslated() sau glTranslatef(), dup tipul argumentelor de apel:
glTranslated(GLdouble x, GLdouble y, GLdouble z);
glTranslatef(GLfloat x, GLfloat y, GLfloat z);
Funcia glTranslate#() creeaz o matrice de translaie T(x,y,z), dat de relaia 3.2, nmulete
la dreapta matricea curent C, iar rezultatul nlocuiete coninutul matricei curente C, deci: C
= C T(x,y,z).
Transformarea de scalare este efectuat de una din funciile glScaled() sau glScalef():
grafica pe calculator
29
apel, o nmulete cu matricea curent (care are valoarea de matrice identitate), i depune
rezultatul n matricea curent, care este matricea din vrful stivel matricelor de proiecie. n
acest exemplu se apeleaz:
glFrustum(1, 1,1, 1, 1, 40);
Matricele de transformare de modelare i observare se compun n stiva matricelor de
modelare-vizualizare. Sistemul de referin de observare are centrul n punctul (xv,zv,yv) i
este rotit cu un unghi gama n raport cu axa z. Paii de calcul a matricelor sunt urmtorii:
Mai nti se seteaz ca stiv curent stiva de modelare-vizualizare i se
iniilalizeaz matricea din vrful acesteia cu matricea identitate:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
Se creez n stiva curent matricea de transformare de observare
MV = RZ(gama)T(xv, yv, zv):
glRotated(-gama, 0,0,1);
glTranslated(-xv,-zv,-zv);
Primul obiect are matricea de instaniere MI1 = I, deci matricea curent (care
conine matricea de vizualizare) se aplic coordonatelor vrfurilor cubului din
sistemul de referin de modelare. Funcia Cube() transmite aceste vrfuri ctre
OpenGL:
Cube();
Dac s-ar construi n acest moment matricea de transformare pentru obiectul al doilea,
prin multiplicarea matricei curente cu matricele componente de instaniere din M2 = T(0,8,0)
S(2,2,2), atunci matricea de observare, s-ar pierde i pentru urmtorul obiect ar trebui
calculat din nou.
Definirea texturilor
n OpenGL se pot defini mai multe texturi (n general, la iniializarea programului) i fiecare
suprafa se textureaz folosind una dintre acestea. Fiecare textur (obiect textur - texture
object) are un nume unic n program i este definit printr-un set de date care permit aplicarea
acesteia suprafeelor: adresa imaginii texturii, funcia texturii (modulare, nlocuire,
combinare), i proprietile texturii (filtrri, mod de repetare, etc).
Posibilitatea de a manevra mai multe texturi n timpul execuiei, fr s fie necesar ncrcarea
sau generarea imaginii texturii de fiecare dat, mbuntete performanele de texturare.
Deoarece OpenGL este o interfa de programare scris n limbajul C, obiectele textur sunt
definite prin date i funcii separate, care trebuie s fie specificate ntr-o anumit ordine:
(a) Generarea numelor texturilor.
(b) Crearea obiectelor textur i conectarea lor (bind) la numele texturilor.
(c) Activarea unei texturi, pentru aplicarea acesteia primitivelor geometrice care
urmeaz.
Numele texturii. Numele texturilor sunt numere ntregi fr semn (de tipul GLuint) care sunt
memorate ntr-un vector transmis ca argument funciei:
void glGenTextures(GLsizei n, GLuint *textureNames);
Aceast funcie creeaz un vector de n nume de texturi, unice n program, pe care le
memoreaz n vectorul textureNames. Numele create nu sunt neaprat numere succesive.
Funcia glGenTextures() creeaz numai numele texturilor i le marcheaz ca utilizate, dar
obiectele textur se creeaz numai la conectarea (bind) acestora.
Crearea texturilor. Funcia glBindTexture() se folosete att pentru crearea ct i
pentru utilizarea unei texturi. Prototipul ei este:
void glBindTexture(GLenum target, GLuint texName);
Parametrul target poate avea ca valoare una din constantele simbolice GL_TEXTURE_1D sau
GL_TEXTURE_2D, pentru texturi unidimensionale, respectiv bidimensionale. Argumentul
texName este numele unei texturi, generat de funcia glGenTextures() i memorat n vectorul
de nume ale texturilor.
grafica pe calculator
30
Atunci cnd este apelat prima oar pentru un nume de textur, funcia
glBindTexture() creeaz un nou obiect textur, cu toate datele referitoare la imaginea i
proprietile texturii implicite. Dup apelul funciei glBindTexture(), textura cu numele dat ca
argument devine textur curent i toate operaiile ulterioare, att pentru definirea unor
proprieti ale texturii, ct i pentru aplicaia texturii, folosesc textura curent. Textura curent
se schimb prin apelul unei noi funcii glBindTexture().
Crearea imaginii de textur. Imaginea texturii este un tablou unidimensional sau
bidimensional de texeli, fiecare texel avnd una, dou, trei sau patru componente.
Semnificaia componentelor texelilor se stabilete la crearea imaginii texturii prin definirea
formatului intern al imaginii printr-un argument al uneia din funciile glTexImage1D(),
glTexImage2D().
Texturile unidimensionale au o utilizare restrns. Ele sunt folosite pentru texturarea
n benzi, pentru care variaia culorii are o singur direcie. n continuare se vor prezenta
texturile bidimensionale, care sunt cel mai frecvent folosite. Funcia glTexImage2D() are
urmtorul prototip:
void glTexImage2D(GLenum target,GLint level,
GLint internalFormat,GLsizei width,
GLsizei height,GLint border,
GLenum format,GLenum type,const GLvoid *pixels);
Parametrul target specific crearea unei imagini de textur bidimensional (prin
constanta simbolic GL_TEXTURE_2D) sau o interogare a capacitii de memorare a unei
imagini de textur (prin constanta simbolic GL_PROXY_TEXTURE_2D).
Parametrul level indic nivelul imaginii ntr-o succesiune de imagini prefiltrate de
tipul mip-map. Nivelul 0 reprezint imaginea original, cu rezoluia maxim. Celelate nivele
se pot crea automat din imaginea original (prin funcia gluBuild2DMipmaps()) sau pot fi
create din tablouri de texeli, cu acelai format ca imaginea de nivel 0 a texturii.
Parametrul internalFormat indic tipul componentelor texelilor texturii, ca intensitate,
luminan sau R, G, B, A. Valoarea argumentului internalFormat poate fi un ntreg ntre 1 i 4
sau una dintre treizeci i dou de constante simbolice, dintre care cele mai frecvent folosite
sunt: GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RGB, GL_RGBA. Aceste
constante corespund valorilor 1, 2, 3, 4 ale argumentului. Aceste componente ale texelilor sunt
combinate cu componentele culorii proprii (nainte de texturare) a pixelului pentru a crea
culoarea final a pixelului. Modul de combinare depinde de funcia de texturare, descris
imediat mai jos.
Parametrii width i height dau dimensiunea imaginii texturii, n numr de texeli, pe
orizontal i pe vertical.
Parametrul border reprezint limea borderului imaginii de textur. Aceast
caracteristic permite alipirea mai multor poriuni de imagini ntr-o singur imagine de
textur, iar borderul este folosit n operaiile de filtrare, n care sunt necesari texeli vecini
texelului curent, pentru medierea culorilor acestora. Devizarea unei imagini de textur n mai
multe pri este impus n anumite implementri ale bibliotecii OpenGL, atunci cnd
texturarea este implementat hardware i imaginea de textur se ncarc ntr-o memorie rapid
din acceleratorul grafic. Dac imaginea texturii este prea mare pentru a fi stocat n ntregime
n memoria de textur, atunci se poate mpri n mai multe pri, care sunt ncrcate i
folosite succesiv. n aceast situaie borderul permite filtrarea corect la graniele prilor
componente ale imaginii.
Parametrii format i type se refer la formatul i tipul datelor imaginii de textur.
Parametrul format poate fi una din constantele simbolice GL_COLOR_INDEX, GL_RGB,
GL_RGBA, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_LUMINANCE,
GL_LUMINANCE_ALPHA. Parametrul type poate fi GL_BYTE, GL_UNSIGNED_BYTE,
GL_SHORT, GL_UNSIGNED_SHORT, GL_INT, GL_UNSIGNED_INT, GL_FLOAT sau
grafica pe calculator
31
GL_BITMAP.
Ultimul parametru, pixels, conine datele imaginii de texturii.
La apelul funciei glTexImage2D(), se creeaz imaginea texturii curente (cea conectat
prin funcia glBindTexture()) , n formatul specificat.
Funcii de texturare. Modul n care se calculeaz culoarea unui pixel (sau fragment
de pixel) se stabilete prin apelul uneia din funciile glTexEnv#():
void glTexEnvf(GLenum target,GLenum pname,GLfloat param);
void glTexEnvi(GLenum target,GLenum pname,GLfloat param);
unde argumentele au urmtoarea semnificaie:
target specific mediul (environment) de aplicare a texturii; trebuie s fie
constanta simbolic GL_TEXTURE_ENV.
pname este numele simbolic al unui paramentru de mediu de texturare; trebuie s
aib valoarea GL_TEXTURE_ENV_MODE.
param specific funcia de texturare printr-o constant simbolic care poate lua una din
valorile GL_MODULATE, GL_DECAL, or GL_BLEND.
Funciile de texturare stabilesc modul de calcul al culorii rezultate a pixelilor pe baza culorii
texelilor din imaginea de textur i a culorii pixelilor primitivei geometrice (care se obin din
culoarea curect sau din calcule de umbrire). n general, n modul GL_DECAL, culoarea
final atribuit unui pixel este culoarea texturii; n modul GL_MODULATE, se folosete
culoarea texturii pentru modularea culorii fragmentului (pixelului); n modul GL_BLEND se
combin culoarea texturii cu culoarea fragmentului. Aceast modalitate general de atribuire a
culorii depinde i de formatul intern al texturii, care se stabilete la crearea imaginii de
textur.
Atribuirea coordonatelor de texturare. Coordonatele vrfurilor primitivelor
geometrice n planul texturii (coordonatele de texturare) se transmit prin funciile
glTexCoord#(), care pot primi 1, 2, 3 sau 4 argumente de diferite tipuri, rezultnd un numr
mare de posibiliti de apel. O parte dintre acestea sunt:
void glTexCoord1f(GLfloat s);
void glTexCoord2f(GLfloat s,GLfloat t);
void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r);
void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r, GLfloat q);
void glTexCoord1f(GLdouble s);
void glTexCoord2f(GLdouble s,GLdouble t);
void glTexCoord3f(GLdouble s,GLdouble t,GLdouble r);
void glTexCoord4f(GLdouble s,GLdouble t,GLdouble r, GLdouble q);
Coordonatele de texturare pot avea 1, 2 sau 3 pentru texturi unidimensionale, bidimensionale
sau tridimensionale. n spaiul texturii coordonatele sunt notate s, t, r, corspunztor
coordonatelor x, y, z n spaiul obiect. Cea de-a patra component, q, este componenta de
scal n reprezentarea texturii ntr-un sistem de coordonate omogen, asemntor sistemului de
coordonate omogen folosit pentru reprezentarea punctelor n spaiu. Aceast coordonat este
folosit dac sunt necesare transformri ale texturi n coordonate omogene. n versiunea
folosit n momentul de fa a bibliotecii OpenGL (Versiunea 1.1), nu este nc implementat
texturarea spaial i coordonata r nu este folosit, fiind prevzut ca rezerv pentru utilizare
ulterioar.
Dac valorile coordonatelor de texturare n vrfurile primitivelor grafice sunt cuprinse n
intervalul [0,1], atunci textura este aplicat o singur dat pe suprafaa respectiv. Dac aceste
valori depesc intervalul [0,1], atunci textura poate fi repetat pe suprafa sau limitat la
intervalul [0,1]. Proprietatea unei texturi de a fi repetat sau limitat se stabilete prin apelul
uneia din funciile:
void glTexParameterf(GLenum target,GLenum pname, GLfloat param);
grafica pe calculator
32
33
GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,
GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,
GL_NEAREST);
/* Definirea celui de-a doua texturi */
glBindTexture(GL_TEXTURE_2D, texName[1]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, imageWidth,
imageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE,image8);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,
GL_DECAL);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,
GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,
GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,
GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,
GL_NEAREST);
glEnable(GL_TEXTURE_2D);
}
void Display(){
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
glBindTexture(GL_TEXTURE_2D, texName[1]);
glPushMatrix();
glTranslated(-2.0,0.0,-8);
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);glVertex3f(-0.5,-1.0,0.0);
glTexCoord2f(0.5,0.0);glVertex3f( 0.5,-1.0,0.0);
glTexCoord2f(0.5,1.0);glVertex3f( 0.5, 1.0,0.0);
glTexCoord2f(0.0,1.0);glVertex3f(-0.5, 1.0,0.0);
glEnd();
glPopMatrix();
glPushMatrix();
glTranslated(0.0,0.0,-8);
glRotated(-70,1.0,0.0,0.0);
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);glVertex3f(-0.5,-1.0,0.0);
glTexCoord2f(0.5,0.0);glVertex3f( 0.5,-1.0,0.0);
glTexCoord2f(0.5,1.0);glVertex3f( 0.5, 1.0,0.0);
glTexCoord2f(0.0,1.0);glVertex3f(-0.5, 1.0,0.0);
glEnd();
glPopMatrix();
glBindTexture(GL_TEXTURE_2D, texName[0]);
glPushMatrix();
glTranslated(1.5,0.0,-8);
glBegin(GL_QUADS);
glTexCoord2f(0.5,0.0);glVertex3f(0.0,-1.0,0.0);
glTexCoord2f(1.0,0.0);glVertex3f( 1.0,-1.0,0.0);
glTexCoord2f(1.0,1.0);glVertex3f( 1.0, 1.0,0.0);
glTexCoord2f(0.5,0.5);glVertex3f(-0.0, 0.0,0.0);
glEnd();
glPopMatrix();
glutSwapBuffers();
grafica pe calculator
34
}
void Reshape(int w, int h){
h = (h == 0) ? 1 : h;
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0, (GLfloat) w/(GLfloat) h,
0.1, 4000.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int main(int argc, char** argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow("Texture Check Image");
Init();
glutDisplayFunc(Display);
glutReshapeFunc(Reshape); glutMainLoop();
return 0;
}
grafica pe calculator
35
Exemple OpenGl
Exemplu 1
Exemplu 2
grafica pe calculator
36
Exemplu 3
Exemplu 4
grafica pe calculator
37
Exemplu 5
grafica pe calculator
Exemplu 6
38
Exemplu 7
Exemplu 8
grafica pe calculator
39
Exemplu 9
Exemplu 10
grafica pe calculator
40
Exemplu 11
grafica pe calculator
41
Exemplu 12
Exemplu 13
grafica pe calculator
42
Exemplu 14
Exemplu 15
grafica pe calculator
43
Exemplu 16
grafica pe calculator
Exemplu 17
44
Exemplu 18
Exemplu 19
grafica pe calculator
45
Exemplu 20
grafica pe calculator
46
Exemplu 21
grafica pe calculator
47
Exemplu 22
Exemplu 23
grafica pe calculator
48
Exemplu 24
grafica pe calculator
49
Exemplu 25
Exemplu 26
grafica pe calculator
50
Exemplu 27
Exemplu 28
grafica pe calculator
51
Exemplu 29
grafica pe calculator
Exemplu 30
52
Exemplu 31
grafica pe calculator
53
Exemplu 32
grafica pe calculator
54
Exemplu 33
grafica pe calculator
55
Exemplu 34
grafica pe calculator
56
Exemplu 35
grafica pe calculator
57
exemplu 36
#include <GL/glut.h> //header OpenGL ce include gl.h si glu.h
void init()//functia initiere
{
// glClearColor (0.0, 0.0, 0.0, 0.0);//stabileste culoarea de sters
// glShadeModel (GL_FLAT);
}
void display()//functia de desenare si afisare
{
glClear (GL_COLOR_BUFFER_BIT);//sterge urmele de desene din fereastra curenta
glBegin(GL_POLYGON);//initializare desen poligon
glColor3f (2.0, 0.0, 0.0);//culoarea de desenare
glVertex2f(200.0,200.0);//stabilire coordonate triunghi
glVertex2f(400.0,200.0);//stabilire coordonate triunghi
glVertex2f(400.0,400.0);//stabilire coordonate triunghi
glEnd();//sfisit desenare
glFlush ();//executare functie
glColor3f (1.0, 1.0, 0.0);//culoarea de desenare
glBegin(GL_POLYGON);//initializare desen poligon
glVertex2f(200.0,400.0);//stabilire coordonate triunghi
glVertex2f(400.0,400.0);//stabilire coordonate triunghi
glVertex2f(200.0,200.0);//stabilire coordonate triunghi
glEnd();//sfisit desenare
glFlush ();//executare functie
glColor3f (0.0, 1.0, 1.0);//culoarea de desenare
glBegin(GL_POLYGON);//initializare desen poligon
glVertex2f(000.0,000.0); //stabilire coordonate triunghi
glVertex2f(200.0,200.0);//stabilire coordonate triunghi
glVertex2f(000.0,200.0);//stabilire coordonate triunghi
glEnd();//sfisit desenare
glFlush ();//executare functie
glColor3f (1.0, 0.5, 1.0);//culoarea de desenare
glBegin(GL_POLYGON);//initializare desen poligon
glVertex2f(000.0,000.0); //stabilire coordonate triunghi
glVertex2f(200.0,200.0);//stabilire coordonate triunghi
glVertex2f(000.0,200.0);//stabilire coordonate triunghi
glEnd();//sfisit desenare
glFlush ();//executare functie
glColor3f (1.0, 1.0, 0.5);//culoarea de desenare
glBegin(GL_POLYGON);//initializare desen poligon
glVertex2f(600.0,000.0); //stabilire coordonate triunghi
glVertex2f(600.0,200.0);//stabilire coordonate triunghi
glVertex2f(400.0,200.0);//stabilire coordonate triunghi
glEnd();//sfisit desenare
glFlush ();//executare functie
glColor3f (0.0, 1.0, 0.0);//culoarea de desenare
glBegin(GL_POLYGON);//initializare desen poligon
glVertex2f(200.0,400.0);//stabilire coordonate triunghi
glVertex2f(000.0,400.0);//stabilire coordonate triunghi
glVertex2f(200.0,600.0);//stabilire coordonate triunghi
glEnd();//sfisit desenare
glFlush ();//executare functie
grafica pe calculator
58
59
presented between
// glBegin and the subsequent glEnd. Ten symbolic constants are accepted:
GL_POINTS, GL_LINES,
// GL_LINE_STRIP, GL_LINE_LOOP, GL_TRIANGLES, GL_TRIANGLE_STRIP,
GL_TRIANGLE_FAN, GL_QUADS,
// GL_QUAD_STRIP, and GL_POLYGON.
glBegin(GL_POLYGON);
// specify a vertex (x, y coord)
glVertex2f(200.0,200.0);
glVertex2f(400.0,200.0);
glVertex2f(400.0, 400.0);
// glBegin and glEnd delimit the vertices that define a primitive or a group of like
primitives.
// glBegin accepts a single argument that specifies in which of ten ways the vertices
are interpreted.
glEnd();
// force execution of GL commands in finite time
glFlush();
// dreptunghi jos
glColor3f (0.0, 1.0, 0.0);
glBegin(GL_POLYGON);
glVertex2f(0.0,0.0);
glVertex2f(50.0,0.0);
glVertex2f(50.0, 60.0);
glVertex2f(0.0, 60.0);
glEnd();
glFlush();
// patrat sus
glColor3f (0.0, 0.0, 1.0);
glBegin(GL_POLYGON);
glVertex2f(0.0,500.0);
glVertex2f(100.0,500.0);
glVertex2f(100.0, 600.0);
glVertex2f(0.0, 600.0);
glEnd();
glFlush();
// cerc in jurul triunghiului
glColor3f (1, 1, 0); glPointSize(10.0);
glBegin(GL_POINTS);
glVertex2f(300, 300); // un punct in centru
for (int i=0; i<360; ++i) {
// 141 = raza cercului + 1 pixel
glVertex2f(300 + sin(i) * 141, 300 + cos(i) * 141);
}
glEnd();
glFlush();
}
void reshape (int w, int h) {
// Stabilirea viewportului la dimensiunea ferestrei
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
// specify which matrix is the current matrix
glMatrixMode (GL_PROJECTION);
grafica pe calculator
60
grafica pe calculator
61
63
public Arc2D.Float(float x, float y, float w, float h, float start, float extent, int type)
Constructs a new arc, initialized to the specified location, size, angular extents, and closure
type.
Parameters:
x - The X coordinate of the upper-left corner of the arc's framing rectangle.
y - The Y coordinate of the upper-left corner of the arc's framing rectangle.
w - The overall width of the full ellipse of which this arc is a partial section.
h - The overall height of the full ellipse of which this arc is a partial section.
start
The
starting
angle
of
the
arc
in
degrees.
extent
The
angular
extent
of
the
arc
in
degrees.
type - The closure type for the arc: Float.OPEN, Float.CHORD, or Float.PIE.
64
Exemplu
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
public class ex2
extends JFrame {
public static void main(String[] args) {
ex2 f = new ex2();
f.setTitle("Aplicatie 2d Apli");
f.setSize(300, 300);//setLocation
f.setVisible(true);
}
public void paint(Graphics g)
{//conversie la Graphics 2D
Graphics2D g2 = (Graphics2D)g;
//definire arc de cerc,poligon,elipsa
Arc2D pie = new Arc2D.Float(0, 50, 150, 150, -30, 90, Arc2D.PIE);
//definirea culorii de umplere a primitivei
g2.setPaint(Color.blue);
//aplicarea metodei setPaint asupra ptimitivei
g2.fill(pie);
grafica pe calculator
Graphics2D g3 = (Graphics2D)g;
Arc2D pie1 = new Arc2D.Float(80, 150, 50, 50, 0,-180, Arc2D.PIE);
g3.setPaint(Color.GRAY);
g3.fill(pie1);
}
}
Color Chooser Dialog
Dac dorii ca utilizatorii s poat alege culorile in aplicaie se poate folosi clasa
javax.swing.JcolorChooser astfel:
public static Color showDialog(Component component, String title, Color initialColor)
Exemplu :
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class RedTown
extends JFrame {
public static void main(String[] args) {
65
}
}
GradientPaint
Un gradient este o tranziie lin de la o culoare la alta. API ofer o implementare a unui
gradient de culoare simplu, numit java.awt.GradientPaint.
Aceasta clasa defineste un gradient de culoare utiliznd dou puncte i dou culori. Gradientul
de lin trece de la o culoare la alta pe msur ce trece de-a lungul liniei care leag cele dou
puncte.
66
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
public class GradientPaintFill
extends JFrame {
public static void main(String[] args) {
GradientPaintFill f = new GradientPaintFill();
f.setTitle("GradientPaintFill v1.0");
f.setSize(200, 200);
f.setVisible(true);
}
grafica pe calculator
invisible for 12 units. The even elements of the array (starting at index 0) determine where the
line is visible, while the odd elements determine where it's invisible. Figure 4-11 shows
a GeneralPath stroked with two varieties of dotted lines. The shape on the left has been
stroked with a solid line. In the middle, the shape has been stroked using a dash array of { 12,
12 }. The same shape is stroked again on the right, using a dash array of { 4, 4, 12, 4 }.
Figure 4-11. Stroking dashed lines
The end style is used on each dash in a dashed line. Figure 4-12 shows the same dashed line
drawn using the CAP_BUTT, CAP_ROUND, and CAP_SQUARE end styles.
Figure 4-12. End styles apply to dashes, too
The dash phase acts as an offset into the dash pattern. Consider, for example, the dash
array { 12, 12 }. When the dash phase is 0, lines stroked with this dash pattern will begin with
12 units of visible outline followed by 12 units that are invisible. Suppose, instead, that the
dash phase is set to 8. Now, lines stroked with the dash pattern will begin with 4 units of
visible line, followed by 12 units of invisible, followed by 12 of visible, and so forth. Figure
4-13 shows how this works for two straight lines.
Figure 4-13. Same dashes, different dash phases
grafica pe calculator
Overlap
What happens if you both stroke and paint a shape? Interestingly, the results depend on
whether you stroke or paint first. A shape's outline actually overlaps its interior, as shown
in Figure 4-14. The shape's real outline, strictly speaking, is an infinitesimally thin line,
shown black in the figure. The process of stroking creates an outline shape around the real
outline. Some of the stroked outline extends outside the shape, and some of the stroked
outline overlaps with the shape's interior.
Figure 4-14. The stroked outline and interior of a circle
69
If you're using opaque colors, then you'll get different results depending on the order in which
you do things. If you use partially transparent colors, then you'll be able to observe the
overlap of stroked outlines and filled interiors in your results. The following shows how this
happens in practice. First, it strokes the outline and fills the interior of a circle using a partially
transparent color:
Color smokey = new Color(128, 128, 128, 128);
g2.setPaint(smokey);
g2.fill(e);
g2.draw(e);
Then, in a different location, it strokes the circle's outline using a solid black color and fills
the interior using a solid gray:
g2.setPaint(Color.black);
g2.draw(e);
g2.setPaint(Color.gray);
g2.fill(e);
Finally, it fills the circle with gray and then strokes the outline with black:
g2.setPaint(Color.gray);
g2.fill(e);
g2.setPaint(Color.black);
g2.draw(e);
grafica pe calculator
de studiat:
http://www.javadocexamples.com/java/awt/geom/Rectangle2D/setFrame%28double
%20x,double%20y,double%20w,double%20h%29.html
http://www.javadocexamples.com/java/awt/geom/Arc2D/setFrame%28double%20x,double
%20y,double%20w,double%20h%29.html
Exemplu: sa se deseneze un cerc umplut cu un gradient, in mijloc, conturul acela i cercul este
desenat cu o linie groas cu o culoare solid iar in dreapta, conturul cercului este desenat cu
aceeai linie groas folosind gradient de culoare.
import java.awt.*;
import java.awt.geom.*;
import java.util.Locale;
70
import javax.swing.JFrame;
public class PaintingAndStroking
extends JFrame {
public static void main(String[] args) {
PaintingAndStroking f = new PaintingAndStroking();
f.setTitle("PaintingAndStroking v1.0");
f.setSize(500, 550);
f.setLocation(50,50);
f.setVisible(true);
}
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
double x = 15, y = 50, w = 70, h = 70;
Ellipse2D e = new Ellipse2D.Double(x, y, w, h);
GradientPaint gp = new GradientPaint(75, 75, Color.white,
95, 95, Color.gray, true);
// Fill with a gradient.
g2.setPaint(gp);
g2.fill(e);
// Stroke with a solid color.
e.setFrame(x + 100, y, w, h);
g2.setPaint(Color.GREEN);
g2.setStroke(new BasicStroke(8));
g2.draw(e);
// Stroke with a gradient.
// setFrame(double x, double y, double w, double h)
//Sets the location and size of the framing rectangle of this Shape to the specified rectangular
values.
// http://docs.oracle.com/javase/7/docs/api/java/awt/geom/Ellipse2D.Double.html
e.setFrame(x + 200, y, w, h);
g2.setPaint(gp);
g2.draw(e);
}
}
grafica pe calculator
import java.awt.*;
import java.awt.geom.*;
import javax.swing.JFrame;
public class Overlap
71
extends JFrame {
public static void main(String[] args) {
Overlap f = new Overlap();
f.setTitle("Exemple 2d");
f.setSize(300, 150);
f.setLocation(20,20);
f.setVisible(true);
}
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
double x = 15, y = 50, w = 70, h = 70;
Ellipse2D e = new Ellipse2D.Double(x, y, w, h);
g2.setStroke(new BasicStroke(25));
// Stroke and paint.
Color smokey = new Color(128, 128, 8, 50);
g2.setPaint(smokey);
g2.fill(e);
g2.draw(e);
// Stroke, then paint.
e.setFrame(x + 100, y, w, h);
g2.setPaint(Color.MAGENTA);
g2.draw(e);
g2.setPaint(Color.gray);
g2.fill(e);
// Paint, then stroke.
e.setFrame(x + 200, y, w, h);
g2.setPaint(Color.gray);
g2.fill(e);
g2.setPaint(Color.black);
g2.draw(e);
grafica pe calculator
}
}
Aplicatii propuse
72
grafica pe calculator
73
grafica pe calculator
74
75
Unity este un game engine ce iti ofera posibilitatea dea a iti porta jocul pe o platforma dorita
de tine, iti pune la dispozitie o multime de pachete ce acopera totul incepand de la texturi si
animatii pana la intregi proiecte drept model. Aceste pachete sunt produse de catre Unity
Technologies dar si de catre membrii ai comunitatii, care le pot posta gratuit sau vinde.
Unele din cele mai des utilizate functii din clasa Monobehaviour sunt :
Awake (){
// Fiecare instructiune este rulata inca de la incarcarea scriptului,chiar daca componenta de
script nu este activata
}
Start(){
// Functia Start este apelata dupa functia Awake si doar atunci cand scriptul este activat.
}
Update(){
//Functie care este apelata la fiecare frame, si in aceasta functie sunt introduse comenzile de
control.
}
FixedUpdate(){
//Functie care este apelata la un numar de frameuri constante, pot fi folosite pentru a adauga o
forta unui obiect, la fiecare miscare a obiectului functia FiexUpdate este apelata.
}
grafica pe calculator
LateUpdate(){
Functie apelata la finalul rularii instructiunilor din Update()
}
Coroutine(){
/*Aceste functii sunt folosite atunci cand ai nevoie de realizarea unei actiuni la un anumit
moment din joc,coroutinele sunt apelate cu StartCoroutine(functie) si este de forma :
76
IEnumerator functie(){
Instructiuni
Yield return new WaitForSeconds(1.4f);
Instructiuni
}
astfel ai controlul asupra derularii unor actiuni.
*/
}
OnGui(){
//Putem creea butoane, ferestre, o interfata cu care utilizatorul sa interactioneze. Aceasta
functie este apelata la fel ca si functia Update(), la fiecare frame.
}
De la lansarea lui Unity 4.6 dezvoltatorii de jocuri au accesul la un UI Tool care nu necesita
scrierea de foarte mult cod. Creearea unei interfete cu care utilizatorul sa interactioneze nu a
fost niciodata mai usor. Exemplu:
grafica pe calculator
https://unity3d.com/learn/tutorials/modules/beginner/live-training-archive/the-new-ui
In Unity avem la dispozitie Animator Controller care ne ajuta sa mentinem anumite animatii
pe un obiect si sa le controlam in functie de anumite conditii. De asemenea in Unity putem
creea propriile animatii ca de exemplu deschiderea unei usi, etc.
Link spre galeria cu jocurile create in Unity :
https://unity3d.com/showcase/gallery/games
http://www.unitygamesbox.com/page/11
77
MODEL BILET 1
1. Caracterizati grafica digital (2 pct).
2. Caracterizati grafica vectorial (2 pct).
3. Explicati modelele de culori RGB si CMYK (2 pct).
4. Sa se explice fiecare functie OpenGl utilizata in programul urmator (1.5 pct).
20.
glViewport (0, 0, (GLsizei) w,
(GLsizei) h);
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
27.
glutInit(&argc, argv);
(GL_COLOR_BUFFER_BIT);
28.
glutInitDisplayMode
10.
glColor3f (1.0, 0.0, 0.0);
(GLUT_SINGLE | GLUT_RGB);
11.
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.
glEnd();
32.
init ();
16.
glFlush ();
33.
glutDisplayFunc(display);
17.
}
34.
glutReshapeFunc(reshape);
18.
void reshape (int w, int h)
35.
glutMainLoop();
19.
{
36.
return 0;
37.
}
grafica pe calculator
5. Sa se scrie setul de comenzi (utilizand OpenGl) care, in urma executiei, vor conduce la
fereastra din figura alaturata (1.5 pct).
78
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 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
27.
glutInit(&argc, argv);
(GL_COLOR_BUFFER_BIT);
28.
glutInitDisplayMode
10.
glColor3f (1.0, 0.0, 0.0);
(GLUT_SINGLE | GLUT_RGB);
11.
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.
glEnd();
32.
init ();
16.
glFlush ();
33.
glutDisplayFunc(display);
17.
}
34.
glutReshapeFunc(reshape);
18.
void reshape (int w, int h)
35.
glutMainLoop();
19.
{
36.
return 0;
20.
glViewport (0, 0, (GLsizei) w,
37.
}
(GLsizei) h);
grafica pe calculator
79