3次元図形を作っていきます.
3D空間は前回の続きで,以下のように設定します.
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は,最初の頂点と最後の頂点を自動的につなげて図形を閉じるよう指示します.
2次元の図形と同じように,図形の輪郭線の色はstroke関数で,内部を塗りつぶす色はfill関数で変更できます.
図形を作成するもう一つの方法として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関数による図形の作成は手軽に使えるという利点があります.しかしながら,描画前に毎回頂点の作成を行う必要があります.そのため,頂点数の多い図形ではCPUへの負荷が高くなります.また,同じ図形を再度描画したい場合には,再度同じ手順で頂点を作らなければいけません.
PShapeクラスは,使用するために少し準備が必要です.しかしながら,事前にすべての頂点を作成しておけるため,頂点数の多い図形でも描画時の負荷が少なくなるという利点があります.また,再度同じ図形を描画したい場合にも頂点を再度作成する必要がありません.
基本的な図形は,作成してくれる関数が用意されています.
四角形:box関数
球:sphere関数
vertex関数,またはvertexメソッドで作成された頂点をどのように描画するかはbeginShape関数,メソッドの引数で指定することができます.
詳細はリファレンスを参照してください.
円盤を作成せよ.
円柱を作成せよ.
Processingには標準で球のモデルを表示するsphere関数が用意されている.同等の関数を作成せよ(分割数などは任意でよい).