Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaNorbert Molnár Megváltozta több, mint 10 éve
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
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.