チュートリアル | (トピック一覧へ戻る) |
画像による線の長さの制御
以下のコードでは、getメソッドで取得された値を用いて、曲面から点をサンプルするときのオフセット量を コントロールし、生成される線の長さを変えています。 コードでは右の画像と下のファイルが用いられます。
![]()
![]()
![]()
![]()
import processing.opengl.*;
import igeo.*;
size(480, 360, IG.GL);
IG.open("surface6.3dm");
ISurface[] surfaces = IG.surfaces();
IImageMap map = new IImageMap("map1.jpg");
for (ISurface surf : surfaces) {
int unum = 50, 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 pt1 = surf.pt( i*uinc, j*vinc );
IVec pt2 = surf.pt( i*uinc, j*vinc, val*-10 );
new ICurve(pt1, pt2).clr(0);
}
}
}
画像によるパネルのオフセット量の制御
以下のコードでは、矩形のパネル化において、矩形の角の一点のオフセット量を画像からの値で
コントロールしています。
![]()
![]()
![]()
![]()
import processing.opengl.*;
import igeo.*;
size(480, 360, IG.GL);
IG.open("surface7.3dm");
ISurface[] surfaces = IG.surfaces();
IImageMap map = new IImageMap("map1.jpg");
for (ISurface surf : surfaces) {
int unum = 20, vnum = 20;
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 pt11 = surf.pt( i*uinc, j*vinc );
IVec pt21 = surf.pt( (i+1)*uinc, j*vinc );
IVec pt12 = surf.pt( i*uinc, (j+1)*vinc, val*-4 );
IVec pt22 = surf.pt( (i+1)*uinc, (j+1)*vinc );
new ISurface(pt11, pt12, pt22, pt21).clr(.3);
}
}
surf.del();
}
画像によるパネルの幅の制御
この例では、パネルの幅が画像値によってコントロールされます。
幅は曲面上の点をサンプルするときの、V座標の位置を移動することで
制御しています。
![]()
![]()
![]()
![]()
import processing.opengl.*;
import igeo.*;
size(480, 360, IG.GL);
IG.open("surface7.3dm");
ISurface[] surfaces = IG.surfaces();
IImageMap map = new IImageMap("map1.jpg");
for (ISurface surf : surfaces) {
int unum = 20, vnum = 20;
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 pt11 = surf.pt( i*uinc, j*vinc );
IVec pt21 = surf.pt( (i+1)*uinc, j*vinc );
IVec pt12 = surf.pt( i*uinc, (j + val)*vinc );
IVec pt22 = surf.pt( (i+1)*uinc, (j + val)*vinc );
new ISurface(pt11, pt12, pt22, pt21).clr(.3);
}
}
surf.del();
}
以下ではU座標の位置を調整しています。
![]()
![]()
![]()
![]()
import processing.opengl.*;
import igeo.*;
size(480, 360, IG.GL);
IG.open("surface7.3dm");
ISurface[] surfaces = IG.surfaces();
IImageMap map = new IImageMap("map1.jpg");
for (ISurface surf : surfaces) {
int unum = 20, vnum = 20;
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 pt11 = surf.pt( i*uinc, j*vinc );
IVec pt21 = surf.pt( (i + val)*uinc, j*vinc );
IVec pt12 = surf.pt( i*uinc, (j + 1)*vinc );
IVec pt22 = surf.pt( (i + val )*uinc, (j + 1)*vinc );
new ISurface(pt11, pt12, pt22, pt21).clr(.3);
}
}
surf.del();
}
画像によるパネルの回転角の制御
ここでは画像値に応じてパネルの回転角を制御しています。
パネルは中心から、法線方向を軸に回転させています。
![]()
![]()
![]()
![]()
import processing.opengl.*;
import igeo.*;
size(480, 360, IG.GL);
IG.open("surface7.3dm");
ISurface[] surfaces = IG.surfaces();
IImageMap map = new IImageMap("map1.jpg");
for (ISurface surf : surfaces) {
int unum = 20, vnum = 20;
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 pt11 = surf.pt( i*uinc, j*vinc );
IVec pt21 = surf.pt( (i + 1)*uinc, j*vinc );
IVec pt12 = surf.pt( i*uinc, (j + (1-val) )*vinc );
IVec pt22 = surf.pt( (i + 1)*uinc, (j + (1-val) )*vinc );
ISurface panel = new ISurface(pt11, pt12, pt22, pt21).clr(.2);
IVec center = surf.pt( (i+0.5)*uinc, (j+0.5)*vinc );
IVec normal = surf.nml( (i+0.5)*uinc, (j+0.5)*vinc );
panel.rot(center, normal, val*PI/4 );
}
}
surf.del();
}
画像によるパネルの拡大・縮小
この例では、画像値に応じてパネルを拡大・縮小しています。
![]()
![]()
![]()
![]()
import processing.opengl.*;
import igeo.*;
size(480, 360, IG.GL);
IG.open("surface7.3dm");
ISurface[] surfaces = IG.surfaces();
IImageMap map = new IImageMap("map1.jpg");
for (ISurface surf : surfaces) {
int unum = 40, vnum = 40;
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 pt11 = surf.pt( i*uinc, j*vinc );
IVec pt21 = surf.pt( (i + 1)*uinc, j*vinc );
IVec pt12 = surf.pt( i*uinc, (j + 1)*vinc );
IVec pt22 = surf.pt( (i + 1)*uinc, (j + 1)*vinc );
ISurface panel = new ISurface(pt11, pt12, pt22, pt21).clr(.2);
IVec center = surf.pt( (i+0.5)*uinc, (j+0.5)*vinc );
// val is inverted by subtraction
panel.scale(center, 1 - val );
}
}
surf.del();
}
画像のピクセルからのパネルの色指定
この例では、IImageMapクラスのgetメソッドでパネルを変形するだけでなく、
clr()メソッドも用いることによって、画像の色をサンプルして、
それをパネルの色に設定しています。
![]()
![]()
![]()
![]()
import processing.opengl.*;
import igeo.*;
size(480, 360, IG.GL);
IG.open("surface7.3dm");
ISurface[] surfaces = IG.surfaces();
IImageMap map = new IImageMap("map2.jpg");
for (ISurface surf : surfaces) {
int unum = 40, vnum = 40;
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 pt11 = surf.pt( i*uinc, j*vinc );
IVec pt21 = surf.pt( (i + 1)*uinc, j*vinc );
IVec pt12 = surf.pt( i*uinc, (j + 1)*vinc, val*-4 );
IVec pt22 = surf.pt( (i + 1)*uinc, (j + 1)*vinc );
ISurface panel = new ISurface(pt11, pt12, pt22, pt21);
panel.clr(map.clr( i*uinc, j*vinc ));
}
}
surf.del();
}
HOME
FOR PROCESSING
DOWNLOAD
DOCUMENTS
TUTORIALS (Java /
Python)
GALLERY
SOURCE CODE(GitHub)
PRIVACY POLICY
ABOUT/CONTACT