2018年8月11日土曜日

【ピコゲー】Processing P3D の練習 その1

動く床と回るキューブ、
ProcessingのP3Dレンダーの練習作です。
超力技。
(´Д`)

https://youtu.be/JI1YM9MuXVA


float x,z;
static float dx = 4;
static float dz = 4;
static float DEST = -25000;

void setup() {
  size(400, 400, P3D);
  
  textSize(16);
  
  x = width/2;
  z =   -200;
}

void draw() {
  background(0);

  if (keyPressed) {
    if (keyCode == UP) {
      z -= dz;
    }
    if (keyCode == DOWN) {
      z += dz;
    }
    if (keyCode == LEFT) {
      x -= dx;
    }
    if (keyCode == RIGHT) {
      x += dx;
    }
    
    if (key == 'r') {
      x = width/2;
      z = -200;
    }
  }

  pushMatrix();

  camera(x, height/2, 200, width/2, height/2, z, 0, 1, 0);
  // noSmooth();

  // 空間を表現する地表面の線を引く
  stroke(0, 255, 0);
  line(0, height, 100, 0, height, DEST);
  line(width/4, height, 100, width/4, height, DEST);
  line(width/2, height, 100, width/2, height, DEST);
  line(width/4*3, height, 100, width/4*3, height, DEST);
  line(width, height, 100, width, height, DEST);
  for (int cnt=0; cnt>=DEST; cnt-=100) {
    line(0, height, cnt+(frameCount%100), width, height, cnt+(frameCount%100));
  }
  
  // 白Cube
  stroke(200);
  fill(255);
  translate( width/2, height/2, z);
  lights();
  rotateY(radians(frameCount%360));
  box(150, 150, 150);

  // 白Cubeの影(ちゃんとレンダリングしてるわけではない、なんちゃって影)
  noStroke();
  rectMode(CENTER);
  fill(128,128,128,220);
  translate( 0, height/2-1, 0);
  rotateX(PI/2);
  rect(0, 0, 150, 150);

  // 情報表示
  popMatrix();
  text("FRAME RATE(sec/frame): "+frameRate, 0, 16);
  text("x = "+x, 0, 32);
  text("z = "+z, 0, 48);
  //println(frameRate);
}

0 件のコメント: