Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Számítógépes Grafika 7. gyakorlat Programtervező informatikus (esti)‏ 2009/2010 őszi félév.

Hasonló előadás


Az előadások a következő témára: "Számítógépes Grafika 7. gyakorlat Programtervező informatikus (esti)‏ 2009/2010 őszi félév."— Előadás másolata:

1 Számítógépes Grafika 7. gyakorlat Programtervező informatikus (esti)‏ 2009/2010 őszi félév

2 Információk Gyakorlati diák: http://people.inf.elte.hu/valasek/bevgraf_esti/ E-mail: valasek@inf.elte.hu

3 Utasítások noFill(): –Nem lesz kitöltése a zárt alakzatoknak beginShape(MODE), endShape([CLOSE]): –Csúcspontokból (vertex) álló összetett alakzatok (shape) megjelenítése –A MODE határozza meg, miként értelmezendőek a beginShape() és endShape() hívások között definiált csúcspontok („összekötési szabály”)

4 Utasítások

5 Koordinátarendszer X Y -Z up = (0, 1, 0)

6 Koordinátarendszer X Y Z up = (0, -1, 0)

7 1. Feladat Csináljunk egy piramist háromszöglistával! Kiindulás: http://people.inf.elte.hu/valasek/bevgraf_e sti/07/PiramisAlap.zip http://people.inf.elte.hu/valasek/bevgraf_e sti/07/PiramisAlap.zip

8 PiramisAlap void setup() { size(400, 400, P3D);} void draw() { background(140); float dx = map(mouseX, 0, width, -PI, PI); camera(200*cos(dx), 200, 200*sin(dx), 0, 0, 0, 0, -1, 0);

9 PiramisAlap // X-tengely stroke(255, 0, 0); line(0, 0, 0, // honnan 50, 0, 0); // hova X Y Z

10 PiramisAlap // X-tengely stroke(255, 0, 0); line(0, 0, 0, // honnan 50, 0, 0); // hova // Y-tengely stroke(0, 255, 0); line(0, 0, 0, // honnan 0, 50, 0); // hova X Y Z X Y Z

11 PiramisAlap // X-tengely stroke(255, 0, 0); line(0, 0, 0, // honnan 50, 0, 0); // hova // Y-tengely stroke(0, 255, 0); line(0, 0, 0, // honnan 0, 50, 0); // hova // Z-tengely stroke(0, 0, 255); line(0, 0, 0, // honnan 0, 0, -50); // hova X Y Z X Y Z X Y Z

12 PiramisAlap noFill(); stroke(0); beginShape(TRIANGLES); vertex(-100, 0, -100); // első háromszög vertex(100, 0, -100); vertex(100, 0, 100); vertex(-100, 0, -100); // második háromszög vertex(100, 0, 100); vertex(-100, 0, 100); endShape(); }

13 Textúrázás Minél részletesebb a modellünk, annál több primitívből kell felépíteni Azonban egy bizonyos szint után már nem ésszerű anyagjellemzők és új csúcspontok bevezetésével növelni a részletességet Inkább 2D-s textúrák térbeli alakzatokra feszítésével próbálunk minél élethűbb képet kapni

14 Textúra A textúra (szövet, mintázat) szó hétköznapi értelemben egy tárgy felületének simaságát vagy durvaságát jellemzi (például fakéreg, fém stb.) Számítógépi grafikában egy 2 dimenziós színes képet nevezünk textúrának, egy pontját pedig texel-nek

15 Textúra koordináták megadása Processingben a vertexeknek nem csak pozíciókat, hanem textúrakoordinátákat is meg kell majd adni: vertex(x, y, z, u, v): –A textúra képünknek az (u,v) koordinátájú pontját „feszítsük rá” az adott csúcspontra

16 Texel leképezés

17 Utasítások texture(PImage): –Beállítja a paraméterben kapott képett textúrának textureMode(MODE): –Miként legyenek értelmezve a textúrakoordináták: IMAGE: a képpixeleknek megfelelően NORMALIZED: [0,1] közé benormálva

18 Normalizált

19 2. Feladat Textúrázzuk a piramisunkat! Segítségül: http://people.inf.elte.hu/valasek/bevgraf_e sti/07/PiramisTexturaAlap.zip http://people.inf.elte.hu/valasek/bevgraf_e sti/07/PiramisTexturaAlap.zip

20 PiramisTexturaAlap PImage img; void setup() { size(400, 400, P3D); img = loadImage( "http://www.fallingpixel.com/products/1347/ mains/brick1.jpg"); textureMode(NORMALIZED); }

21 PiramisTexturaAlap void draw() {...// ugyanaz mint előbb noStroke(); beginShape(TRIANGLES); texture(img); vertex(-100, 0, -100, 0, 0); vertex( 100, 0, -100, 1, 0); vertex( 100, 0, 100, 1, 1); vertex(-100, 0, 100, 0, 1); vertex(-100, 0, -100, 0, 0); vertex( 100, 0, 100, 1, 1); endShape(); }

22 PiramisTexturaAlap void draw() {...// ugyanaz mint előbb noStroke(); beginShape(TRIANGLES); texture(img); vertex(-100, 0, -100, 0, 0); vertex( 100, 0, -100, 1, 0); vertex( 100, 0, 100, 1, 1); vertex(-100, 0, 100, 0, 1); vertex(-100, 0, -100, 0, 0); vertex( 100, 0, 100, 1, 1); endShape(); } X

23 PiramisTexturaAlap void draw() {...// ugyanaz mint előbb noStroke(); beginShape(TRIANGLES); texture(img); vertex(-100, 0, -100, 0, 0); vertex( 100, 0, -100, 1, 0); vertex( 100, 0, 100, 1, 1); vertex(-100, 0, 100, 0, 1); vertex(-100, 0, -100, 0, 0); vertex( 100, 0, 100, 1, 1); endShape(); } Y

24 PiramisTexturaAlap void draw() {...// ugyanaz mint előbb noStroke(); beginShape(TRIANGLES); texture(img); vertex(-100, 0, -100, 0, 0); vertex( 100, 0, -100, 1, 0); vertex( 100, 0, 100, 1, 1); vertex(-100, 0, 100, 0, 1); vertex(-100, 0, -100, 0, 0); vertex( 100, 0, 100, 1, 1); endShape(); } Z

25 PiramisTexturaAlap void draw() {...// ugyanaz mint előbb noStroke(); beginShape(TRIANGLES); texture(img); vertex(-100, 0, -100, 0, 0); vertex( 100, 0, -100, 1, 0); vertex( 100, 0, 100, 1, 1); vertex(-100, 0, 100, 0, 1); vertex(-100, 0, -100, 0, 0); vertex( 100, 0, 100, 1, 1); endShape(); } textúra u

26 PiramisTexturaAlap void draw() {...// ugyanaz mint előbb noStroke(); beginShape(TRIANGLES); texture(img); vertex(-100, 0, -100, 0, 0); vertex( 100, 0, -100, 1, 0); vertex( 100, 0, 100, 1, 1); vertex(-100, 0, 100, 0, 1); vertex(-100, 0, -100, 0, 0); vertex( 100, 0, 100, 1, 1); endShape(); } textúra v

27 Az eredmény Ezt jelenti, hogy a P3D sebességre és nem pontosságra van optimalizálva Kétféleképpen is megoldhatjuk: –Kiadunk egy smooth() parancsot a setup()- ban –OpenGL-ben alapból jól jelenik meg a textúra

28 Megvilágítás A minél élethűbb megjelenítés egyik legfontosabb kérdése A fény viselkedésének minél élethűbb szimulálása Rendkívül számításigényes - több egyszerűsített modell van

29 Előre renderelt/valós idejű

30 Megvilágítás  A végső pixelszín függ:  Az objektum anyagától (material) és textúrájától az adott pontban  A fényforrások által kibocsátott fény intenzitásától és színétől

31 Anyagjellemzők Meghatározzák, hogy az adott felület miként veri vissza, vagy bocsájt ki fényt A különböző típusú megvilágítási formákkal szemben más és más módon viselkedhet Azt, hogy mely anyag-fény jellemzőket (és egyúttal megvilágítási modellt) vegyük figyelmbe szintén a device-nál kell beállítani SetRenderState-el

32 Ambiens modell Szórt megvilágítás egyszerűsített modellje Egyfajta állandó háttérmegvilágítás A fényforrás és az anyag színére van szükség: –ambientLight(v1, v2, v3) : A v1, v2, v3 a fény színkomponensei –ambient(v1, v2, v3): Az anyag viselkedését írja le szórt megvilágítással szemben

33 Diffúz modell Érdes felületre beeső fény vizsgálata Minél inkább eltér a fény beesési szöge a felületi normálistól, annál kisebb a fény hatása a végső szín meghatározásában

34 Diffúz modell Megadásához egyrészt szükség van a színekre: –A különböző fényforrások létrehozásakor a paraméterekben megadott szín a diffúz érték lesz –Alakzatok rajzolásakor pedig a fill() paraméterében szereplő érték lesz az anyag színe

35 Fényfoltképző „Csillanás” A nézőpont minél közelebb van az ideális visszaverődés szögéhez annál inkább csillan A szín beállítása: –lightSpecular(v1, v2, v3) megadja a fényforrás fényfoltképző színét –specular(v1, v2, v3[, alpha]) az anyag színét Hatás módosítása: –shininess(float): mennyire csillogjon

36 Felületi normális Az ambiens modellen kívül szükség van a felületi normálisra is A primitívek (háromszögek) csúcspontjai segítségével vektoriális szorzatokként kiszámolhatóak

37 Ambiens fényforrás ambientLight(v1, v2, v3, x, y, z): –Szín, pozíció (ne legyen végtelen hatás) size(100, 100, P3D); background(0); noStroke(); directionalLight(126, 126, 126, 0, 0, -1); ambientLight(102, 102, 102); translate(32, 50, 0); rotateY(PI/5); box(40); translate(60, 0, 0); sphere(30);

38 Pontszerű fényforrás pointLight(v1, v2, v3, x, y, z) –(v1, v2, v3) színű, (x, y, z) koordinátájú fényforrás –Minden irányban egyenlő intenzitással bocsájt ki fényt size(100, 100, P3D); background(0); noStroke(); pointLight(51, 102, 126, 35, 40, 36); translate(80, 50, 0); sphere(30);

39 Irányított fényforrás directionalLight(v1, v2, v3, nx, ny, nz): –(nx, ny, nz) a fénycsóvák közös iránya –„végtelen távoli fényforrás” size(100, 100, P3D); background(0); noStroke(); directionalLight(51, 102, 126, 0, -1, 0); translate(80, 50, 0); sphere(30);

40 Fényfoltképző fényforrás spotLight(v1, v2, v3, x, y, z, nx, ny, nz, angle, concentration) size(100, 100, P3D); background(0); noStroke(); spotLight(51, 102, 126, 80, 20, 40, -1, 0, 0, PI/2, 2); translate(20, 50, 0); sphere(30);

41 Fénykezelés lights(): –Bekapcsolja a megvilágítási modelleket, feltölti a szükséges paramétereket alapértelmezett értékekkel noLights(): –Kikapcsolja azokat

42 Színek Amikor három komponenssel adunk meg színeket kétféle értelmezés van: –RGB –HSB Választás: –colorMode(mode, range1, range2, range3, range4) mode: RGB vagy HSB rangei: a megfelelő komponens intervalluma (4=a)

43 Feladat + Legyen három piramis a színtéren téglákkal textúrázva Álljanak egy nagy, közös, homok textúrájú talapzaton Az egyes piramis csillogjon különböző színnel (piros, zöld, kék) A talaj ne csillogjon Egérrel lehessen körbeforogni a színtéren


Letölteni ppt "Számítógépes Grafika 7. gyakorlat Programtervező informatikus (esti)‏ 2009/2010 őszi félév."

Hasonló előadás


Google Hirdetések