1. Transformări geometrice uzuale;
2. Reprezentarea curbelor, suprafeţelor şi corpurilor;
3. Observarea unui sistem 3_D de puncte;
4. Modelarea corpurilor;
Texturi
Următoarele cursuri prezintă câteva metode de îmbunătăţire a imaginilor în sensul apropierii calităţii lor de imaginile reale.
Dintre aceste metode prezentate în literatura de specialitate cum ar fi:
a) eliminarea suprafeţelor şi muchiilor acoperite pentru extragerea elementelor de frontieră ascunse,
b) perspectiva pentru informaţiile de profunzime,
c) proiecţiile dinamice pentru reprezentarea obiectelor în mişcare,
d) indici de intensitate sau variaţia de culoare utilizate pentru modificarea culorilor din adâncime,
e) texturi
şi detalii de suprafaţă pentru reprezentarea microstructurilor feţelor,f) secţionarea cu un plan frontal utilizată la vizualizarea interiorului obiectului,
g) iluminarea curpurilor prin utilizarea luminilor şi umbrelor şi
h) stereografia pentru redarea în relief a a obiectelor tridimensionale,
1. Eliminarea suprafeţelor acoperite
2. Texturi
3. Lumină şi umbră
4. Stereografie
Utilizarea texturilor
în grafica tridimensională are un rol important în creşterea realismului imaginilor (mai ales dacă acestea prezintă mici imperfecţiuni, adică defecte intenţionat introduse), deoarece aceste detalii de pe suprafaţa obiectelor dau multe informaţii (material, poziţie, dimensiuni
, etc.) despre corpul reprezentat.Există trei categorii de texturi şi anume:
a)
Constante
ca mărime şi orientare pe suprafaţa corpului,b)
Variabile
ca mărime şi orientare în funcţie de poziţia feţelor.c)
Neregulate
- aleatoare ca mărime şi orientare (fractali
).a) Texturile constante
Acestea se utilizează atât în grafica 2-D cât şi în grafica 3-D pentru tapetarea fondurilor scenelor.
Acestea se pot defini printr-o matrice de culori sau în sistem vectorial prin coodonate relative ale capetelor segmentelor descrise.
Există biblioteci de texturi caracteristice diferitelor obiecte sau materiale cum ar fi:
fagure, lemn, parchet, sticlă, apă, iarbă
, etc.Aplicarea unei texturi se poate face la umplere, unde un punct Pij se va colora ţinând cont de o textură defintă prin matricea T cu m linii şi n coloane numerotate de la 0 la m-1 respectiv n-1 în culoarea Ti Mod m , j Mod n .
Aplicarea unei texturi se poate face la umplere, unde un punct Pij se va colora ţinând cont de o textură defintă prin matricea T cu m linii şi n coloane numerotate de la 0 la m-1 respectiv n-1 în culoarea Ti Mod m , j Mod n .
Tij = Textel
b) Texturile variabile
Un exemplu des utilizat de texturi variabile îl constituie aplicarea textelor pe feţele corpurilor (simboluri scrise pe suprafaţa obiectelor).
Pentru aceasta este nevoie de o
digitizare
a caracterelor prin segmente sau prin linii poligonale închise.Există o adevărată industrie de fonturi care crează biblioteci de caractere .
Aplicarea pe faţa dorită a unei texturi variabile se realizează în trei etape:
Se aduce caracterul pe faţa dorită prin două rotaţii (într-un plan paralel cu faţa pe care se doreşte aplicarea) apoi printr-o translaţie;
Se proiectează punctele critice care descriu caracterul odată cu obiectul;
Se construieşte textura unind punctele critice sau prin umplere.
Observaţie
La caracterele nesimetrice trebuie avută în vedere şi normala la plan, deoarece caracterele pot fi aplicate invers (ca în figura alăturată).
Aplicarea texturilor pe suprafeţe P(x,y,z)
T
ijf
f = ?
Aplicarea texturilor
pe suprafeţe plane
pe cilindru (r,h)
pe sfera (r)
pe alte obiecte
… Aplicarea texturilor pe suprafeţe
Aplicarea texturilor
pe suprafeţe plane
pe cilindru (r,h) :
pe sfera (r)
pe alte obiecte
P(x,y,z)
y
h
z
x r
x = r cos z = r sin y = y
s= * L / π t= y * l / h
l t
s L
… Aplicarea texturilor pe suprafeţe
…
pe cilindru (r,h) :
pe sfera (r)
…
int L = 399, l =399; // Textura (Lung, lat.) double Rc = 1, h = 2; // Cilindru (Rc, h)
double x(double Rc, double Alf) { return Rc * Math.Cos(Alf); } // x = r * cos (Alfa); r=Rc=Raza Cil.
double z(double Rc, double Alf) { return Rc * Math.Sin(Alf); } // z = r * sin (Alfa)
int s(double Alf, double L) { return (int)(L-Alf * L / Pi ); } // Textura[s,t] din [0,L]x[0,l]
int t(double y, int l, double h) { return (int)(l- y * l / h ); }
… Aplicarea texturilor pe suprafeţe
…
pe cilindru(r,h):
pe sfera (r)
…
ViewPort (100, 50, 300, 350); DefPr (1, 3.14 / 4);
double a = b = PrX(x(Rc, 0), z(Rc,0)), // Determinarea ferestrei reale c = d = PrY(0, z(Rc,0));
for (double al = 0; al < Pi; al += Pi / L) // Alfa din [0,Pi]
for (double y = 0; y < h; y += h / l) // y din [0, h]
{
double Cx = x(Rc, al), Cy = y, Cz = z(Rc, al); // Pct. pe Cil.(Cx, Cy,Cz) double Xp = PrX(Cx, Cz), Yp = PrY(Cy, Cz);
if (Xp < a) a = Xp; else if (Xp > b) b = Xp;
if (Yp < c) c = Yp; else if (Yp > d) d = Yp;
}
Window (a, d, b, c);
for (double al = 0; al < Pi; al += Pi / L) // Alfa din [0,Pi]
for (double y = 0; y < h; y += h / l) // y din [0, h]
{
double Cx = x(Rc, al), Cy = y, Cz = z(Rc, al); // Punct pe Cil.(Cx, Cy,Cz) double Px = PrX(Cx, Cz), Py = PrY(Cy, Cz);
Im2.SetPixel(u(Px), v(Py), Im1.GetPixel(s(al, L), t(y, l, h)));
}
… Aplicarea texturilor pe suprafeţe
pe cilindru(r,h):
… Aplicarea texturilor pe suprafeţe
Aplicarea texturilor
pe suprafeţe plane
pe cilindru (r,h) :
pe sferă (r) :
pe alte obiecte x = r cos sin
y = r sin
z = r cos cos
P(x,y,z)
y
z
x
r
… Aplicarea texturilor pe suprafeţe
pe sferă (r):
double alfa(int j, int H) { double Pi = 3.141592;
return -Pi * j / H + Pi / 2;
}
double beta(int i, int W) { double Pi = 3.141592;
return -Pi * i / W + Pi;
}
void PutPixel(Bitmap Im, int x, int y, Color c) { Im.SetPixel(x, y, c); Im.SetPixel(x, y+1, c);
}
private void button2_Click(object sender, EventArgs e) // Sfera {
int Ri = 90, Rj = 185;
for (int i = 0; i < Im1.Width; i++) for (int j = 0; j < Im1.Height; j++)
PutPixel(Im2, Im1.Width/2 + (int)(Math.Cos(alfa(j,Im1.Height))* Math.Cos(beta(i, Im1.Width))* (Ri + j / 5)), Im1.Height/2 - (int)(Math.Sin(alfa(j, Im1.Height)) * Rj), Im1.GetPixel(i, j));
pictureBox2.Image = Im2; pictureBox2.Refresh();
}
… Aplicarea texturilor pe suprafeţe
pe sferă (r):
… Aplicarea texturilor pe suprafeţe
http://csclab.murraystate.edu/bob.pilgrim/515/texture_maps_project.html
http://www.flashandmath.com/advanced/sphere/ideas.html
https://www.siggraph.org/education/materials/HyperGraph/mapping/spheretx.htm
https://www.cs.cmu.edu/~fp/courses/graphics/pdf-color/10-texture.pdf
http://www.cs.kent.edu/~zhao/acg13/lectures/IntroTextureMapping.pdf
http://web.eecs.utk.edu/~huangj/cs456/notes/456_texturemap1.pdf
Referinţe
Tipuri de texturi
de mediu
proiective
de iluminare
de umbrire
celulare
combinate
cu defecte (Bump)
c) Texturile neregulate
Aceste texturi sunt utilizate în generarea aleatoare a unor forme de simulare a realităţii, de exemplu
arbori, nori, dune de nisip, valuri, lemn
, etc.Realizarea unor astfel de texturi se poate face prin:
Variaţia aleatoare a
direcţiei de iluminare
; Distorsionarea aleatoare a
normalei la plan
;
Structuri fractale
.Fractalii
, aceste variaţiuni geometrice ciudate, pot fi: de formă regulată (generaţi prin repetarea unui motiv sau detaliu primar) sau
de
formă neregulată
(definiţiprobabilistic
).Fractalii de formă regulată se definesc prin curbe, suprafeţe, volume, funcţii, etc., sau printr-o regulă de construcţie.
Fractalii sunt forme definite prin ecuaţii matematice, rezultând o figură geometrică, care poate fi divizată în părti, astfel încat fiecare dintre acestea sa fie o copie miniaturală a întregului.
Cuvantul fractal a fost introdus de matematicianul Benoit Mandelbrot în 1975 si provine din latinescul fractus, care inseamnă spart sau fracturat.
Fractalul, ca formă geometrică, are următoarele caracteristici:
• este auto-similar: dacă se măreste orice porţiune dintr-un fractal, se vor obţine cam aceleaşi detalii cu cele ale fractalului întreg,
• are o definiţie recursivă – de exemplu: x, f(x), f(f(x)), f(f(f(x))), ...,
• are detaliere şi complexitate infinita: orice nivel de magnificare pare identic şi are o structură fină la scări infinit de mici.
Elementele definitorii sunt:
initiator: segmentul, curba sau forma initiala.
generator: regula folosita pentru a construi o noua forma (recurent/recursiv).
iteratie: repetare / recursivitate
Fractal:
Bază (rădacină),
Regula de dezvoltare (de creştere),
Perioadă de creştere.
Fractali renumiti:
initiator: segmentul, curba sau forma initiala.
generator: regula folosita pentru a construi o noua forma (recurent/recursiv).
iteratie: repetare / recursivitate
SIGGRAPH OpenGL Course Material
Advanced Graphics Programming Techiques using OpenGL, SIGGRAPH 2000 Advanced Graphics Programming Techiques using OpenGL, SIGGRAPH 1999 Lighting and Shading Techniques for Interactive Applications, SIGGRAPH 1999 Advanced Graphics Programming Using OpenGL
http://www.bluevoid.com/opengl/index.htm
Computer Graphics Abstracts
http://www.ccs.neu.edu/home/fell/CS5310/abstracts/abstracts2011.html
Environment Maps Explained
http://www.spiralgraphics.biz/genetica/help/index.htm?environment_maps_explained.htm
Hacking the Lite pt.1: Projective Texture Mapping
http://www.derschmale.com/2010/12/30/hacking-the-lite-pt-1-projective-texture-mapping/
Aplicaţi pe feţele unui corp (poliedru) una din cele trei categorii de texturi: