モデリング

3次元図形を作っていきます.

beginShape,endShape関数

3D空間は前回の続きで,以下のように設定します.

changecam.png
void setup()
{
  size(640, 480, P3D);
}

void draw()
{
  background(127, 127, 127);
  camera(100, -100, 100, 0, 0, 0, 0, 1, 0);
  stroke(255, 0, 0);
  line(0, 0, 0, 100, 0, 0);
  stroke(0, 255, 0);
  line(0, 0, 0, 0, 100, 0);
  stroke(0, 0, 255);
  line(0, 0, 0, 0, 0, 100);
}

Processingでは図形を作成する方法として,以下のような方法があります.

 beginShape();
 vertex(0, 0, 0);
 vertex(0, -50, 0);
 vertex(50, -50, 0);
 vertex(50, 0, 0);
 endShape(CLOSE);

beginShape関数で,図形の作成の開始を宣言します.vertex関数で図形の頂点を作成し,すべての頂点を作成し終えたらendShape関数で図形の作成の終了を宣言します.endShape関数の引数CLOSEは,最初の頂点と最後の頂点を自動的につなげて図形を閉じるよう指示します.

verticies.png

2次元の図形と同じように,図形の輪郭線の色はstroke関数で,内部を塗りつぶす色はfill関数で変更できます.

PShapeクラス(*Ver.2.0以上)

図形を作成するもう一つの方法としてPShapeクラスを用いる方法があります.

PShape s;

void setup()
{
  ...
  s = createShape();
  s.beginShape();
  s.vertex(0, 0, 0);
  s.vertex(0, -50, 0);
  s.vertex(50, -50, 0);
  s.vertex(50, 0, 0);
  s.endShape(CLOSE);
}

void draw()
{
  ...
  shape(s);
}

色を除けばbeginShape,endShape関数と同じ実行結果が得られます.

PShapeクラスのインスタンスをcreateShape関数で生成し,メソッドbeginShapeで図形の頂点の作成を開始,vertexメソッドで頂点を作成,endShapeメソッドで頂点の作成を終了します.使い方は先ほどのbeginShape,endShape関数とほぼ同じであることがわかります.

描画する際は,shape関数にPShapeクラスのインスタンスを引数に指定します.

また色を変更したい場合はfillメソッド,strokeメソッドを使用します.

 s = createShape();
 s.beginShape();
 s.stroke(0, 255, 0);
 s.fill(0, 255, 255);
 s.vertex(0, 0, 0);
 s.vertex(0, -50, 0);
 s.vertex(50, -50, 0);
 s.vertex(50, 0, 0);
 s.endShape(CLOSE);

beginShape,endShape関数とPShapeクラスの使い分け

beginShape,endShape関数による図形の作成は手軽に使えるという利点があります.しかしながら,描画前に毎回頂点の作成を行う必要があります.そのため,頂点数の多い図形ではCPUへの負荷が高くなります.また,同じ図形を再度描画したい場合には,再度同じ手順で頂点を作らなければいけません.

PShapeクラスは,使用するために少し準備が必要です.しかしながら,事前にすべての頂点を作成しておけるため,頂点数の多い図形でも描画時の負荷が少なくなるという利点があります.また,再度同じ図形を描画したい場合にも頂点を再度作成する必要がありません.

図形を作成する関数

基本的な図形は,作成してくれる関数が用意されています.

四角形:box関数

球:sphere関数

図形の形状の変更

vertex関数,またはvertexメソッドで作成された頂点をどのように描画するかはbeginShape関数,メソッドの引数で指定することができます.

詳細はリファレンスを参照してください.

課題の提出先・提出方法

招待されているBoxアップロードフォルダ「第02回」に自身の学籍番号のフォルダ(アルファベット大文字,例:20FI999)を自身で作成し,その中に各課題,指定された名前で完成させたスケッチフォルダごとアップロードしてください.

提出締め切り:11月20日(金) 18:00

BOXアップロードフォルダの招待メールが来ていない,また,WebClassで本講義が見えない方は森谷まで連絡ください.

課題1

円盤を作成せよ.

提出スケッチフォルダ名:BASIC2_1

disk.png

課題2(*任意課題に変更)

円柱を作成せよ.

提出スケッチフォルダ名:BASIC2_2

以下の画像では,側面の板をbeginShape(TRIANGLES);で作成しているが,beginShape(QUADS);でも構わない.

cylinder.png

課題3(任意)

sphere関数を用いずに球のモデルを作成せよ(分割数などは任意でよい).

提出スケッチフォルダ名:ADVANCE2_1

ヒント:「球 パラメータ形式」(google検索)


添付ファイル: fileverticies.png 831件 [詳細] filedisk.png 1277件 [詳細] filecylinder.png 1036件 [詳細] filechangecam.png 414件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-11-15 (日) 16:18:40