ruby-processingでProcessing->Examples->3D->Imageの写経
写経してみたw;
けど、バグってるorz*1
2次元配列の作成部分でバグっていたw;ので、修正。
case :Zoom when :Explode def setup size 640,360,P3D @img = load_image "eames.jpg" @cellsize = 2 @culumns = @img.width/@cellsize @rows = @img.height/@cellsize end def draw background 0 @culumns.times{|i| @rows.times{|j| x = i*@cellsize + @cellsize/2 y = j*@cellsize + @cellsize/2 loc = x + y*@img.width c = @img.pixels[loc] z = (mouse_x / mouse_y.to_f) * brightness(c) - 20.0 push_matrix translate x+200, y+100, z #fill red(c),green(c),blue(c),204 fill c no_stroke rect_mode CENTER rect 0,0,@cellsize,@cellsize pop_matrix } } end when :Extrusion def setup size 640,360,P3D extrude = load_image "ystone08.jpg" extrude.loadPixels @w = extrude.width @h = extrude.height #@rows = Array.new(@w, Array.new(@h)) #<=バグっているので修正 @rows = Array.new(@w){|i| Array.new(@h)} @h.times{|y| @w.times{|x| @rows[x][y] = (brightness(extrude.get(x,y))).to_i } } @angle = 0.0 end def draw background 0 @angle += 0.005 translate width/2,0,-128 rotate_y @angle translate -@w/2.0,100,-128 @h.times{|y| @w.times{|x| stroke @rows[x][y] point x,y,(-@rows[x][y]) } } end when :Zoom def setup size 640,360,P3D no_fill stroke 255 img = load_image "ystone08.jpg" @w = img.width @h = img.height #@pixels = Array.new(@w, Array.new(@h)) #<=バグっているので修正 @pixels = Array.new(@w){|i| Array.new(@h)} @h.times{|y| @w.times{|x| @pixels[x][y] = img.get(x,y) } } @nmx,@nmy = 0.0,0.0 @res = 5 @sval = 1.0 end def draw background 0 @nmx += ((mouse_x - @nmx)/20) @nmy += ((mouse_y - @nmy)/20) @sval += mouse_pressed? ? 0.005 : -0.01 #constrain(value, min, max) #valueがminとmaxの間に収まるように強制する #[min..value..max] @sval = constrain @sval,1.0,2.5 translate width/2+@nmx*@sval-100, height/2 + @nmy*@sval -200, -50 scale @sval rotate_z PI/9.0 - @sval + 1.0 rotate_x PI/@sval/8.0 - 0.125 rotate_y @sval/8.0 - 0.125 translate -width/2, -height/2, 0 0.step(@h-1, @res){|y| 0.step(@w-1, @res){|x| rr = red @pixels[x][y] gg = green @pixels[x][y] bb = blue @pixels[x][y] tt = rr+gg+bb stroke rr,gg,bb line(x,y,tt/10-20, x,y,tt/10) } } end end
*1:ExtrusionとZoomが同様のバグっぽいので上手く動いてない