referat grafica pe calculator

8
Universitatea Titu Maiorescu București Facultatea de Informatică PRIMITIVE RASTER ÎN OPENGL

Upload: drajneanu-gelu

Post on 10-Nov-2015

27 views

Category:

Documents


5 download

DESCRIPTION

Grafica pe calculator, primitive raster

TRANSCRIPT

Universitatea Titu Maiorescu BucuretiFacultatea de Informatic

PRIMITIVE RASTER N OPENGL

Student: Drjneanu Gelu-Marian An II, I.D., Grupa 208

Pe lng faptul c este o interfa pentru aplicaiile de grafic vectorial 3D, OpenGL este i un foarte bun motor de procesare a imaginilor folosite n aplicaiile de grafic punctual sau raster. OpenGL lucreaz cu dou tipuri de primitive raster: Bitmap-uri, acestea folosesc cte un singur bit (0 sau 1) pentru ficare pixel. Funcia glColor() determin noua culoare a pixelilor, care corespund valorii 1, in timp ce biii cu valoare 0 sunt transpareni; Pixelmap-uri, acestea sunt nite blocuri de pixeli care conin informaii complete de culoare pentru fiecare pixel;Pixelii se citesc din memoria principal i sunt procesai ntr-un format pe care OpenGL l poate utiliza, astfel nct se pot face modificri de culoare sau nlocuire de octei. Bitmap-urile si pixelmap-urile sunt dou primitive neafectate de operaii geometrice care au loc n fluxul operaiilor anterior rasterizrii.Un bitmap specific un dreptunghi completat cu 0 i 1, iar fiecare valoare de 1 din bitmap reprezinta un fragment ale crui valori asociate sunt cele ale poziiei raster curente, in timp ce pentru valoarea 0 nu se produce nici un fragment. Comanda glBitmap() specific offset-urile care controleaz plasarea bitmap-ului raportat la poziia raster curent. O alta funcie importanta este glRasterPos3f(x,y,z) care reprezint poziionarea primitivelor raster. Prin specificarea poziiei raster sunt poziionate si imaginile, iar dac o poziie raster se pierde prin decuparea fa de vewiport, nu mai este rasterizat niciun fragment din primitiva bitmap.Bitmap-urile se redau cu ajutorul funciei glBitmap(width, height, xorig, zorig, xmove, bitmap). Funcia red bitmap-ul in culoarea curent, iar dupa redarea primitivei, poziia raster este actualizat. Bitmap-urile sunt folosite ca o masc pentru actulizarea pixelilor. n cazul in care originea bitmap-ului este (0,0), atunci bitmap-ul va fi plasat in poziia raster curent, iar dac difer de valorile (0,0), poziia raster va fi utilizat pentru plasarea originii bitmap-ului. Coordonatele originii bitmap-ului se stabilesc la colul stanga-jos al acestuia.Pentru redarea caracterelor n OpenGL, putem folosi atat fonturi vectoriale ct i fonturi bitmap. Primele sunt construite din segmente de dreapt i se folosesc epntru dispozitive vectoriale, precum ploterele, pe cnd fonturile bitmap formeaza fiecare caracter ca un bitmap. Pentru a fi mai simpl utilizarea fonturilor, n OpenGL se folosesc listele de display, iar fiecare lista conine doar un apel glBitmap() pentru redarea carcaterului corespunzator. Fiecare list de display are un identificator unic, un numr, care poate fi ales ca valoare succesiv pentru caracterele fontului. n acest fel, pentru redarea unui text, trebuie apelate listele de display care corespund fiecrui caracter din textul respectiv. Avem dou posibiliti pentru construirea bitmap-urilor corespunzatoare fiecrui caracter dintr-un font: Declararea tabloului de tip unsigned byte (Glubyte in OpenGL), care conine caracterele respective; Construirea bitmap-urilor corespunzatoare fiecrui caracter pe baza fontului curent din mediul de lucru;n OpenGL, pentru afiarea unui caracter, se construiete un tablou care conine caracterul i se ine seama de faptul c pentru limea bitmap-ului trebuie s avem un numr par de octei. Exemplu:/* Programul este un exemplu de utilizare a primitivei bitmap * in OpenGL,pentru desenarea fonturilor. */#include "glos.h"#include #include #include 87void CALLBACK myReshape(GLsizei w, GLsizei h);void CALLBACK display(void);// tabloul care conine litera E, 2 octei X 12 rnduriGLubyte litera_E[24] = {0xff, 0xc0, 0xff, 0xc0, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,0xff, 0x00, 0xff, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,0xff, 0xc0, 0xff, 0xc0};void CALLBACK display(void){glPixelStorei (GL_UNPACK_ALIGNMENT, 1);glClearColor (1.0, 1.0, 1.0, 0.0);glClear(GL_COLOR_BUFFER_BIT);glColor3f (0.0, 0.0, 0.0);glRasterPos2i (-2.0, 0.0);//poziia curent pentru primul bitmap// dat n uniti logice (sunt 10 uniti pe axa x n intervalul(-5, 5))glBitmap (10, 12, 0.0, 0.0, 20.0, 0.0, litera_E);// deplasarea poziiei curente este dat n pixeli - 20 de pixeli pe axa xglBitmap (10, 12, 0.0, 0.0, 20.0, 0.0, litera_E);glBitmap (10, 12, 0.0, 0.0, 20.0, 0.0, litera_E);glBitmap (10, 12, 0.0, 0.0, 20.0, 0.0, litera_E);glFlush();}// proiecie ortogonal//se mapeaz 10 uniti pe fiecare ax, o unitate are 20 pixelivoid CALLBACK myReshape(GLsizei w, GLsizei h){if (!h) return;glViewport(0, 0, w, h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if (w