Sunteți pe pagina 1din 67

Grafic Computer Graphics Semestrul II 2011/12

Mr.conf.univ.dr.ing. Cristian Molder

Introducere

Ce este CG?
Mijloc de creare, stocare i manipulare a modelelor i imaginilor cu ajutorul sistemelor grafice

Modelele provin din diverse domenii de aplicaie, precum fizic, matematic, art, biologie etc.
Bazat pe geometria obiectelor i atributele acestora

Ex: Modelarea CAD

Ex: Efecte video speciale

Ex: Animatie

Ex: Arta

Ex: Simulatoare de zbor

Ex: Simularea fenomenelor

Ex: Jocuri video

Ce se nvata?
nelegerea principiilor de baz ale tehnologiilor grafice hardware i software, algoritmi i terminologie
Utilizarea interfeei de programare a aplicaiilor OpenGL pentru a scrie programe grafice 2D/3D Nu se nva pachete de programe !

Temele principale ale cursului


Sisteme hardware de procesare video Sisteme de afiare Culoarea n sistemele grafice Proiecii i transformri Generarea primitivelor grafice 2D Decuparea scenelor Reprezentarea obiectelor 3D Detecia suprafeelor vizibile Iluminarea i randarea suprafeelor Animaie

Hardware-ul grafic

Hardware-ul grafic
Hardware dedicat operaiilor de prelucrare i afiare a informaiilor grafice Hardware:

Integrat (onboard) utilizeaz parial/total


resursele sistemului de calcul pentru efectuarea calculului grafic Extern (stand-alone) hardware dedicat exclusiv efecturii calculului grafic

Structura unei placi video

BIOS memorie PROM care conine o secven de program necesar interfarii hardware-ului video cu sistemul de calcul

Structura unei placi video

Timer genereaz semnalele de ceas (frecvenele) pentru operarea circuitelor

Structura unei placi video

VRAM (Video RAM) memorie volatil dedicat, de mare vitez, interfaat cu procesorul grafic

Structura unei placi video

RAMDAC (Random Access Memory DigitalAnalog Converter) convertete informaia digital n semnale analogice necesare monitorului

Structura unei placi video

GPU (Graphic Processing Unit) procesor destinat efecturii operaiilor grafice, n arhitectur paralel dedicat

Interfete hardware

Interfete hardware

Interfete hardware

Pipeline-ul grafic

Pipeline flux de procesare hardware = ordinea n care sunt efectuate operaiile de generare a unei imagini pornind de la modelul 3D

Procesoare grafice (GPU)


Arhitectur paralel cu uniti de calcul dedicate

Vertex shader preia vertexurile (punctele) din spaiul 3D


i le proiecteaz n planul 2D al imaginii

Pixel shader genereaz triunghiuri elementare

(poligoane) pornind de la pixelii generai anterior de ctre vertex shader i le adaug informaia de culoare

Texture mapping unit efectueaz operaii de rotaie i


rescalare a imaginilor textur pentru a fi aplicate pe triunghiurile poligonale

Render output unit genereaz imaginea final i o scrie


n frame buffer

GeForce 6 Series

GeForce 8 Series

Memoria video (VRAM)


Memorie RAM de mare vitez, conectat la GPU prin intermediul unei magistrale de date Limea magistralei influeneaz semnificativ performanele hardware-ului grafic (n prezent magistrale pe 128-512 bii)

Memoria video (VRAM)


Hardware video cu memorie dedicat (VRAM) GPU VRAM Hardware video cu memorie partajat cu cea a sistemului GPU CPU

Interfa (AGP, PCIe)

RAM Sistem

RAM Sistem

CPU

Memoria video (VRAM)


Memoria VRAM este situat doar pe placa video Se poate utiliza i memoria sistemului (TurboCache)

Hardware grafic
Utilizarea a dou plci video conectate n mod master/slave (nVidia = SLI sau ATI = CrossFire)

Hardware grafic
Utilizarea a dou procesoare grafice, unul integrat onboard iar cellalt dedicat (nVidia = Hybrid SLI)

CUDA
Unificarea arhitecturii (CPU+GPU) pentru mrirea puterii de calcul GPU efectueaz att calcule grafice, ct i calcule de fizica obiectelor (fluide, foc, fum etc.)

GPGPU
Utilizarea puterii de calcul al GPU pentru rezolvarea unor sarcini non-grafice primite de la sistemul PC (General-Purpose computing on Graphics Processing Units) Aplicaii:

Prelucrare de semnal audio Calcule financiare Reele neurale Transformate Fourier Fizic molecular Prelucrarea bazelor de date Criptografie

Tehnologii

API-uri de programare
API = Application Programming Interface, reprezint interfaarea dintre aplicaia software i hardware

Direct3D proprietar Microsoft, uurin n crearea


aplicaiilor

OpenGL sistem de tip Open Source, portabil pe

orice sistem de operare, creaz aplicaii optimizate

Programarea aplicaiilor

Pipeline-ul grafic al OpenGL

Ghiduri de programare

Grafica 2D
Generarea n OpenGL a unei ferestre grafice (utiliznd GLUT)

Generarea unor primitive 2D simple (linii, triunghiuri, poligoane)


Utilizarea tastaturii i a mouseului

Grafica 3D
Generarea primitivelor grafice 3D Poziionarea obiectelor n spaiu Utilizarea transformatelor de coordonate

Randarea scenelor
Randare Procesul de calculare a unei imagini pornind de la datele de intrare
Date de intrare

Puncte, linii, poligoane etc Atribute: culoare, textur, iluminare etc

Tehnici de randare

Terminologie
Randare conversia scenei 3D n imagine 2D Scen modelarea mediului 3D cu ajutorul primitivelor grafice
suportate de ctre sistem

Modelele sunt create de mn sau automat Imaginea este afiat pe un monitor, listat la imprimant sau
stocat n fiiere

Fluxul de procesare totalitatea etapelor parcurse de la


modelarea scenei i pn la afiarea imaginii randate

Programarea n Visual C++


Cerine:

1. Mediul de programare instalat


2. Existena bibliotecii GLUT (5 fiiere) 3. Existena unui hardware grafic compatibil cu versiunea bibliotecii OpenGL

1. Crearea unui proiect

1. Crearea unui proiect

1. Crearea unui proiect

1. Crearea unui proiect

2. Crearea unei surse

2. Crearea unei surse

3. Includerea unei surse

3. Includerea unei surse

3. Includerea unei surse

4. Rularea aplicatiei

Compilare

Build

Execuie

4. Rularea aplicatiei

5. Formatul unei aplicatii

Comenzile OpenGL
Instruciunile au prefixul gl iar sufixele specific numrul argumentelor i tipul de date utilizate ca argument n interiorul instruciunii

glClearColor();
glVertex2i(1,3);

glVertex3f(1.0, 3.0, -1.2);


float punct[]={1.0, 3.0, -1.2}; glVertex3v(punct);

Comenzile OpenGL
Variantele de sufix pentru definirea tipului de date

Comenzile OpenGL
Constantele sunt definite sub forma unor stringuri majuscule care conin prefixul GL iar restul cuvintelor sunt separate cu ajutorul simbolului underscore

GL_COLOR_BUFFER_BIT

Bibliotecile grafice specifice conin prefix propriu. De exemplu, instruciunile rezervate ale bibliotecii GLUT (OpenGL pentru Windows) au prefixul glut glutInitWindow(GLUT_SINGLE|GLUT_RGB);

OpenGL: un exemplu simplu


Etapele parcurse pentru crearea unei aplicaii simple de generare i afiare a unui obiect ntr-o fereastr grafic:
1)

tergerea ferestrei grafice cu o anumit culoare Alegerea unei culori pentru desenarea unui obiect grafic Desenarea unui obiect grafic Controlul modului de desenare al obiectului grafic Forarea execuiei instruciunilor grafice

2)

3)

4)

5)

OpenGL: un exemplu simplu


Instructiuni pentru stergerea ferestrei grafice cu o anumita culoare

glClearColor(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT);

glClearColor(0.0, 0.0, 0.0, 0.0); glClearDepth(0.0); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

OpenGL: un exemplu simplu


Instructiuni pentru alegerea culorii de trasare a unui obiect grafic

glColor3f(0.0, glColor3f(1.0, glColor3f(0.0, glColor3f(1.0, glColor3f(0.0, glColor3f(1.0, glColor3f(0.0, glColor3f(1.0,

0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0,

0.0); 0.0); 0.0); 0.0); 1.0); 1.0); 1.0); 1.0);

black red green yellow blue magenta cyan white

OpenGL: un exemplu simplu


Instructiuni pentru definirea coordonatelor primitivei grafice

glVertex2f(0.0, 0.0); glVertex3f(1.0, 1.0, -1.0); int punct[]={1, 1, -1}; glVertex3v(punct);

OpenGL: un exemplu simplu


Instructiuni pentru definirea primitivelor grafice

glBegin(tip_obiect); ...

enumerare vertexuri
... glEnd();

OpenGL: un exemplu simplu


Valorile posibile ale argumentului tip_obiect

GL_POINTS GL_LINES GL_POLYGON GL_TRIANGLES GL_QUADS GL_LINE_STRIP GL_LINE_LOOP GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_QUAD_STRIP

OpenGL: un exemplu simplu


Instructiuni pentru setarea atributelor obiectului

glPointSize(4); glLineWidth(3); glBegin(GL_POINTS) ... glEnd();

OpenGL: un exemplu simplu


Instructiuni pentru executarea comenzilor grafice

glFlush();

pentru bufferare simpl (GLUT_SINGLE)

glutSwapBuffers();

pentru bufferare dubl (GLUT_DOUBLE)

S-ar putea să vă placă și