「超入門コード10選!」【Processing-3D】


はじめに

個人的に考える超基本的で必要だと考える3D用のProcessingのコードです。
「超必須コード10選!」【Processing】内の必須コードは省略しています。)

1. size (500, 500, P3D);

3D空間上で、画面の横と縦の大きさをそれぞれ500pxにする。
Reference:size();

2. point(250,250,250);

座標(250,250,250)の位置に点を描く
Reference:point();

3. box(10, 20, 30);

幅10px、高さ20px、奥行き30px(x,y,z軸方向それぞれに10,20,30pxの長さ)の直方体を描く
Reference:box();

4. sphere(100);

半径100pxの球体を描く
Reference:sphere();

5. translate(100,100,100);

x,y,z軸方向それぞれに100ずつ図形を描く基準の位置をずらす
Reference:translate();

6. rotate(PI/4);

π/4(45度)だけ図形を描く基準の向きをずらす。(z軸方向)

  • rotateX(PI/4);:X軸方向にずらす。
  • rotateY(PI/4);:Y軸方向にずらす。
  • rotateZ(PI/4);:Z軸方向にずらす。

ラジアンを実数値で渡す形になるため、もしも度数法で渡したい場合は、radians();を用いるとよい。
例)rotateX(radians(45));

Reference:rotate();

7. camera(eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ);

  • eyeX, eyeY, eyeZ
    カメラの位置の座標を入力。

  • centerX, centerY, centerZ
    画面の中心位置(もしもその時の基準点を中央にしたい場合は、全て0にする)

  • upX, upY, upZ
    カメラの向き(基本的に0.0 / 1.0 / -1.0 のいずれかを入力)

Reference:camera();

8. lights();

基準の位置に基準の向きでライトを照らす
より細かいライトの設定をする場合、次のコードを用いる。

コード 意味
ambientLight(); 周囲光源
directionalLight(); 平行光源
pointLight(); 点光源
spotLight(); スポットライト
noLights(); ライト無し

Reference:lights();

9. オリジナルの図形(Custom 3D Shape)

主に用いるコードは次の三つである。

  • beginShape();
    図形の定義を始める時に書くコード。

  • endShape();
    図形の定義を終える時に書くコード。

  • vertex();
    図形の要素を書くためのコード。

Reference:beginShape();endShape();vertex();

例として、3D空間上に四角形を描くときは次のように描ける。

>>サンプルコード(customShape.pde)

customShape.pde
void setup(){
  //settings
  size(500,500,P3D);  
  translate(250,250,0);
  rotateX(radians(45));
  rotateZ(radians(20));

  // writing custom shape
  beginShape();
  vertex(10, 10, 0);
  vertex(100,  10, 0);  
  vertex(100,  100, 0);
  vertex(10,  100, 0);
  vertex(10, 10, 0);
  endShape();
}

>>出力結果(customShape.pde)

>>説明(customShape.pde)
vertex();で、各座標を順番に辿り、図形を描いている。
出力で立体的な視点になっているのは、基準点の角度をrotateX();rotateZ();で変えているため。

10. ortho();

遠近感のない立体にする。

Reference:ortho();

>>サンプルコード(ortho.pde)

ortho.pde
void setup(){
  //settings
  size(500,500,P3D);
  translate(250,250,0);
  rotateX(radians(45));

  //changing to ortho setting
  ortho();  

  // making the box object
  box(100,100,100);
}

>>出力結果(ortho.pde)

Tips : OPENGLで高速/高精度に描画する

OPENGLとは、高速かつ高精度に3D空間を表現できるためのライブラリである。

やること
- import processing.opengl.*;でライブラリをインポートする
- size(500,500,OPENGL);でP3Dではなく、OPENGLにする

>>サンプルコード(OPENGL.pde)

OPENGL.pde
//importing the library
import processing.opengl.*;

void setup(){
  //settings - sets to OPENGL in size();
  size(500,500,OPENGL);
  translate(250,250,0);
  rotateX(radians(45));

  // making the box object
  box(100,100,100);
}

>>出力結果(OPENGL.pde)