チュートリアル | (トピック一覧へ戻る) |
パネル化アルゴリズム例その7
この例では、入力曲面上に描いた円を右の画像のグレー値に応じた距離押し出して、パイプ曲面を生成します。
入力曲面は以下のファイルのものを用います。
![]()
![]()
![]()
![]()
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