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