建物を描く(2020.03.24)

作品解説

 この作品は、当初は都市を生成できないだろうか、ということで始めたものでした。 さすがに都市は無理だろう…ということで、 まずは建物を作る習作としてコーディングを始めました。

 しかし、作ってみると結構大変で、特に 3D 関連の処理で 文字数を大幅に消費してしまいました。

translate とか関数名長すぎ。

pushMatrix や popMatrix 関数は、後で push や pop 関数で 代用できる(もちろん、このプログラムでは、という意味で)と教えてもらいましたが、 それでも未だに 1 ツィートに収めることができていない状況です。

ソースコードおよびその解説

 この作品の全ソースコードは以下の通りです:

def setup():size(500,500,P3D)

T=translate
R=random

def draw():
    background(-9)
    randomSeed(0)
    T(250,0,-200)
    rotateY(frameCount*.01)
    for i in [0]*50:
        x=int(R(9)-5)*50
        z=R(9)-20
        w=R(50)+9
        t=R(200)+50 # 建物の高さ

        # 建物部分の描画
        push()
        T(x,500-t/2,z)
        box(w,t,R(50)+9)
        pop()

        # 影の描画
        push()
        fill(200)
        noStroke()
        T(x,500,z-t/2)
        box(w,0,t)
        pop()

 このプログラムでは、randomSeed 関数を使って乱数の種を 0 としてから 描画処理を行っています。 そのため、draw 関数内での乱数、 つまり関数 R は、ある意味配列のように機能することとなります。

i 番目の建物の x,z,w,t はいつも同じ値となります。 それぞれが建物の x 座標=横の位置、 z が奥行き方向の位置、 w は建物の厚さ、 最後の t が建物の高さとなります。

 建物の影は、box(w,0,t) として、 高さの無い単なる長方形により描かれています。