Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

個人的に考える超基本的で必要だと考える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)
スクリーンショット 2018-10-29 13.32.14.png

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

スクリーンショット 2018-10-29 13.36.21.png

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)
スクリーンショット 2018-10-29 13.45.27.png

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)
スクリーンショット 2018-10-29 13.59.54.png

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした