User:Igabriel85/Computer graphics/2014-2015/Laborator 1

Sumar Agendă Laboratoare
Vă rog să consultați Grafica -- 2014-2015 -- info.uvt.ro/Agenda Laboratoare.

Criterii de Evaluare
Vă rog să consultați Grafica_si_Interfete - 2014-2015 - info.uvt.ro.

Unelte, Framework-uri și Librării
Please consult Computer graphics -- 2013-2014 -- info.uvt.ro/Laboratory tools.

Grafica Informatică
Grafica Informatică - Computer graphics definiții :


 * Este un subdomeniu a Informaticii care studiază metode de sinteză digitală și manipulare a continuturilor vizuale. Deși este deseori confundată cu studiul exclusiv a imaginilor 3D grafica în informatică se referă și la imagini 2D cât și procesarea imaginilor Computer graphics.
 * Este representarea și manipularea de date visuale cu ajutorul unui calculator
 * Este un set de tehnologii care sunt folosite pentru a crea artă digitală folosind un calculator

Studiază :


 * manipularea a informațiilor vizuale și geometrice folosind metode computationale
 * algoritmi ce reproduc sau creează imagini photo-realistice

Grafica are un set sub -diviziuni:


 * Geometry/Geometrie -- studiază metode de a reprezenta și procesa suprafețe (studies methods to represent and process surfaces)
 * Animation/Animație -- studiază metode de reprezentare și manipularea mișcarilor (studies methods to represent and manipulate motion)
 * Rendering -- reprezentarea imaginilor formate cu ajutorul unor modele folosind un program informatic (represents images staring from models by using computer programs)
 * Imaging -- studiază capturarea și editarea imaginilor (studies image acquisition and editing.)

Link-uri utile:
 * Constructive solid geometry
 * Subdivision surface
 * Polygon mesh
 * Animation
 * Rendering (computer graphics)
 * Digital imaging
 * Image processing

Grafica 2D / 3D

 * Grafica 2D : implică generarea unor imagini digitale (sau a secvențelor de imagini --  animații), cu ajutorul unor modele 2D (figuri geometrice, text, imagini digitale) și tehnici de manipulare a acestora (rotație, translatie, scalarea, transparență etc.)


 * Grafica 3D : (la fel ca si în cazul 2D) implica generarea unor imagini digitale (sau secvențe) cu ajutorul unor modele sau obiecte geometrice 3D

În mod normal acestea implică următorii pași:
 * Modeling/Modelare;
 * Defining/determining the scene layout/Layout-ul scenelor;
 * Rendering the scene (includes objects)/ Randarea scenelor (inclusiv objecte);

Outputul este asemănător, singura diferență este inputul -- imaginir (sau scener) 2D și 3D

Links-uri utile:
 * 2D computer graphics
 * 3D computer graphics
 * 3D modeling
 * 3D rendering

Imagini Digitale

 * O imagine digitală : este reprezentarea unei imagini ca și o matrice 2D fiecare valoare dintr-o astfel de matrice este numit un --pixel -- fiecare pixel codifică culoarea dintr-un punctul al imaginii.

Link-uri utile:
 * Raster graphics
 * Pixel

Rezoluția Imaginii
Rezoluția unei imagini digital reperzintă cantitate de informație stocată în aceasta. Acesta se referă și la numărul de pixeli care compun imaginea;

Link-uri utile:
 * Image resolution
 * Pixels per inch -- PPI -- foarte rar utilizat, de obicei folosită în cazul dispozitivele de vizualizare;
 * Dots per inch -- DPI -- cel mai des utilizat, de obicei în cazul imprimantelor;

Color depth

 * Bits per pixel : cantitatea de biți alocați pentru codificarea culorilor pentru un pixel.

Cazuri tipice:
 * 1-bit color = 2^1 = 2 culori: imagini alb negru;
 * 2-bit = 2^2 = 4 culori:
 * Grayscale;
 * Color Graphics Adapter -- CGA;
 * 4-bit = 2^4 = 16 culori:
 * Enhanced Graphics Adapter -- EGA;
 * VGA;
 * 8-bit color = 2^8 = 256 culori:
 * VGA;
 * Super Video Graphics Array -- SVGA;
 * 15-bit = 2^15 = 32768 culori:
 * 5 bits pentru fiecare culoare RGB;
 * Highcolor;
 * 16-bits = 2^16 = 65536 culori:
 * la fel ca și în cazul de 15-bits, dar în cazul culoarea verde are 6 biti
 * Truecolor;
 * 24-bits = 2^24 = 16777216 culori:
 * 8 bits pentru fiecare culoare RGB;

Link-uri Utile:
 * Color depth

Color spaces

 * Color space : este o metodă matematică pentru a reprezenta o culoare ca și un set (tuple) de numere.

Link-uri Utile:
 * Color space
 * RGB color model -- Red Green Blue
 * SRGB color space
 * CMYK color model -- Cyan Magenta Yellow Black
 * HSV color space -- Hue Saturation Value
 * HSL color space -- Hue Saturation Luminance
 * CIE 1931 color space

Extensii de Fișiere
Imaginile sunt stocate pe disk cu anumite extensii: BMP, PNG, TGA, JPEG, etc. Fiecare format stochează datele legate de imagini (color depth, color space, numere). Datele pot fi stocate cu sau fără compresie.

Link-uri utile:
 * Image file formats
 * Portable Network Graphics -- PNG
 * BMP file format -- BMP
 * Truevision TGA
 * JPEG
 * Image_file_formats

Graphics Processing Unit (GPU)
Un tip de procesor special pentru randare grafică. GPU-ul poate fii situat pe placa de bază sau pe o placă dedicată. Acesta incorporează o serie de operații primitive care ajută la randare. Astfel, randarea se face mult mai eficient cu GPU decât cu CPU.

Link-uri utile:
 * Graphics processing unit

OpenGL
OpenGL -- Open Graphics Library;
 * a fost creată de Silicon Graphics în 1992;
 * cea mai recentă versiune este 4.5 din 11 august 2014;
 * este o specificație pentru cross-platform API (Application Programmable Interface);
 * descire un set de funcții, inputurile și outputurile acestora, cât și comportamentul acestora;
 * este folosit pentru 2D și 3D;

Caracteristici:
 * ascunde detalii hardware și interfața low level de accesarea a acesteia;
 * asigură unified programmable interface;
 * asigură descrierea scenelor într-un mod procedural, programatorul trebuie să descrie toți pașii necesari pentru a randa o scenă - astfel poate fii considerată o librărie low level;
 * este focusat doar pe randare nu și pe windowing, input mouse/tastatură sau netwroking;
 * există un set de librării care sunt destinate pentru a remedia acest lucru:
 * GLU (OpenGL Utility Library ) : rutine de desenare si randare high-level OpenGL
 * GLUT (OpenGL Utility Toolkit) : destinat I/O la nivel de sistem (window definition, window control, monitorizare inputurilor de la tastatura si mouse, etc.)
 * GLUI (OpenGL User Interface Library) : bazat pe GLUT destinat controlului elementelor de UI precum butoane, check-boxes, radio buttons;
 * SDL (Simple DirectMedia Layer) : o interfață simplă pentru diferite platforme de grafică, dunet și dispozitive de input; Acesta este platform independant
 * etc.

Link-uri Utile:
 * OpenGL
 * OpenGL Utility Library
 * OpenGL Utility Toolkit
 * Simple DirectMedia Layer
 * Application programming interface

DirectX
DirectX:
 * creat de Microsoft  în 1995
 * versiunea curentă este 11 (suport multi-thread, GPGPU, tesselation etc.)
 * poate fi rulat doar pe platofme Microsoft (WIndows și Xbox)
 * este o colecție de API-uri, fiecare focusat pe un task anume
 * folosit pentru dezvoltarea de jocuri video și programe CAD (Computer Aided Design)
 * nu are o specificație standard, este contra cost și cu sursă închisă (closed source)
 * este compusă din:
 * RT -- runtime -- folosit pentru rularea applicațiilor folosind DirectX
 * SDK -- software development kit -- necesar pentru crearea aplicațiilor folosind DirectX
 * descrierea scenelor este similară cu cea folosită în OpenGL -- immediate mode
 * inițial folosea o implementare scene graph -- retained mode;
 * Printre subAPI-uri amintim:
 * DirectDraw -- pentru grafică 2D;
 * Direct3D -- pentru grafică 3D;
 * XInput (DirectInput pentru versiunile < 10)-- folosit pentru input mouse și tastatură;
 * DirectPlay -- folosit pentru rețelistică (in versiunea 10 dplay.dll a fost înlocuit cu dplayx.dll);
 * XACT (DirectSound pentru versiunile < 10) și DirectMusic -- redare sunete/muzică;
 * DirectShow -- deprecated din 2005 dar încă există pentru compatibilitate

Link-uri Utile:
 * DirectX
 * DirectDraw
 * Direct3D
 * DirectInput
 * DirectPlay
 * DirectSound
 * DirectMusic
 * DirectShow
 * Software framework
 * Software development kit
 * Runtime

Java 2D / Java 3D
Java 2D / Java 3D:
 * Java 2D este un API pentru redarea obiectelor/scenelor 2D
 * Java 3D este un API pentru redarea obiectelor/scenelor 3D
 * Java 3D poate rula peste OpenGL sau DirectX
 * nu este doar un simplu wrapper folosind concepte OOP
 * Java 3D folosește atât graph paradigm cât și immediate mode

Link-uri Utile:
 * Java 2D
 * Java 3D
 * Scene graph

JOGL -- Java OpenGL

 * ultima veriune este 2.2.4 din 10 October 2014
 * este un wrapperis peste OpenGL, replicând toate funcțiile GL
 * de oare ce OpenGL nu are apeluri specifice interfețelor de utilizator acestea sunt realizate folosind librării specifice Java (AWT, SWING)
 * deleagă apelurile folosind JNI (Java Native Call)
 * din versiunea 1.1.0 încoace se regăsesc toate caracteristicile OpenGL
 * conversia codului din cod Java/JOGL în C este extrem de ușoară (păstrează nomenclatura OpenGL C API)

Link-uri Utile:
 * JOGL
 * Java OpenGL
 * Java Native Interface

XNA

 * creat de Microsoft în 2004
 * ultima versiune este 4.0 din 2011
 * bazată pe .Net Framework;
 * ansamplu de unelte pentru dezvoltarea jocurilor
 * minimizează cod de tip boilerplate;
 * focus pe crearea de jocuri în loc de elemente low level;
 * se poate folosii din limbaje .Net (precum C#);

Link-uri Utile:
 * Microsoft XNA
 * Boilerplate (text)
 * VRML
 * X3D