![]() | (トピック一覧へ戻る) |
import processing.opengl.*; import igeo.*; size(480, 360, IG.GL); IG.open("surface7.3dm"); ISurface[] surfaces = IG.surfaces(); IImageMap map = new IImageMap("map4.jpg"); for (ISurface surf : surfaces) { int unum = 100, vnum = 50; double uinc = 1.0/unum, vinc = 1.0/vnum; for (int i=0; i < unum; i++) { for (int j=0; j < vnum; j++) { double val = map.get( i*uinc, j*vinc ); IVec pt = surf.pt( i*uinc, j*vinc ); IVec nml = surf.nml( i*uinc, j*vinc ); ICircle cir = new ICircle(pt, nml, 0.1); IG.extrude(cir, val*-2).clr(0); } } surf.del(); }
次に、円の生成を確率的に制御します。 その確率もまた画像のグレー値で与えられ、画像の白い部分には多くの、黒い部分には少ない 円とパイプが生成されます。
import processing.opengl.*; import igeo.*; size(480, 360, IG.GL); IG.open("surface7.3dm"); ISurface[] surfaces = IG.surfaces(); IImageMap map = new IImageMap("map4.jpg"); for (ISurface surf : surfaces) { int unum = 200, vnum = 100; double uinc = 1.0/unum, vinc = 1.0/vnum; for (int i=0; i < unum; i++) { for (int j=0; j < vnum; j++) { double val = map.get( i*uinc, j*vinc ); if (IRandom.percent(val*100)) { IVec pt = surf.pt( i*uinc, j*vinc ); IVec nml = surf.nml( i*uinc, j*vinc ); ICircle cir = new ICircle(pt, nml, 0.05); IG.extrude(cir, -2*val).clr(0); } } } surf.del(); }