プログラミングの手癖を超える
float r = 500; void setup() { size(500, 500, P3D); colorMode(HSB, 360, 100, 100, 100); } void draw() { background(0, 0, 0); translate(width/2, height/2, -500); rotateY(frameCount*0.01); rotateZ(PI/8); for (float angle = 0+frameCount; angle < 360+frameCount; angle = angle + 0.5) { float freqA = map(sin((angle + frameCount)*0.0007), -1, 1, 0.5, 1); float freqB = map(tan((angle - frameCount)*0.0005), -1, 1, 0.5, 1); float thetaA = radians(angle); float thetaB = radians(angle+180); float x = cos(thetaA) * r * sin(thetaB/freqA); float y = sin(thetaB) * r * cos(thetaA/freqB); float z = cos(thetaB+thetaA) * r * sin(thetaB/freqA); fill((angle*5)%360, 80, 100); noStroke(); pushMatrix(); translate(x, y, z); rotateX((x+y+z)*0.01); float d = map(sin((x+y+z)*0.005),-1,1,0,50); box(d); popMatrix(); } }
昨日書いたコードを3Dにした。昨日に続いて、完全に頭で考えてはなくて手癖で書いてる。三角関数は描画要素(色、大きさ、幅、動きの速さ、動きの範囲)に対して振幅させられるし、掛け算して合成しても-1〜1の範囲なのでいくらでも複雑にしやすいが、それは15分で書ける範囲のやり方な気がしてきた。クラスベースでもう少し別の形での複雑なものを展開させるやり方を思い出すのも良い気がする。
そういえば、ポリゴンで作れるHE_MESHというライブラリがある。モデリングしたりプリントしたりするのも面白そうだ。チュートリアルがここに最近公開されたみたいだから進めてみるかも。