Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
Görbék, felületek
2
Miről lesz szó? Geometriai modellezés alapjai
Bezieer görbék, felületek Evaluátorok, Nurbs felületek Példák
3
Görbék definiálása Megadás képlet segítségével:
Megadott szabályszerűség követése, (analitikus) Megadás kontrollpontok segítségével: Megadott pontokon való áthaladás, (interpolációs) Megadott pontok közelítése (approximációs)
4
Szabadformájú görbék å Polinomok:
A polinomegyütthatóknak (a,b) nincs szemléletes tartalma, ezért a modellezés során használatuk kényelmetlen. ] 1 , [ ) ( Î = å t b y a x n i
5
Interpolációs módszerek
Lineáris interpoláció: a kontrollpontokat egyenesek kötik össze. Három ponton körív, négy ponton pedig harmadfokú görbe vezethető át. Lagrange francia matematikus interpolációs polinomokat alkalmazott. Tegyük fel, hogy a a megadott vezérlőpontok sorozata: r1,r2,r3,… rn. Keressük azt a minimális fokszámú L(t) polinomot, amely t1-nél r1, t2-nél r2, tn-nél rn értéket vesz fel. å - = 1 ] , [ ) ( n i j t b a r
6
å Õ Az egyenletrendszert megoldjuk [ai,bi]-re. Megoldás:
A Lagrange interpoláció hátrányai: A görbe hajlamos az oszcillációra Nem alakítható lokálisan . ) ( ahol , 1 Õ å = - i j n t L r
7
Bézier-approximáció å A görbe nem megy át minden kontrollponton
A kontrollpontok által meghatározott konvex burkon belül marad. A súlyfüggvény B(t) és a görbe C(t): . ) ( , 1 )) i n m P t B C å = - ÷ ø ö ç è æ + Berstein polinom
8
Evaluátorok az OpenGL-ben
)] , ( ) [ )], v u Z Y X S C = C – curve, S – surface, u,v - paraméterek Görbe esetén – glEvalCoord1D() Felület esetén – glEvalCoord2D()
9
void glEvalCoord1{fd}{v}(TYPE u);
void glMap1{fd}(GLenum target, TYPE u1, TYPE u2, GLint stride, GLint order, const TYPE *points); 1 dimenziós evaluátor létrehozása target: beállítja, hogy mit reprezentálnak a kontrollpontok. (a táblázat a következő fólián) u1, u2: az u változó tartománya stride: a kontrollpontok közötti eltolásérték. order: a kontrollpontok száma points: a kontrollpontok tömbje Több evaluátor is használható egyszerre: pl: GL_MAP1_VERTEX_3 és GL_MAP1_COLOR_4 esetén pozíció és szín generálható. De vertex evaluátor egyszerre csak 1 lehet! void glEvalCoord1{fd}{v}(TYPE u); argumentumként megadott u helyen generálja a görbe 1 pontját
10
x,y,z vertex koordináták GL_MAP1_VERTEX_4 x,y,z,w vertex koordináták
paraméter jelentés GL_MAP1_VERTEX_3 x,y,z vertex koordináták GL_MAP1_VERTEX_4 x,y,z,w vertex koordináták GL_MAP1_INDEX color index GL_MAP1_COLOR_4 RGBA GL_MAP1_NORMAL normális koordináták GL_MAP1_TEXTURE_COORD_1 s textúra koordináták GL_MAP1_TEXTURE_COORD_2 s,t textúra koordináták GL_MAP1_TEXTURE_COORD_3 s,t,r textúra koordináták GL_MAP1_TEXTURE_COORD_4 s,t,r,w textúra koordináták
11
Példa bezcurve/bezcurve.cpp
12
Példa Próbáljuk ki GL_POINTS-t a GL_LINE_STRIP helyett.
A kontrollpontokat módosítsuk, és figyeljük meg a változást. Egyenközű koordinátaértékek létrehozása: a display() görbekirajzolást töröljük, majd helyére a következő két sort szúrjuk be: glMapGrid1f(30, 0.0, 1.0); glEvalMesh1(GL_LINE, 0.0, 30.0);
13
Egyenlő felosztás glMapGrid1{fd}(GLint n, TYPE u1, TYPE u2);
glEvalMesh1(GLenum mode, GLint p1, GLint p2); mode: GL_LINE, GL_POINT A hatás ekvivalens a következő kódrészlettel: glBegin(GL_POINTS); // vagy glBegin(GL_LINE_STRIP); for( i = p1; i <= p2; i++) { glEvalCoord(u1 + i * (u2-u1) / n); } glEnd();
14
Kétdimenziós evaluátorok
å = n i m j ij P v B u S ) ( , Pij : a kontrollpontok száma m*n Bi : a Bernstein polinomok, ugyanaz mint 1D esetben Pij reprezentálhat vertexeket, normálisokat, színeket, textúra koordinátákat az 1D esthez hasonlóan. A felületek megadása a következőképpen történik: 1: evaluátorok definiálása: glMap2*() – vel. 2: glEnable() - típus beállítása (vertex, color, textura, stb..) 3: kirajzolás: glEvalCoord2*() –vel, vagy glMapGrid2() és glEvalMesh2() - vel.
15
void glMap2{fd}(GLenum target, TYPE u1, TYPE u2, GLint ustride, GLint uorder, TYPE v1, TYPE v2, GLint vstride, GLint vorder, TYPE *points); target paraméter ugyanaz mint 1D esetben. u1, u2, v1, v2: u,v minimum-maximum lehetséges értékei. ustride, vstride: kiválasz egy részhalmazt a kontrollpontokból. Például: float pontok[100][100][3]; akkor egy 4x4-es részhalmaz beállításához a [20][30]-tól kezdve: ustride=100*3; vstride= 3, point = &pontok[20][30][0]
16
glEvalCoord2{fd}{v}(TYPE u, TYPE v);
GL_MAP2_VERTEX_3, GL_MAP2_VERTEX_4 – esetén a normálvektorokat analitikusan számítja a rendszer. glEnable(GL_AUTO_NORMAL) segítségével a kiszámolt normálisok alkalmazhatóak. glDisable(GL_AUTO_NORMAL) esetén az éppen beállított normálvektor érvényesül.
17
Példa: Bézier-felület
bezsurf.cpp
18
Feladatok Jelenítsük meg a felület kontrollpontjait.
Alkalmazzuk a glEvalMesh2(GL_LINE,…); beállítást. Tegyük automatikusan forgóvá a felületet.
19
Egyenközű koordináta értékek
glMapGrid2{fd}(GLint nu, TYPE u1, TYPE u2, GLint nv, TYPE v1, TPYE v2); glEvalMesh2(GLenum mode, GLint p1, GLint p2, GLint q1, GLint q2); A beállítások ekvivalensek a következő kódrészlettel: (GL_FILL mód esetén): for(i = nu1; i< nu2; i++) { /* GL_FILL mód glBegin(GL_QUAD_STRIP); for( j = nv1; j <= nv2; j++) { glEvalCoord(u1 + i * (u2-u1) / nu, v1+j * (v2-v1) / nv); glEvalCoord(u1 + (i+1) * (u2-u1) / nu, v1+j * (v2-v1) / nv); glEnd(); }
20
Automatikus textúra koordináta generálás
texturesurf.cpp
21
Feladat a textúrát töltsük be fájlból (bmp) a régi forráslisták felhasználásával!
22
Példa editgrid.cpp
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.