home processing download documents tutorial python tutorial gallery source about
 チュートリアル (トピック一覧へ戻る)

パネル化アルゴリズム例

     パネル化アルゴリズム例その7

この例では、入力曲面上に描いた円を右の画像のグレー値に応じた距離押し出して、パイプ曲面を生成します。 入力曲面は以下のファイルのものを用います。

surface7.3dm

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();
}


(トピック一覧へ戻る)

HOME
FOR PROCESSING
DOWNLOAD
DOCUMENTS
TUTORIALS (Java / Python)
GALLERY
SOURCE CODE(GitHub)
PRIVACY POLICY
ABOUT/CONTACT