Sunteți pe pagina 1din 65

1

Transformarea de vizualizare 3D

Specificarea sistemului de coordonate de


vizualizare

Transformarea in sistemul de coordonate de


vizualizare

Specificarea volumului de vizualizare

Transformarea in volum de vizualizare canonic


2
Definirea sistemului de coordonate de vizualizare
u
v
->
N
--->
UP
PRV
plan de vizualizare
->
N - normala la planul de vizualizare
--->
VUP - vectorul sus la planul de vizualizare
PRV - punct de referinta de vizualizare
--> ---> ->
VU = UP x N
--> -> -->
VV = N x VU
-->
VV
-->
VU
n
3
Transformarea in sistemul de coordonate de
vizualizare
Sistem de
coordonate real
Sistem de
coordonate de
vizualizare Translatie
Alinierea axelor
) PRV - , PRV - , T(-PRV
1 0 0 0
0 N N Nx
0 VV VV VV
0 V! V! V!
z x
z
z x
z x

4
Definirea volumului de vizualizare
plan de vizualizare
v
u
n
fereastra
PRV
(umax, vmax)
(umin, vmin)
5
Definirea volumului de vizualizare
Proiectia perspectiva
PRP punct de referinta de proiectie
(umax, vmax)
(umin, vmin)
PRP
fereastra
Volum de
vizualizare
6
Definirea volumului de vizualizare
Proiectia paralela
PRP punct de referinta de proiectie
(umax, vmax)
(umin, vmin)
PRP
fereastra
CF
CF - centrul ferestrei
PRP-CF - directia de proiectie
Volum de
vizualizare
7
Definirea volumului de vizualizare
Proiectia perspectiva
PRP
plan de vizualizare
plan spate
plan fata
n
F
B
8
Definirea volumului de vizualizare
Proiectia paralela
plan de vizualizare
planul spate
planul fata
F B
n
9
Definirea volumului de vizualizare canonic
Proiectia perspectiva
x sau y
-z
-1 zmin
plan spate
plan fata
Planele delimitatoare:
x"z, x"-z
"z, "-z
z"zmin, z"-1, zmin # 0
10
Definirea volumului de vizualizare canonic
Proiectia paralela
x sau y
-z
-1
-1
1

plan spate
plan fata
Planele delimitatoare:
x"1, x"-1
"1, "-1
z"0, z"-1
11
Transformarea in volumul de vizualizare
canonic
plan de vizualizare
planul spate
planul fata
F B
n
PROIECTIE PARALELA
x sau y
-z
-1
-1
1

plan spate
plan fata
12
Alinierea aei de simetrie cu aa n
PROIECTIE PARALELA
N
Directia de
proiectie
Plan fata
Plan
spate
Plan de
vizualizare
N
Directia de
proiectie
Plan de
vizualizare
Plan fata
Plan
spate
13
Transformarea in volumul de vizualizare
canonic

!roiectia "aralela

#orfecare$ astfel incat directia de "roiectie


sa devina "aralela cu aa n

Translatie si scalare in volumul de


vizualizare canonic
14
Transformarea in volumul de vizualizare
canonic
PROIECTIE PERSPECTIVA
x sau y
-z
-1 zmin
plan spate
plan fata
PRP
plan de vizualizare
plan spate
plan fata
n
F
B
15
Alinierea aei de simetrie cu aa n
PROIECTIE PERSPECTIVA
N
N
Plan
spate
Plan de
vizualizare
Plan
fata
Plan
spate
Plan de
vizualizare
Plan
fata
PRP
PRP
16
%antul transformarilor in volumul de vizualizare
canonic

!roiectia "es"ectiva

#orfecare$ astfel incat aa de simetrie a


"iramidei sa devina aa n

&calare in volumul de vizualizare canonic


17
Transformarea in vie'"ort 3D

(olumul de vizualizare canonic se transforma


in vie'"ort 3D ) cu* cu latura l$ 0+l+,1$ cu
fetele "aralele cu "lanele sistemului de
coordonate$ centrat in ori-ine.

0+,+,1

0+,/+,1

0+,z+,1

0vmin+,+,vma

/vmin+,/+,/vma

zvmin+,z+,zvma1

#ata z , zvmin sau zvma re"rezinta "lanul


de "roiectie$ care se ma"eaza in "oarta de
afisare
18
Transformarea volumului vizual canonic in
vie'"ort 3D

Proiectia paralela
$
Translatia (-1,-1,-1) -% ori&ine
$
Scalare((xvmax-xvmin)'(, (vmax-vmin)'(,
(zvmax-zvmin))
$
Translatia (0,0,0) -% (xvmin, vmin, zvmin)
x sau y
-z
-1
-1
1

plan spate
plan fata
19
Transformarea volumului vizual canonic in
vie'"ort 3D
x sau y
-z
-1 zmin
plan spate
plan fata

Proiectia perspectiva

Trans)ormarea in volumul de vizualizare canonic


*entru *roiectia *aralela $ transformarea
perspectiva

+antul de trans)ormari de la trans)ormarea in


vie,*ort -. de la *roiectia *aralela
20
Transformarea "ers"ectiva
x sau y
-z
-1 zmin
plan spate
plan fata
x sau y
-z
-1
-1
1

plan spate
plan fata

Proiectie *ers*ectiva cu centrul de *roiectie in (0,0,0) si *lan


de *roiectie z"-1

=
0
d
1
0 0
0 1 0 0
0 0 1 0
0 0 0 1

a *ers*ectiv
P

(-zmin, -zmin, zmin) se


*roiecteaza in (1,1, -1)

(zmin, zmin, zmin) se


*roiecteaza in (-1,-1, -1)
21
Transformarea "ers"ectiva

Variatia coordonatei z in intervalul /0, 10

=
0 1 - 0 0
1 a 0 0
0 0 1 0
0 0 0 1

a *ers*ectiv
T

+ +
=
+
=
+
=
0 1 - 0 0
zmin 1
zmin
-
zmin 1
1
0 0
0 0 1 0
0 0 0 1
T
zmin 1
zmin
- 1
zmin 1
1
a
a *ers*ectiv
22
2"en3%

4i*lioiteca -rafica inde"endenta de "latforma


5ard'are
6aracteristici 2"en3%

Desenare o*iecte

Transformarea de vizualizare

6ulori$ iluminare

7liminarea "artilor nevizi*ile

8a"area teturilor

%ucrul cu ima-ini
23
2"en3%

4i*lioteca 2"en3%

gl901 : gl.h

4i*lioteci su"limentare

2"en3% ;tilit/ %i*rar/ 03%;1. glu901 : glu.h

3%;T 02"en3% ;tilit/ Tool<it1. glut901 : glut.h


24
#ormatul functiilor 2"en3%
gl=ume>#unctie2f0$ /1
=umar com"onente?
Dimensiuni
2 ) 0$/1
3 ) 0$/$z1
4 ) 0$/$z$'1 sau
0r$-$*$a1
4 ) */te
u* ) unsi-ned */te
s ) s5ort
us ) unsi-ned s5ort
i ) int
ui ) unsi-ned int
f ) float
d ) dou*le
&e adau-a @vA
"entru forma
vectoriala
-l(erte2fv0v1
25
-l(erte
glVertex3f (x,y,z);
2unctie din
1i1lioteca
3*en4+
Numele
de 1aza al
)unctiei
- ar&umente
Ar&umente
numere reale
26
Descrierea !rimitivelor

!uncte

%inii

!oli-oane
27
Ti"uri de "rimitive

3%>!2B=T& 3%>!2%C32=

3%>%B=7

D& E >%22! E >&TFB! G


28
Ti"uri de "rimitive

3%>TFBA=3%7

D& E >&TFB! E >#A=G

3%>H;AD

D& E >&TFB!G
29
7em"lu : Afisarea "rimitivelor
glBegin(GL_POLYGON)
glVertex2f( 0.0, 0.0 );
glVertex2f( 0.0, 3.0 );
glVertex2f( 3.0, 3.0 );
glVertex2f( .0, !." );
glVertex2f( 2.0, 0.0 );
gl#n$();
G!P"#G"N
30
%antul de transformari in 2"en3%

Transformarea de modelare

Transformarea de vizualizare

Transformarea de "roiectie 0inclusiv


decu"are1

Bm"artire "ers"ectiva

Transformarea in "oarta de afisare

Transformarile sunt "astrate su* forma


matricilor 44$ in re"rezentarea coloana
31
%antul de transformari in 2"en3%
$ransformarea de
modelare - vizualizare
$ransformarea de
proiectie
%mpartirea
perspectiva
$ransformarea in
poarta de afisare
varf &x' (' z' )*
+oordonate de
vizualizare
+oordonate de
decupare
+oordonate dispozitiv
normalizate
+oordonate dispozitiv &x' (*
32
Ttransformarea de modelare
2*iecte definite in
sisteme de
coordonate "ro"rii
0sisteme de
coordonate locale1
&istem o*iect
2*iecte definite fata
de acelasi sistem de
coordonate 0sistem
de coordonate -lo*al1
&istem real
Transformarea de
modelare

glTranslate{fd}(tx, ty, tz)

glScale{fd}(sx, sy, sz)

glRotate{fd}(u, x, y, z)

glRotate{fd}(u, 1, ,)!

glRotate{fd}(u, , 1,)!

glRotate{fd}(u, , ,1)!
33
7em"lu ) Transformarea de modelare
glL%&$'$entity();
$e(en();

glL%&$'$entity();
gl)r&n(l&tef(*20.0, 0.0, 0.0);
$e(en();
A
B
B
A
34
&tive de matrici
void glPus"#atrix( void )!
void glPop#atrix( void )!
35
7em"lu
x
z
5
6
0 10 (0 -0 70 80 90
(0
10
0
&lPus:;atrix()<
desen()<
&lPo*;atrix()<
&lPus:;atrix()<
&lTranslate)(10,0,10)<
desen()<
&lPo*;atrix()<
&lPus:;atrix()<
&lTranslate)(70,0,0)<
&lRotate)(78=0,0,1,0)<
desen()<
&lPo*;atrix()<
A
A
B
C
36
Transformarea de vizualizare

Pozitionarea o$servatorului in scena.


-lu%oo<At0o$o/$oz$c$c/$cz$u"$u"/$u"z1

2*s0o$o/$oz1:"ozitia o*servatorului

60c$c/$cz1:"unctul catre care se "riveste

u"$u"/$u"z:com"onentele vectorului sus


&istem
real
0c$ c/$ cz1
0o$ o/$ oz1
(ector u"
0u"$ u"/$ u"z1
37
Transformarea de vizualizare
%&plicit.

o*servatorul "ozitionat in ori-inea sistemului de coordonate


utilizator

"riveste de:a lun-ul aei z ne-ative

directia vectorului sus este data de directia aei / "ozitiva


&istem
real
u
v
n

/
z
2*s
6
Sistem de coordonate
de vizualizare
38
Transformarea de "roiectie

Proiectie paralela

gl'rt"o(l, r, $, t, n, f)!

Proiectie perspectiva

gl(rustu&(l, r, $, t, n, f)!

void gluPerspective(fovy, aspect, n, f)!


39
!roiectie "ers"ectiva
-l#rustum0l$ r$ *$ t$ n$ f1

/
z
l
r
*
t
n f
40
!roiectie "ers"ectiva
-lu!ers"ective0fov/$ as"ect$ n$ f1

/
z
/
z
fov/
o*s
n f
as"ect , ' ? 5
'
5
41
!roiectie "aralela
-l2rt5o0l$ r$ *$ t$ n$ f1

/
z
l
r
*
t
n
f
42
!roiectie

(olum de vizualizare

!roiectie "aralela

!roiectie "ers"ectiva

(olum de vizualizare canonic. cu* centrat in


ori-ine$ cu fetele "aralele cu "lanele
sistemului de coordonate.

:'+,+,'

:'+,/+,'

:'+,z+,'
43
Bm"artirea "ers"ectiva

Transformarea din coordonate omo-ene


in coordonate carteziene 0',11

(olumul de vizualizare canonic devine.


cu* cu fetele "aralele cu "lanele
sistemului de coordonate.

:1+,+,1

:1+,/+,1

:1+,z+,1
44
Transformarea in "oarta de afisare

#ata 0:1$:1$:11 ) 01$1$:11 se ma"eaza in


"oarta de afisare

!oarta de afisare.

-l(ie'"ort0"$"/$'$51
poarta de
afisare
&px'p(*
,
)
45
8atrici de transformare

gl#atrix#ode(&od)

3%>82D7%(B7I

3%>!F2J76TB2=

3%>T7KT;F7

void gl)oad%dentity()!

void gl)oad#atrix{fd}(const T*P+ ,&)!

void gl#ult#atrix{fd}(const T*P+ ,&)!


46
Atri*ute de afisare
void glPointSize(-)float di&)!
void gl)ine.idt"(-)float /)!
void gl)ineStipple(-)int factor, -)us"ort sa$lon)!
gl+na$le(-)0)%1+0ST%PP)+)
gl2isa$le(-)0)%1+0ST%PP)+)
void glPolygonStipple(const -)u$yte ,&asca)!
gl+na$le(-)0P')*-'10ST%PP)+)
gl2isa$le(-)0P')*-'10ST%PP)+)
47
Afisarea "oli-oanelor

void glPolygon#ode( -)enu& fata, -)enu& &od )!

fata. 3%>#F2=T$ 3%>4A6L$ 3%>#F2=T>A=D>4A6L

&od. 3%>!2B=T$ 3%>%B=7$ or 3%>#B%%

void gl(ront(ace( -)enu& &od )!


&od. 3%>66I$ 3%>6I

void gl3ull(ace( -)enu& &ode )!

&od. 3%>#F2=T$ 3%>4A6L$ 3%>#F2=T>A=D>4A6L


gl+na$le(-)034))0(53+)!
gl2isa$le(-)034))0(53+)!
48
6ulori
gl+%l%r3f(R, -, 6)!
gl+%l%rf(R, -, 6, 5)!
gl6egin(-)0TR%51-)+S)!
gl3olor7f(1,,)!
gl8ertex7f(x,y,z)!
gl3olor7f(,,1)!
gl8ertex7f(x1,y1,z1)!
gl8ertex7f(x9,y9,z9)!
gl+nd()!
(x(,(,z()
(x1,1,z1) (x0,0,z0)
49
Terminarea desenarii

Terminarea desenarii

gl(lus"()

gl(inis"()
50
!rinci"alele elemente ale unei a"licatii -rafice
0folosind 3%;T1
-
#unctii de initializare ) glut
-
#unctiii de intrare interactive ) glut
-
&"ecificarea unui numar de o*iecte ce vor fi afisate 0definite "rin
varfuri$ linii "oli-oane1 ) opengl
-
Descrierea "ro"rietatilor acestor o*iecte ) opengl
. 6uloare 0"uncte$ linii$ "oli-oane1
. Dimensiune si latime 0"uncte$ linii1
. &a*lon de desenare 0linii$ "oli-oane1
. 8odalitatea de afisare al unui "oli-on
- !rin varfuri
- !rin laturi
- !rin interior. culoare uniforma sau folosind un sa*lon
-
Definirea modului de vizualizare a acestor o*iecte ) opengl
-
Terminarea eecutiei ) glut
51
3%;T 02"en3% ;tilit/ Tool<it 1
-
#erestre
-
evenimente de la mouse$ tastatura$
reafisarea ferestrelor
-
8eniuri
52
&tructura unui "ro-ram 3%;T
void main 0int ar-c$ c5ar 9 ar-vMN1
D
Bnitializare
6reeaza fereastra?ferestre
6reeaza meniu?meniuri
Bnre-istreaza si asociaza functii call*ac<
-lut8ain%oo"01O
G
53
Bnitializare
void lutInit!int "arc# c$ar ""arv%&
void lutInit'ispla()ode!unsined int mod%&
.
3%;T>F34 ? 3%;T>F34A
.
3%;T>&B=3%7 ? 3%;T>D2;4%7
.
3%;T>D7!TP
54
&ter-erea ferestrei

&ter-erea *ufferului de culoare


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

&ter-erea *ufferului de adancime


glClearDepth(0.0 );
glClear(GL_DEPTH_BUFFER_BIT);

sau
glClearColor(0.0, 0.0, 0.0, 0.0);
glClearDepth(0.0 );
glClear(GL_COLOR_BUFFER_BIT
GL_DEPTH_BUFFER_BIT);
55
+rearea ferestrei /lut
void lutInit*indo+Size!int +# int $%
void lutInit*indo+Position!int ,# int (%
int lutCreate*indo+!c$ar" titlu%
56
Ti"uri de evenimente
-
8odificarea ferestrei
-
A"asare *uton mouse
-
De"lasare mouse
-
A"asare?eli*erare tasta
-
Bdle
57
6oada de mesaQe
6oada de mesaQe
Tastatura
8ouse
#ereastra
RS
8ouse>call*ac<01
D
RS
D
Le/"ress>call*ac<01
D
RS
D
'indo'>call*ac<01
D
RS
D
8ain%oo"01
58
glut#ain)oop
re"eta
if eveniment tastatura t5en
a"eleaza functia inre-istrata "entru tastatura
else if eveniment mouse t5en
a"eleaza functia inre-istrata "entru mouse
else if fereastra tre*uie redesenata t5en
a"eleaza functia inre-istrata "entru afisare
SSS
else if nu este nimic de tratat t5en
a"eleaza functia idle inre-istrata
59
-
Afisare
void lut'ispla(-unc!void !"func%!void%%&
-
Fedimensionare fereastra
void lutRes$ape-unc!void !"func%!int +# int $%%&
-
7veimente de la tastatura
void lut.e(/oard-unc!void !"func%!unsined c$ar 0e(#
int ,# int (%% &

%nregistrarea functiilor 3all$ac: ; -)4T
60
-
7venimente de la mouse
.
a"asarea?eli*erearea unui *uton al mouse:ului
void lut)ouse-unc!void !"func%!int /uton# int stare#
int ,# int (%% &
.
de"lasarea mouse:ului avand unul sau mai multe
*utoane a"asate ? fara a avea *utoanele a"asate
void lut)otion-unc!void !"func%!int ,# int (%% &
void lutPassive)otion-unc!void !"func%!int ,# int (%% &
%nregistrarea functiilor 3all$ac: ; -)4T
61
%nregistrarea functiilor 3all$ac: ; -)4T
.
idle . nu exista evenimente pentru a fi
tratate
void lutIdle-unc!void !"func%!void%% &
62
#unctia call*ac< de afisare
-
7ste eecutata ori de cate ori este necesara
reafisarea ferestrei$ de eem"lu.
.
%a "rima desc5idere a ferestrei
.
%a redimensionarea ferestrei
.
6and utilizatorul modifica scena afisata in fereastra
-
Du"a tratarea anumitor evenimente
0mouse?tastatura1 "oate fi necesara reafisarea
ferestrei
glutP%(t,e$i(-l&y();
63
&istemul de coordonate asociat ferestrei 3%;T

x
2ereastra a*licatiei
:
,
Punctul )ata de care
este s*eci)icata *ozitia
mouse-ului
(> " : - )
O
64
7em"lu
void display(void) D

-l6lear 03%>62%2F>4;##7F>4BT1O
-l6olor3f 01S0$ 0S0$ 0S01O
-l4e-in03%>!2%C32=1O
-l(erte3f 0:0S25$ :0S25$ 0S01O
-l(erte3f 00S25$ :0S25$ 0S01O
-l(erte3f 00S25$ 0S25$ 0S01O
-l(erte3f 0:0S25$ 0S25$ 0S01O
-l7nd01O
-l#lus5 01O
G
void init (void) D
-l6lear6olor 00S0$ 0S0$ 0S0$ 0S01O
G
65
7em"lu
int &ain(int argc, c"ar,, argv)
D
-lutBnit0Tar-c$ ar-v1O
-lutBnitDis"la/8ode 03%;T>&B=3%7 E 3%;T>F34A1O
-lutBnitIindo'&ize 0250$ 2501O
-lutBnitIindo'!osition 0100$ 1001O
-lut6reateIindo' 0U!rimul !ro-ramU1O
init01O
-lutDis"la/#unc0dis"la/1O
-lut8ain%oo"01O

return 0O
G

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