#author("2019-11-24T16:44:13+09:00","default:kyo-in","kyo-in")
#author("2020-05-19T21:35:45+09:00","default:kyo-in","kyo-in")
**モデリング [#q1f9d010]
3次元図形を作っていきます.

**beginShape,endShape関数 [#i7d5a84f]
3D空間は前回の続きで,以下のように設定します.
#ref(../第1回/changecam.png,50%);
 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は,最初の頂点と最後の頂点を自動的につなげて図形を閉じるよう指示します.

#ref(./verticies.png,50%);

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

**PShapeクラス(*Ver.2.0以上) [#v3a3b7d2]
図形を作成するもう一つの方法として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クラスの使い分け [#u08a0662]
beginShape,endShape関数による図形の作成は手軽に使えるという利点があります.しかしながら,描画前に毎回頂点の作成を行う必要があります.そのため,頂点数の多い図形ではCPUへの負荷が高くなります.また,同じ図形を再度描画したい場合には,再度同じ手順で頂点を作らなければいけません.

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

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

四角形:box関数~
-http://www.processing.org/reference/box_.html

球:sphere関数~
-http://www.processing.org/reference/sphere_.html

**図形の形状の変更 [#fb1ffda3]
vertex関数,またはvertexメソッドで作成された頂点をどのように描画するかはbeginShape関数,メソッドの引数で指定することができます.

詳細はリファレンスを参照してください.
-https://www.processing.org/reference/beginShape_.html

**課題の提出先・提出方法 [#dc136f9e]
''講義中に完成しチェックを受けた課題については提出不要です.''
**課題の提出先・提出方法 [#h475884f]
招待されているBoxアップロードフォルダ「メディア演習C(CG)前前期」へ,完成させた各課題のスケッチフォルダをまとめてZIP圧縮したファイルを以下の名前でアップロードしてください.

 \\nas002.term.usmc.dendai.ac.jp\授業用ワークスペース\千住キャンパス\後期\未来科学部\⊂霾鵐瓮妊ア学科\FI1メディア演習C(CG)(森谷友昭)月34\第02回
ファイル名:XXFIXXX_''2nd''.zip(例:19FI999_''2nd''.zip)

指定されたファイル名で,''.pdeファイルのみ提出してください.''
''提出締め切り:5月27日(水) 18:00''

''提出締め切り:11月29日(金) 18:00''
BOXアップロードフォルダの招待メールが来ていない方は以下より申請してください.
(学籍メール+共通パスワード)

https://forms.office.com/Pages/ResponsePage.aspx?id=ixIOAf0kL06CbvxAt5p-YayxGTkiPYRChoTGYtovLK5UOTVWWVg4QjFOTllKUEQ4RlcxWjFHWkQzRy4u

**課題1 [#t0e83722]
円盤を作成せよ.

提出ファイル名:BASIC2_1.pde

#ref(./disk.png,50%);

**課題2 [#vb2a9c04]
**課題2(*任意課題に変更) [#vb2a9c04]
円柱を作成せよ.

提出ファイル名:BASIC2_2.pde

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

#ref(./cylinder.png,50%);

**課題3(任意) [#q99c737f]
sphere関数を用いずに球のモデルを作成せよ(分割数などは任意でよい).

提出ファイル名:ADVANCE2_1.pde

-https://processing.org/reference/sphere_.html

ヒント:「[[球 パラメータ形式:https://www.google.com/search?q=%E7%90%83+%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E5%BD%A2%E5%BC%8F&oq=%E7%90%83%E3%80%80%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E5%BD%A2%E5%BC%8F&aqs=chrome..69i57.5570j0j7&sourceid=chrome&ie=UTF-8]]」(google検索)


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS