1 Viewing Megtekintés. 2 Miről lesz szó? ► Modellek megtekintése különböző, vagy tetszőleges irányokból ► Nézőpont áthelyezése a háromdimenziós térben.

Slides:



Advertisements
Hasonló előadás
Egyszerű LL grammatika.  Definíciók  Példa. Ábrákkal  MASM program (szó felismerése LL(1) –ben )
Advertisements

Mellár János 3. óra Szeptember 16. v
Koordináta transzformációk
Koordináta transzformációk
Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke A programozás alapjai 1. (VIEEA100) 9. előadás.
2D grafikus rendszerek Szirmay-Kalos László. 2D grafikus editor: GUI, use-case, dinamikus modell L L L R LD LU MouseLDown első pont MouseLDown második...
Inkrementális 3D képszintézis
2D grafikus rendszerek Szirmay-Kalos László.
Animáció Szirmay-Kalos László. Animáció = időfüggés T1(t)T1(t) T2(t)T2(t) TV(t)TV(t) Transzformációk alak szín megjelenítési attribútumok, stb.
OpenGL Szirmay-Kalos László In theory, there is no difference
Számítógépes grafika Szirmay-Kalos László
GPGPU labor I. OpenGL, Cg.
Számítógépes Grafika 6. gyakorlat Programtervező informatikus (esti)‏ 2009/2010 őszi félév.
Borland C/C++ mintapéldák függvényekre. 1. példa Írjunk olyan függvényt amely egy számot kiirat.
Grafika a programban Készítette: Pető László. Bevezetés Valójában nem a célobjektumra rajzolunk, hanem annak festővászon területére (canvas). Csak olyan.
Transzformációk kucg.korea.ac.kr.
1. Akciógombok elhelyezése
Számítógépes grafika, PPKE-ITK, Benedek Csaba, D képszintézis 4. előadás.
Grafikus szoftver alrendszer, OpenGL alapok
2. előadás GÉPRAJZ, GÉPELEMEK I..
A MŰSZAKI KÉPALKOTÁS.
Számítógépes grafika OpenGL 1. gyakorlat.
3. Vetületi ábrázolások számítási eljárásai
,,Én így tanítanám az informatikát”
A GIMP képszerkesztő program bemutatása Készítette: Rokonál Zoltán
2D képszintézis és textúrák
További vektor, mátrix algoritmusok
Számítógépes Grafika 2. gyakorlat Programtervező informatikus (esti) 2011/2012 őszi félév.
Számítógépes grafika 3. gyakorlat.
3.3. Axonometrikus ábrázolások Rövid áttekintés
3. Vetületi ábrázolások számítási eljárásai
2008/2009 tavasz Klár Gergely  Gyakorlatok időpontjai: ◦ Szerda 10:05–11:35 ◦ Csütörtök 10:00+ε –11:30+ε  Gyakvez: ◦ Klár Gergely ◦
Grafikus tervezőrendszerek programozása 11. előadás.
Prezentáció a prezentációról
1 AAO folytatás ++ Csink László. 2 Rekurzív bináris keresés (rendezett tömbben) public static int binker(int[] tomb, int value, int low, int high) public.
Vektorok különbsége e-x = [ex-xx ey-xy ez-xz] e e-x x szempozíció
Számítógépes grafika Bevezetés
Kezdeti teendők Letöltés: CharacterModellingBase.zip Blender3D futtatása headBase.blend betöltése.
2D grafikus rendszerek Szirmay-Kalos László.
Hyper Text Markup Language
Honlap készítés 4. óra.
3. Vetületi ábrázolások számítási eljárásai
Pipeline Vertex shader Fragment shader. Transzformációs modul A modellünket a saját koordinátarendszerében adjuk meg Azonban a saját koordinátarendszerükben.
Web-grafika II (SVG) 3. gyakorlat Kereszty Gábor.
Geometriai transzformációk
2.2. Az egyenes és a sík egyenlete
2. Koordináta-rendszerek és transzformációk
2. gyakorlat DirectX 2007/2008 tavasz Klár Gergely
Számítógépes Grafika 6. gyakorlat Programtervező informatikus (esti)‏ 2009/2010 őszi félév.
Számítógépes grafika I. AUTOCAD alapok 2. előadás.
Geometriai transzformációk
A MŰSZAKI KÉPALKOTÁS.
Függvények, mutatók Csernoch Mária. Függvények függvény definíciója az értelmezési tartomány tetszőleges eleméhez hozzárendel egy értéket –függvény helyettesítési.
Grafikus szoftver Szirmay-Kalos László. Interaktív programok felépítése input csővezeték output csővezeték.
3.2. Axonometria – Műszaki rajzok párhuzamos vetítéssel
1 OpenGL grafikus rendszer Dr. Nehéz Károly egyetemi adjunktus Miskolci Egyetem Alkalmazott Informatikai Tanszék.
Objektumok a Word-ben. OBJEKTUMOK Objektum fogalma Objektumok létrehozása Az objektumok tulajdonságai Az objektum elhelyezkedése Objektumok formázása.
Framebuffer.
Grafikus Rendszerek 6. Camera.
OpenGL megjelenítési listák
Neumann János Informatikai Kar
Görbék, felületek.
GPGPU – CUDA 2..
JavaScript a böngészőben
Táblázatok A táblázat megadása a tag használatával lehetséges. A és tageken belül: a és tagek között adhatjuk meg a.
Ültetési rend létrehozása
Bevezetés Tematika Számonkérés Irodalom
JavaScript a böngészőben
Konverziós operátorok
Tárgyak műszaki ábrázolása Merőleges vetítés
Előadás másolata:

1 Viewing Megtekintés

2 Miről lesz szó? ► Modellek megtekintése különböző, vagy tetszőleges irányokból ► Nézőpont áthelyezése a háromdimenziós térben ► Vágósíkok elhelyezése a modelltérben ► Mátrixvermek manipulációja ► Példák: ► Tutorial ► Robotkar mozgás modellezés ► Vágósíkok

3 Kamera analógia ► A grafikus rendszerek képalkotási lépései hasonlóak a valódi fényképkészítéssel:  Nézet transzformáció (a fényképezőgép elhelyezése a térben) (viewing transformation)  a modell belehelyezése a nézet térfogatba (modelling transformation)  a lencse kiválasztása (nagyítás, vetítés transzformáció) (projection transformation)  a fénykép méretének beállítása (viewport transformation)

4 Képalkotás lépései

5 Vertex transzformáció Mátrix szorzás: (ismétlés) Eltolás megvalósítása mátrix- vektor szorzással:

6 Példa: téglatest rajzolás a térben #include void display(void) { glClearColor (0.0, 0.0, 0.0, 0.0); glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glLoadIdentity (); // egységmátrix // // model transformation // glTranslatef(0.0, 0.0, -5.0); glScalef (1.0, 2.0, 1.0); glRotatef(30.0f, 0.0f,1.0f,0.0f); glutWireCube (1.0); glFlush (); } void reshape (int w, int h) { glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity (); glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0); glMatrixMode (GL_MODELVIEW); }

7 Példa: téglatest rajzolás a térben (folytatás) int main() { glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize (500, 500); glutCreateWindow ("Teglatest Rajzolasa"); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMainLoop(); return 0; }

8 A bemutatott példa magyarázata Nézet transzformáció (viewing transformation) A bemutatott példa magyarázata Nézet transzformáció (viewing transformation) ► A fényképezőgép elhelyezése a térben.  egységmátrix betöltése, glLoadIdentity();  a fényképező eltolása -5-el z irányba glTranslatef(x, y, z); ► A modell manipulálása a térben  skálázás: glScalef (x,y,z);  elforgatás: glRotatef(szog, x, y, z);

9 ► glMatrixMode() – a mátrixmód kiválasztása ► GL_MODELVIEW, GL_PROJECTION, GL_TEXTURE ► glLoadIdentity() – egységmátrix betöltése az aktuális mátrixba ► glViewport() – azt a téglalapot definiálja, ahol az eredmény megjelenik. A viewport megváltoztatásával a kép torzítható. A bemutatott példa magyarázata: (folyt)

10 Leképzés (projektion) transzformáció ► Analóg a fényképező lencse megválasztásával:  a transzformáció meghatározza a leképzési térfogat méretét (viewing volume), meghatározza, hogy mely objektumok fognak látszani, melyek nem. (melyek esnek a térfogaton belülre) ► Az OpenGL kétféle vetítési módot támogat:  Perspektivikus vetítés: ► a valóságos látáshoz hasonló. ► a távolabbi élek rövidülnek. ► glFrustum()  Ortogonális vetítés ► A távoli élek nem rövidülnek ► Mérnöki háromdimenziós vetületek (CAD rendszerek, műszaki rajzok) ► glOrtho();

11 OpenGL mátrixok A lekérdezett (4x4) – es mátrixot érdemes m[16] 16 elemű tömbként kezelni, mivel m[4][4] esetén a sorok és oszlopok felcserélődnek és hibák forrása lehet. ► glLoadMatrix{fd}(const TYPE *m) – mátrix betöltés ► glMultMatrix{fd}(const TYPE *m) – mátrix szorzás

12 Transzformációs mátrixok

13 Transzformációs mátrixok

14 Transzformációs mátrix GLfloat m[16] = {1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 2.0, 3.0, 1.0}; glMultMatrixf(m); Megfelel egy eltolásnak: ► glTranslatef(1.0, 2.0, 3.0);

15 Transzformációk sorrendje glRotate() – glTranslate()glTranslate() – glRotate() Lényeges különbség van az elforgatás majd eltolás vagy az eltolás és azután elforgatás között.

16 Transzformációk sorrendje glMatrixMode(GL_MODELVIEW);glLoadIdentity();glMultmatrix(N);glMultmatrix(M);glMultmatrix(L);glBegin(G_TRIANGLES);glVertex3f(….);glEnd(); ► A modell mátrix I, N, NM, NML értékeket fogja tartalmazni, tehát a transzformációk fordított sorrendben lesznek! ► A transzformációk sorozata vizsgálható egy globális koordináta rendszerből vagy a modellhez kötött lokális koordináta rendszerrel.

17 Példa: forgatás, eltolás, skálázás

18 void kirajzol(void) { glClearColor(0.0f,0.0f,0.0f,0.0f);// fekete szín glClear(GL_COLOR_BUFFER_BIT);// képernyőtörlés glLoadIdentity();// simán kirajzol glColor3f(1.0, 1.0, 1.0); rajzolharomszog();// // eltolás //glEnable(GL_LINE_STIPPLE); glLineStipple(1, 0xF0F0); glTranslatef(-1,0,0);rajzolharomszog();// // skálázás //glEnable(GL_LINE_STIPPLE); glLineStipple(1, 0xF00F); glLoadIdentity();glScalef(1.5,0.5,1.0);rajzolharomszog();// // elforgatás //glEnable(GL_LINE_STIPPLE); glLineStipple(1, 0x8888); glLoadIdentity(); glRotatef(90.0, 0.0, 0.0, 1.0); rajzolharomszog(); glDisable(GL_LINE_STIPPLE);// kikapcsoljuk, de miért ha úgyis vége a rajzolásnak???? (pedig szükség van rá) glFlush();// rajzold ki (de) azonnal! }

19 Nézőpont transzformációk ► Nézőpont transzformáció glTranslate és glRotate segítségével ► Nézőpont transzformáció a glu beépített függvényekkel. gluLookAt(), gluPerspective() ► Saját nézőpont transzformációs függvények létrehozása ► Fontos: a képzeletbeli kamera alapértelmezett pozíciója a 0,0,0 és az iránya a –z irány!

20 Perspektivikus leképzés 1 near far w h aspect = w/h 

21 Perspektivikus leképzés 2 near far top left bottom right

22 Perspektivikus leképzés 1. glFrustum(left, right, bottom, top, near, far); Mátrix létrehozása a nézeti csonka gúla méreteinek megadásával majd szorzás az aktuális mátrixal. 2. gluPerspective(omega, aspect, near, far); Mátrix létrehozása a nézeti csonka gúla méreteinek szimmetrikus megadásával majd szorzás az aktuális mátrixal.

23 GluLookAt ► gluLookAt(eye, center, up); void gluLookAt(double eyex, double eyey, double eyez, double centerx, double centery, double centerz, double upx, double upy, double upz);

24 Orthographic projektion (merőleges leképzés) near right bottom far left top viewpoint

25 Merőleges leképzés ► glOrtho(left, right, bottom, top, near, far); merőleges leképzés mátrixának létrehozása és a megszorzása az aktuális mátrixal. ► Minden mérnöki tervezőrendszer használja, pl. CAD/CAM rendszerek.

26 Viewport transformation ► Viewport az a téglalap alakú tartomány, ahová a kép kirajzolódik. Méretének mértékegysége: ablak koordináták (window koordinates) vagy pixelek. ► aspect ratio: a téglalap szélessége osztva a magasságával (w/h).

27 Viewport transformation ► glViewport(x, y, width, height);  x,y a viewport bal alsó kezdőpozíciója – width és height a szélessége és a magassága (pixelekben mérve)

28 Viewpont manipulációs példa 1.

29 Nézőpont transzformációs példa 2.

30 Speciális (nézőpont) transzformációk void pilotview( double planex, double planey, double planez, double roll, double pitch, double heading) { glRotated(roll, 0.0, 0.0, 1.0); glRotated(pitch, 0.0, 1.0, 0.0); glRotated(heading, 1.0, 0.0, 0.0); glTranslated(-planex, -planey, -planez); }

31 Speciális (nézőpont) transzformációk void polarview( double distance, double twist, double elevation, double azimuth) { glTranslated(0.0, 0.0, -distance); glRotated(-twist, 0.0, 0.0, 1.0); glRotated(-elevation, 1.0, 0.0, 0.0); glRotated(azimuth, 0.0, 0.0, 1.0); }

32 Vertex transzformáció fázisai ( összefoglalás)

33 Objektum koordináta –> Ablak koordináta transzformáció „egy lépésben” ► int gluProject ( GLdouble objx, GLdouble objy, GLdouble objz, const GLdouble modelMatrix[16], const GLdouble projMatrix[16], const GLint viewport[4], GLdouble * winx, GLdouble * winy, GLdouble * winz ); ► Paraméterek: objx, objy, objz objektum koordináták modelMatrix aktuális modelview mátrix (glGetDoublev()). projMatrix aktuális projection mátrix (glGetDoublev()). viewport aktuális viewport (glGetDoublev()). winx, winy, winz A kiszámított ablak koordináták.

34 Ablak koordináta –> Objektum koordináta transzformáció „egy lépésben” int gluUnProject ( GLdouble winx, GLdouble winy, GLdouble winz, const GLdouble modelMatrix[16], const GLdouble projMatrix[16], const GLint viewport[4], GLdouble *objx, GLdouble *objy, GLdouble *objz ); Parameters: winx, winy, winz The window coordinates to be mapped. modelMatrix The modelview matrix (glGetDoublev(). projMatrix The projection matrix (glGetDoublev(). viewport The viewport (glGetDoublev(). objx, objy, objz The computed object coordinates.

35 Példa: száguldás gömbök között

36 Példa: száguldás gömbök között ► 1000 db gömb – glutWireSphere( radius, s1, s2) ► Billentyűkezelő beállítása a main()-ban: glutKeyboardFunc(keyboard); ► A dupla-bufferelés (double-buffering) alkalmazása void keyboard(unsigned char key, int x, int y) { switch (key) { case 'w': fHajoZ += 10.0f; break; case 's': fHajoZ -= 10.0f; break; } glutPostRedisplay();// újrarajzolás üzenet küldése }

37 Példa: száguldás gömbök között void display(void) { glClearColor (0.0, 0.0, 0.0, 0.0); glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glLoadIdentity (); // egységmátrix // // nézőpont transzformáció viewing transformation // glTranslatef(-150.0,-150.0, fHajoZ); // // model transzformacio // for(int i = 0; i < GOMBOKSZAMA; i++ ) { glTranslatef(posx, posy, posz); glutWireSphere(2.0, 10.0, 10.0); glTranslatef(-posx, -posy, -posz); }

38 Mátrix verem (stack) Maximális veremméret lekérdezése: glIntegerv(): GL_MAX_MODELVIEW_STACK_DEPTH GL_MAX_PROJECTION_STACK_DEPTH

39 Mátrix verem (stack) ► Manipulációs függvények: (FIFO)  glPushMatrix(); aktuális mátrix tárolása a veremben, az aktuális mátrixot a glMatrixMode() határozza meg  glPopMatrix(); mátrix kivétele a veremből, a tárolt mátrixok száma egyel csökken

40 Projekciós verem alkalmazása ► Help szöveg kiíratása a síkban: (a 3d-s leképzés megtartása mellett) glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glOrtho(); help_kiiratása(); glPopMatrix();

41 Rövid példa a vermek használatára void display(void) { glClearColor (0.0, 0.0, 0.0, 0.0); glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glLoadIdentity (); // egységmátrix // // nézőpont transzformáció viewing transformation // gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); // // modeling transformation // glColor3f(1.0, 0.0, 1.0); glutWireCube (1.0); glPushMatrix(); glTranslatef(1.5, 0.0, 0.0); glColor3f(1.0,0.0,0.0); glutWireCube (1.0); glPopMatrix(); glRotatef(45, 0, 0, 1); glColor3f(0, 1.0,0); glutWireCube (1.0); glFlush (); } Feladat: töröljük ki a push és popmatrix hívásokat és magyarázzuk meg mi történik!

42 Robotkar példa a vermek használatára glPushMatrix();// mátrix mentés glTranslatef(-1.0, -0.5, 0.0);// 1-es pont glRotatef(45, 0.0, 0.0, 1.0);// 1-es körül elforgatás glTranslatef(1.0,0.0,0.0);// 2-es pont glPushMatrix();// mátrix mentés (kar 1 rendszer) glScalef(2.0, 0.4, 1.0);// skálázás glutWireCube (1.0);// rajzolás glPopMatrix();// vissza a 2. ponthoz glTranslatef(1.0, 0.0, 0.0);// 3. ponthoz glRotatef(20, 0.0, 0.0, 1.0);// 3. pont körü forgat glTranslatef(1.0, 0.0, 0.0);// 4. ponthoz glPushMatrix();// mátrix mentés (kar 2 rendszer) glScalef(2.0, 0.4, 1.0);// skálázás glutWireCube (1.0);// rajzolás glPopMatrix();// vissza a kar 1 rendszerbe glPopMatrix();// vissza a globálisba

43 Vágósíkok ► 6 vágósík adható meg: Ax+By+Cz+D = 0, alakban.

44 Vágósíkok ► glClipPlane(GLenum plane, const GLdouble *equation);  plane: GL_CLIP_PLANEi, ahol i = 0…5, a vágósík száma  equation: a síkot reprzentáló egyenlet együtthatóit tartalmazó vektor A vágósíkok bekapcsolása: glEnable(GL_CLIP_PLANEi)kikapcsolása:glDisable(GL_CLIP_PLANEi);

45 Vágósíkok void display() { GLdouble egy1[4] = {0.0, 1.0, 0.0, 0.0}; GLdouble egy2[4] = {-1.0, 0.0, 0.0, 0.0}; glClearColor(0.2, 0.2, 0.2, 0.0); glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 1.0, 1.0); glPushMatrix(); glTranslatef(0.0, 0.0, -5.0); glClipPlane(GL_CLIP_PLANE0, egy1); glEnable(GL_CLIP_PLANE0); glClipPlane (GL_CLIP_PLANE1, egy2); glEnable(GL_CLIP_PLANE1); glutWireSphere(2.0, 40, 40); glPopMatrix(); glFlush(); }