Documente Academic
Documente Profesional
Documente Cultură
LIBERA - 2
Prof. univ. dr. ing. Florica Moldoveanu
2
SPG – Curbe de forma libera
Curbe Bezier(2)
Modelarea matematica
Forma geometrica vectoriala
p(u) = Σ Pi * Bi,n(u) 0<= u <= 1
0<= i <= n
polinoame de grad n pentru (n+1) puncte Functiile de ponderare pentru curbele Bezier
de control date prin n+1 puncte de control
Polinoamele Bernstein sunt functiile de ponderare (amestec - blending) pentru curbele
Bezier.
Bi,n(u) sunt nenule pe intreg intervalul de definitie (0<= u <= 1)
➢ punctele de pe curba depind de toate punctele de control!
3
SPG – Curbe de forma libera
Curbe Bezier(3)
- Doua curbe Bezier, C1[P0, P1, P2, P3] si C2[Q0, Q1, Q2, Q3] pot fi
compuse dacă este asigurată continuitatea geometrică de ordinul 1 în
punctul de jonctiune:
- Q0 coincide cu P3
- Segmentele P2-P3 si Q0-Q1 sunt colineare
4
SPG – Curbe de forma libera
Curbe Bezier(4)
Avantaje:
- Usor de definit în mod interactiv
-Poligonul de control permite stabilirea formei si pozitiei curbei
-Curba îşi are extremitatile in primul si ultimul varf al poligonului de control
-Tangentele în punctele extreme sunt primul si ultimul segment al poligonului de control
- Curba este complet inchisa in figura convexă definita de
punctele de control (proprietatea de închidere convexă)
-Invarianţa afină: curba obtinuta prin aplicarea unei transformari afine punctelor sale
se poate obtine transformand numai punctele de control si apoi calculand punctele de pe curba.
- Curbele Bezier de grad 2 sunt folosite in proiectarea caracterelor din fontul TrueType.
Dezavantaje:
-Numarul de puncte de control determina gradul polinomului de aproximare
-Functiile de amestec sunt nenule pe intreg intervalul de definitie →fiecare
punct de pe curba depinde de toate punctele de control (control global)
→ nu putem ajusta local forma curbei
5
SPG – Curbe de forma libera
Curbe Bezier(5)
Forma matriciala pentru cubica Bezier:
p(u) = P0*B0,3(u) + P1*B1,3(u) + P2*B2,3(u) + P3*B3,3(u)
6
SPG – Curbe de forma libera
Afisarea unei cubice Bézier
Geometry shader (1)
layout(lines) in; // nu se folosesc intrari
layout(line_strip, max_vertices = 256) out;
uniform int tip_curbag;
7
SPG – Curbe de forma libera
Afisarea unei cubice Bézier
Geometry shader(2)
void main()
{ mat4 ViewProj = Projection*View;
float du = 1.0/float(no_of_generated_points);
switch (tip_curbag){
case 1:
//genereaza puncte de pe curba
for( float u=0; u<1; u+=du)
{ vec3 bez = Bezier(u);
gl_Position = ViewProj * vec4(bez, 1); EmitVertex();
}
vec3 bez = control_p4;
gl_Position = ViewProj * vec4(bez, 1); EmitVertex();
EndPrimitive();
break;
case 11:
// generare poligon control Bezier
……………………………….
8
Afisarea unei curbe cubice Bézier (3)
Functia Update
Shader *shader = shaders["CurveGeneration"];
shader->Use(); //se activeaza cele 3 shadere folosite la generarea curbelor
Mesh* mesh = meshes["curve"];
if (tip_curba == 1)
{ //desenare poligon control
glUniform1i(glGetUniformLocation(shader->program, "tip_curbag"), 11);
RenderMesh(mesh, shader, glm::mat4(1));
// desenare curba
glUniform1i(glGetUniformLocation(shader->program, "tip_curbag"), tip_curba);
RenderMesh(mesh, shader, glm::mat4(1));
} 9
SPG – Curbe de forma libera
Afisarea Hermite si Bézier (3)
Functia Update
11
SPG – Curbe de forma libera
Curbe B-spline(2)
Modelarea matematica
Forma geometrica vectoriala
12
SPG – Curbe de forma libera
Curbe B-spline(3)
13
SPG – Curbe de forma libera
Curbe B-spline(4)
Vectorul uniform al valorilor nodale pentru o curba B-spline de grad (k-1)
deschisa, definita prin n+1 puncte de control:
14
SPG – Curbe de forma libera
Curbe B-spline de grad 2, uniforme, neperiodice
0<= u <1
16
SPG – Curbe de forma libera
Curbe B-spline de grad 2 uniforme periodice
17
SPG – Curbe de forma libera
Curbe B-spline de grad 2 uniforme periodice
18
SPG – Curbe de forma libera
Curbe B-spline uniforme periodice de grad 3
1<=i<=n-3, 0<=u<1
19
SPG – Curbe de forma libera
Curbe B-spline uniforme periodice de grad 3
20
SPG – Curbe de forma libera
Proprietatile curbelor B-spline uniforme periodice
-Curbe inchise
-Inchidere convexa
-Invarianta afina
21
SPG – Curbe de forma libera
Proprietati ale curbelor B-spline uniforme periodice de grad 2
22
SPG – Curbe de forma libera
Afisarea unei curbe B-spline (1)
Geometry shader
layout(lines) in;
layout(line_strip, max_vertices = 256) out;
23
SPG – Curbe de forma libera
Afisarea unei curbe B-spline (2)
Geometry shader
void main()
{ mat4 ViewProj = Projection*View;
float du = 1.0/float(no_of_generated_points);
switch (tip_curbag){
case 3: // curba B-spline de grad 2
for(int i=1; i<=num_control_points-2; i++)
//se genereaza segmentul de curba i
for( float u=0; u<1; u+=du)
{vec3 bspl = Bspline2(u,i); gl_Position = ViewProj * vec4(bspl, 1); EmitVertex();
}
EndPrimitive();
break;
case 4: // curba B-spline de grad 3
for(int i=1; i<num_control_points-3;i++)
//se genereaza segmentul de curba i
for( float u=0; u<1; u+=du)
{vec3 bspl = Bspline3(u,i); gl_Position = ViewProj * vec4(bspl, 1); EmitVertex();
}
EndPrimitive();
break;
}
}
24
SPG – Curbe de forma libera
Exemple de curbe B-spline(1)
Roşu – grad 2; albastru – grad 3
25
SPG – Curbe de forma libera
Exemple de curbe B-spline(2)
26
SPG – Curbe de forma libera
Curbe Nurbs(1): curbe B-spline generalizate
27
SPG – Curbe de forma libera
Curbe Nurbs(2)
Pi - punctele de control
Ni,k(u) – functiile B-spline de grad (k-1)
Vectorul valorilor nodale folosit in definitia functiilor B-spline, to, t1, t2,
…. ,tn, care asociaza variabila u punctelor de control, este neuniform:
diferenta (ti+1 – ti), k+1<=i <= n-1, nu este constanta.
28
SPG – Curbe de forma libera
Curbe Nurbs(3)
29
SPG – Curbe de forma libera
Curbe Nurbs(4)
Ecuatia unei curbe NURBS în coordonate omogene este:
pw(u) = ∑ Ni,k(u)*Ci, umin <= u <= umax, 0<=i<=n
Ci = (xi*wi, yi*wi, zi*wi, wi)
Pe componente:
xw(u) = ∑ Ni,k(u)*xi*wi
yw(u) = ∑ Ni,k(u)*yi*wi
zw(u) = ∑ Ni,k(u)*zi*wi
w(u) = ∑ Ni,k(u)*wi
Conversia din coordonate omogene in coordonate carteziene:
x(u) = xw(u)/w(u)
Ecuatia curbei in coordonate carteziene:
y(u) = yw(u)/w(u)
p(u) = ( ∑ Ni,k(u)*Pi*wi )/(∑ Ni,k(u)*wi)
z(u) = zw(u)/w(u)
umin <= u <= umax, 0<=i<=n
30
Curbe Nurbs(5)
32
SPG – Curbe de forma libera
Curbe Nurbs(4)
- Ofera o forma matematica comuna pentru curbele analitice standard (de ex.
curbe conice) care nu pot fi bine definite prin curbe B-spline şi curbele de
forma libera: proprietate utilă în sistemele CAD/CAM.
33
SPG – Curbe de forma libera
Curbe Nurbs(5)
-Ofera flexibilitate in proiectarea unei game largi de forme → sunt larg utilizate in
sistemele CAD/CAM
- Pot fi evaluate destul de rapid prin algoritmi numerici stabili si exacti
-Sunt invariante fata de transformarile afine
-Sunt invariante fata de transformarea perspectiva
34
SPG – Curbe de forma libera