Számítógépes Grafika 6. gyakorlat
-
Upload
lee-gregory -
Category
Documents
-
view
23 -
download
1
description
Transcript of Számítógépes Grafika 6. gyakorlat
Számítógépes Grafika6. gyakorlat
Programtervező informatikus (esti)
2009/2010 őszi félév
Információk
Gyakorlati diák: http://people.inf.elte.hu/valasek/bevgraf_esti/
E-mail: [email protected]
Utasítások
• size(w, h, m)– Az m a módot határozza meg:
• JAVA2D: az alap renderelő, pontos és lassú• P2D: Processing saját gyors, de rosszabb minőségű
renderelője• P3D: saját 3D-s renderelő, szintén gyors de pontatlan• OgenGL• PDF: negyedik paraméterben output fájl neve
– A maximális szélesség és magasság az OS által korlátozott
OpenGL
• Nem elég a size-ban harmadik paraméternek megadni
• Importálni kell az OGL-t: import
processing.opengl.*;
Képi koordinátarendszer
Processing 3D
OpenGL
• Az OpenGL jobbsodrású koordinátarendszert használ
• De nem kell ezzel foglalkozni Processing-ből akkor sem, ha az OpenGL renderer-t használjuk
Transzformációk
• translate(x, y, z)• rotateX(a), rotateY(a), rotateZ(a):
– „a” radiánnyi elforgatás adott tengely közül, ha „a”>0 akkor óra járásával ellentétes irányban
– PI: beépített konstans– radians(angle): angle-t szögben értelmezve
átváltja radiánba– degrees(rad): radiánból szögbe váltás
• scale(size), scale(x, y), scale(x, y, z):– Léptékezés
Transzformációk
• rotateX
Transzformációk
• rotateY
Transzformációk
• rotateZ
Transzformációk
• applyMatrix( n00, n01, n02, n03 n04, n05, n06, n07 n08, n09, n10, n11 n12, n13, n14, n15):– Tetszőleges affin transzformáció
Transzformációk
• A fenti transzformációk a koordinátarendszert transzformálják
• Egy transzformáció után következő újabb transzformáció már az új koordinátarendszert módosítja!
Transzformációk
1. Feladat
• Forgassuk a középpont körül ezt a téglalapot, a meglévő kódot nem módosítva már!
void setup(){ size(200, 200, P3D);}
void draw(){ background(140); rect(0, 0, 20, 40);}
Transzformációk
Transzformációk
T1
T2
Tn
...
p
Transzformációk
T1
T2
Tn
...
p
= T1*T2*...*Tn*p
Transzformációk
• pushMatrix():– Elmenti az aktuális koordinátarendszert
• popMatrix():– A legutoljára elmentett koordinátarendszert hívja
vissza
Példafill(0);rect(0, 0, 50, 50);pushMatrix();
translate(20, 20); fill(128);rect(0, 0, 50, 50);
translate(10, 10); fill(255);rect(0, 0, 50, 50);
popMatrix();
translate(10, 10); fill(170);rect(0, 0, 50, 50);
Példafill(0);rect(0, 0, 50, 50);pushMatrix();
translate(20, 20); fill(128);rect(0, 0, 50, 50);
translate(10, 10); fill(255);rect(0, 0, 50, 50);
popMatrix();
translate(10, 10); fill(170);rect(0, 0, 50, 50);
Példafill(0);rect(0, 0, 50, 50);pushMatrix();
translate(20, 20); fill(128);rect(0, 0, 50, 50);
translate(10, 10); fill(255);rect(0, 0, 50, 50);
popMatrix();
translate(10, 10); fill(170);rect(0, 0, 50, 50);
Példafill(0);rect(0, 0, 50, 50);pushMatrix();
translate(20, 20); fill(128);rect(0, 0, 50, 50);
translate(10, 10); fill(255);rect(0, 0, 50, 50);
popMatrix();
translate(10, 10); fill(170);rect(0, 0, 50, 50);
Példafill(0);rect(0, 0, 50, 50);pushMatrix();
translate(20, 20); fill(128);rect(0, 0, 50, 50);
translate(10, 10); fill(255);rect(0, 0, 50, 50);
popMatrix();
fill(170);rect(10, 10, 50, 50);
Transzformációk
• Először közös koordinátarendszerbe helyezzük a színtér alkotóelemeit - ez a világ transzformáció
• Utána az aktuális nézőpontunknak megfelelően tovább transzformálódik a színtér - ez a nézet transzformáció
• Végül pedig létrejön a 3D-s színterünk 2D-s vetülete - ez a vetítési transzformáció
Kamera
center
eye
up
X
Y
Z
Kamera
• camera(eyeX, eyeY, eyeZ, centerX, centerY,
centerZ, upX, upY, upZ):– Két pont és egy vektor segítségével megadhatjuk
Vetítési transzformáció
• perspective(fov, aspect, zNear, zFar)– Perspektív transzformáció beállítása, aspect a
szélesség/magasság arány
Vetítési transzformáció
• ortho(left, right, bottom, top, near, far):– Ortogonális vetítés– left, right: a vágótéglatest bal és jobb síkja– top, bottom: a vágótéglatest felső és alsó síkja– near: a legnagyobb távolság az origótól a nézőig– far: a legnagyobb távolság az origótól a nézőtől el
Beépített alakzatok
• sphere(radius)– Origó középpontú gömb
• box(size), box(w, h, d):– Origó középpontú, size élhosszúságú kocka, vagy
w széles, h magas és d mély téglatest
Példavoid setup(){ size(400, 400, P3D);}
void draw(){ background(140);
box(100);translate(150, 0, 0);box(50);camera( 200, 200, 0,
0, 0, 0, 0, -1, 0 );}
2. Feladat
• Innen tölthetjük le az előbbit: http://people.inf.elte.hu/valasek/bevgraf_esti/06/ForgAlap.zip
• Az egér jobbra-balra mozgatásával járjuk körbe a kockáinkat!
• A fel-le gomb segítségével közelítsünk/távolodjunk az origótól
3. Feladat
• Az „o” billentyű hatására váltsunk át ortogonális vetítésre
• A „p” billentyűvel térjünk vissza perspektívre
Feladat +
• Forogjon a kisebbik kocka a saját tengelyei körül illetve a nagyobbik kocka körül, mindhárom tengely mentén!
• Legyen kisebbik kockából 40, mind különböző pályán mozogjon
• Mindegyik kocka színe változzon folyamatosan, folytonosan
Néhány megjelenítési mód
4. Feladat
• A fenti három móddal történő megjelenítést valósítsuk meg az „1”, „2”, „3” gombokkal történő váltással!
Utasítások
• noFill():– Nem lesz kitöltése a zárt alakzatoknak
• beginShape(), endShape(MODE):– 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”)
Utasítások
5. Feladat
• Csináljunk egy tetraédert háromszöglistával!• Kiindulás:
http://people.inf.elte.hu/valasek/bevgraf_esti/06/TetraederAlap.zip