function setup() { createCanvas(640,640); frameRate(8); } let field = [ [1,1,1,0,1,0,1,0,1,1,0,0,1], [0,1,0,0,1,0,1,0,1,0,1,0,1], [0,1,0,0,0,1,0,0,1,1,0,0,1], [0,1,0,0,1,0,1,0,1,0,1,0,1], [0,1,0,0,1,0,1,0,1,1,0,0,1], ]; let pixelSize = 6; function draw() { // プログラムを実行してから経過した秒数 let t = millis()/1000; // 投影面上の1点 [l,m] の明るさを0~1の範囲で求める関数 let briFilm = (l,m) => { // 床の平面上の点[x,z]の明るさを求める関数 let briFloor = (x,z) => { let a = floor(x); let b = floor(z); if (a<0 || a>4 || b<0 || b>11) return 0.5; return field[a][b]; } // 床 y=3, 天井 y=-5 との交点 p を求める let p = [3, -5].map(h => [l*h/m, h, h/m]); // 投影面より前方にある交点を採用 p = p.reduce((a,b) => a[2]>b[2] ? a : b); // 交点pの床の模様を、関数の値(計算結果)とする return briFloor(p[0] + mouseX/100, p[2] - mouseY/100); }; // 描画 background(0); noStroke(); let p = pixelSize; for(let y=0; y