Húzd az egeret a rózsaszín felület fölé!
A kód, utána pedig a kommentár:
void setup() {
size(640, 360, P3D);
background(0);
frameRate(10);
}
void draw() {
background(#FF66CC);
lights();
for (int i=0; i <= 32; i++) {
for (int c=0; c < 20; c++) {
int plusz=0;
int forgat=0;
float tav=dist(i,c,int(mouseX/20),int((height-mouseY)/20));
if (tav < 10) {
//plusz=int((11-tav)*4);
forgat=int((11-tav)*3);
}
fill(255);
lemez(i*23,360-plusz,-c*23,forgat);
}
}
}
void lemez (int x,int y,int z, int forgat) {
pushMatrix();
translate(x,y,z);
rotateX(radians(random(forgat)));
rotateY(radians(random(forgat)));
rotateZ(radians(random(forgat)));
scale(10);
beginShape(QUADS);
vertex(-1, 0, -1);
vertex(- 1, 0, 1);
vertex( 1, 0, 1);
vertex(1, 0, - 1);
endShape();
popMatrix();
}
A rajzlapot a harmadik dimenzió felé megnyitni a size parancs harmadik paraméterével tudjuk. Az alapvető rajzoló funkciók ugyanúgy működnek, vagyis minden képkockánál törölhetünk (vagy éppen nem), vonalat húzhatunk, stb.
size
(640, 360,
P3D
);
A három dimenziós testek építése egy kicsivel trükkösebb, mint a két dimenziós rajzolás. A kódban ez mind a lemez() függvényben történik. Először minden testet fel kell építenünk egy pufferben, amit a
pushMatrix
();
paranccsal hozunk létre, majd a |
popMatrix (); |
rajzoljuk ki a tartalmát a "vászonra".
Közvetlenül a puffer létrehozása után kell megmondanunk azt is, hogy hová akarjuk elhelyezni a testet, illetve mennyit szeretnénk forgatni rajta (radiánban kéri!). A kódban ez így néz ki:
translate
(x,y,z);
rotateX ( radians ( random (forgat))); |
rotateY ( radians ( random (forgat))); |
rotateZ ( radians ( random (forgat))); |
Ezek után nem meglepő, hogy az olyan primitív testek, mint a box() vagy a sphere() csak egy paramétert kérnek: a méretüket. Ha magunk szeretnénk építkezni, megtehetjük:
beginShape
(
QUADS
);
vertex (-1, 0, -1); |
vertex (- 1, 0, 1); |
vertex ( 1, 0, 1); |
vertex (1, 0, - 1); |
endShape (); |
Ilyen felületekből akármennyit létrehozhatunk. Fontos megjegyezni, hogy ez egy relatív koordináta-rendszer, vagyis ahhoz, hol fog megjelenni a képernyőn, nincsen semmi köze (ezt a translate csinálja). Annál fontosabb a (0,0,0) pont: e körül tudjuk forgatni a testet.
Ennyivel gyakorlatilag már képesek vagyunk egyszerű három dimenziós világokat készíteni.
További példákért és információért ide érdemes ellátogatni, illetve továbbra is figyelemmel kísérni a Kép és Kód blogot:)
|
Nincsenek megjegyzések:
Megjegyzés küldése