Documente Academic
Documente Profesional
Documente Cultură
Curs
Curs
Transformarea de vizualizare 3D
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
!roiectia "es"ectiva
0+,+,1
0+,/+,1
0+,z+,1
0vmin+,+,vma
/vmin+,/+,/vma
zvmin+,z+,zvma1
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
plan spate
plan fata
=
0
d
1
0 0
0 1 0 0
0 0 1 0
0 0 0 1
a *ers*ectiv
P
=
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%
Desenare o*iecte
Transformarea de vizualizare
6ulori$ iluminare
8a"area teturilor
%ucrul cu ima-ini
23
2"en3%
4i*lioteca 2"en3%
gl901 : gl.h
4i*lioteci su"limentare
!uncte
%inii
!oli-oane
27
Ti"uri de "rimitive
3%>!2B=T& 3%>!2%C32=
3%>%B=7
3%>TFBA=3%7
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
Bm"artire "ers"ectiva
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
2*s0o$o/$oz1:"ozitia o*servatorului
/
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)!
/
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
:'+,+,'
:'+,/+,'
:'+,z+,'
43
Bm"artirea "ers"ectiva
:1+,+,1
:1+,/+,1
:1+,z+,1
44
Transformarea 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()!
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
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