Processing サンプルプログラム 5 2015.7.3 立方体の 3D CG W,A,S,D,H,L のキーをそれぞれ押すと画面に描かれた立方体が回転する。 float X, Y, Z; 実数型変数 X,Y,Z を宣言する void setup() { size(400, 400, P3D); noStroke(); } 実行画面のサイズを 400×400、3D モードにする 図形の線を描かないようにする void draw() { background(80); translate(200, 200, -80); rotateX(X); rotateY(Y); rotateZ(Z); scale(100); beginShape(QUADS); fill(255, 0, 0); vertex(-1,-1, 1); vertex(-1, 1, 1); vertex( 1, 1, 1); vertex( 1,-1, 1); fill(0, 255, 0); vertex(-1,-1,-1); vertex(-1, 1,-1); vertex( 1, 1,-1); vertex( 1,-1,-1); fill(0, 0, 255); vertex(-1,-1, 1); vertex( 1,-1, 1); vertex( 1,-1,-1); vertex(-1,-1,-1); fill(255, 255, 0); vertex(-1, 1, 1); vertex( 1, 1, 1); vertex( 1, 1,-1); vertex(-1, 1,-1); fill(255, 0, 255); vertex(-1,-1, 1); vertex(-1, 1, 1); vertex(-1, 1,-1); vertex(-1,-1,-1); fill(0, 255, 255); vertex( 1,-1, 1); vertex( 1, 1, 1); vertex( 1, 1,-1); vertex( 1,-1,-1); endShape(); } void keyPressed() { if(key == 'w') X += if(key == 's') X -= if(key == 'a') Y -= if(key == 'd') Y += if(key == 'h') Z -= if(key == 'l') Z += } 0.05; 0.05; 0.05; 0.05; 0.05; 0.05; 背景を画素値 80 で塗りつぶす 座標(200,200,-80)に原点を移動する x 軸回りに X ラジアン回転する y 軸回りに Y ラジアン回転する z 軸回りに Z ラジアン回転する 80 倍に拡大する 図形の定義開始:プリミティブを四角形に設定する 塗り潰しの色を赤色(R=255,G=0,B=0)にする 4 つの頂点座標を指定して立方体の前面を定義する 塗り潰しの色を緑色(R=0,G=255,B=0)にする 4 つの頂点座標を指定して立方体の背面を定義する 塗り潰しの色を青色(R=0,G=0,B=255)にする 4 つの頂点座標を指定して立方体の上面を定義する 塗り潰しの色を黄色(R=255,G=255,B=0)にする 4 つの頂点座標を指定して立方体の底面を定義する 塗り潰しの色をマゼンダ(R=255,G=0,B=255)にする 4 つの頂点座標を指定して立方体の左面を定義する 塗り潰しの色をシアン(R=0,G=255,B=255)にする 4 つの頂点座標を指定して立方体の右面を定義する 図形の定義終了 W キーが押されたら X に 0.05 を足す S キーが押されたら X から 0.05 を引く A キーが押されたら Y から 0.05 を引く D キーが押されたら Y に 0.05 を足す H キーが押されたら Z から 0.05 を引く L キーが押されたら Z に 0.05 を足す 光源の設定 void setup() { size(400, 400, P3D); noStroke(); } void draw() { background(0); translate(200, 200, 0); ambientLight(120, 120, 120); directionalLight(255, 255, 255, -1, 1, -1); //pointLight(255, 255, 255, 50, -50, 150); fill(0, 180, 0); sphere(120); } 実行画面のサイズを 400×400、3D モードにする 図形の線を描かないようにする 背景を黒色で塗りつぶす 座標(200,200,0)に原点を移動する 環境光(R=120,G=120,B=120)を設定する ① 拡散光(平行光源:方向(-1,1,-1))を設定する ② 拡散光(点光源:座標(50,-50,150))を設定する ①と②はどちらか一方を設定すること 塗り潰しの色を緑色(R=0,G=180,B=0)にする 原点を中心に半径 120 の球を描く 鏡面反射の設定 void setup() { size(400, 400, P3D); noStroke(); } 実行画面のサイズを 400×400、3D モードにする 図形の線を描かないようにする void draw() { background(0); translate(200, 200, 0); ambientLight(120, 120, 120); lightSpecular(255, 255, 255); directionalLight(255, 255, 255, -1, 1, -1); specular(250, 250, 250); shininess(10.0); fill(0, 180, 0); sphere(120); 背景を黒色で塗りつぶす 座標(200,200,0)に原点を移動する 環境光(R=120,G=120,B=120)を設定する 光の鏡面反射の強度(R=255,G=255,B=255)を設定する 拡散光(平行光源:方向(-1,1,-1))を設定する 図形の鏡面反射の強度(R=250,G=250,B=250)を設定する 数値が大きいほど光沢が強くなる 光沢の量の設定する 数値が大きいほど光沢の面積が小さくなる 塗り潰しの色を緑色(R=0,G=180,B=0)にする 原点を中心に半径 120 の球を描く } テクスチャマッピング PImage t1, t2, t3; float X, Y, Z; テクスチャ用の画像オブジェクト t1, t2, t3 を宣言する 実数型変数 X,Y,Z を宣言する void setup() { size(400, 400, P3D); noStroke(); t1 = loadImage("texture1.jpg"); t2 = loadImage("texture2.jpg"); t3 = loadImage("texture3.jpg"); textureMode(NORMAL); } 実行画面のサイズを 400×400、3D モードにする 図形の線を描かないようにする 画像 t1 へ画像ファイル texture1.jpg のデータを読み込む 画像 t2 へ画像ファイル texture2.jpg のデータを読み込む 画像 t3 へ画像ファイル texture3.jpg のデータを読み込む テクスチャマッピングを正規化した座標(0~1)で指定する void draw() { background(0); translate(200, 200, 0); rotateX(X); rotateY(Y); rotateZ(Z); scale(80); 背景を黒色で塗りつぶす 座標(200,200,0)に原点を移動する x 軸回りに X ラジアン回転する y 軸回りに Y ラジアン回転する z 軸回りに Z ラジアン回転する 80 倍に拡大する beginShape(QUADS); texture(t1); vertex(-1,-1, 1, 0, vertex( 1, 1, 1, 1, vertex(-1,-1,-1, 0, vertex( 1, 1,-1, 1, endShape(); beginShape(QUADS); texture(t2); vertex(-1,-1, 1, 0, vertex( 1,-1,-1, 1, vertex(-1, 1, 1, 0, vertex( 1, 1,-1, 1, endShape(); beginShape(QUADS); texture(t3); vertex(-1,-1, 1, 1, vertex(-1, 1,-1, 0, vertex( 1,-1, 1, 0, vertex( 1, 1,-1, 1, endShape(); 0); 1); 1); 0); 1); 0); 0); 1); 0); 1); 0); 1); vertex(-1, 1, 1, vertex( 1,-1, 1, vertex(-1, 1,-1, vertex( 1,-1,-1, vertex( 1,-1, 1, vertex(-1,-1,-1, vertex( 1, 1, 1, vertex(-1, 1,-1, vertex(-1, 1, 1, vertex(-1,-1,-1, vertex( 1, 1, 1, vertex( 1,-1,-1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1); 0); 1); 0); 1); 0); 0); 1); 1); 0); 1); 0); 図形の定義開始:プリミティブを四角形に設定する テクスチャを画像 t1 に設定する 立方体の前面を定義する 立方体の背面を定義する 図形の定義終了 図形の定義開始 テクスチャを画像 t2 に設定する 立方体の上面を定義する 立方体の底面を定義する 図形の定義終了 図形の定義開始 テクスチャを画像 t3 に設定する 立方体の左面を定義する 立方体の右面を定義する 図形の定義終了 } void keyPressed() { (以下は立方体の 3D CG と同じであるため省略)
© Copyright 2024 ExpyDoc