Tutorials | (back to the list of tutorials) |
The input bitmap used in the example is this.
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(); }
Then the generation of circles and surfaces are also controlled by a probabilistic switch responding to the bitmap input.
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(); }