自動車を作る
空間に「3Dモデル」を描いてみましょう。今回は比較的簡単な「自動車」をクラフトします。「自動車」を選んだ理由は、すべてのパーツ(parts)を直方体で作ることができるからです。RGB 値と16進数
を参照に、自分の好きな色の自動車を作ってみましょう。早速始めましょう!
設計図
図2-4-1
プログラミングの前に、自動車の設計図を描きます。エクセルのセルを正方形にしてから、作りたい車の形をイメージしてセルに色を付けていきます。
ここで重要なのは、クラフトするための「原点(Origin)」をどこにするかということです。今回はクラフトしやすいように、車の右前を「X-Z平面」の原点に決めました。Y軸については、地面から「2」上がったところに車をクラフトするように決めました。
車体の作成
図2-4-2
図2-4-2が車体のみの設計図です。下2段は「シアン(r, g, b)=(0, 255, 255)」で上7段は「青(r, g, b)=(0, 0, 255)」でクラフトします。RGB 値と16進数を見て、自分の好きな色に変更可能です。
図2-4-3
図2-4-3を参照に車体のプログラムを作成して下さい。設計図をよく見て、一段ずつ車体を作っていきます。
図2-4-3a
例えば、車体の1番下の段は、(x, y, z)=(1, 3, 0) を起点として、(w, d, h)=(23, 10, 1)の直方体で構成されています。よって「直方体ブロック」の設定値を図2-4-3の赤枠、緑枠の通りに入力してください。
同様に、2段目から9段目まで「直方体ブロック」の値を決めていきます。完成した図2-4-3のプログラムを実行してみましょう。
図2-4-4
実行結果です。ツートンカラーの車体がクラフトできました。
タイヤの作成
図2-4-5
次にタイヤを作成します。
図2-4-6
タイヤは外側にゴムの部分を黒(r, g, b)=(0, 0, 0)で、内側の金属の部分を白(r, g, b)=(255, 255, 255)で作成します。
図2-4-7
タイヤをうまくクラフトできました。
電装類の作成
図2-4-8
サイドミラー、ライト、方向指示器、フロントパネル、ナンバープレートをまとめて作成してしまいましょう。
図2-4-9
設計図より色と位置、サイズを決めて、直方体ブロックを設置していきます。
図2-4-10
かなり自動車らしくなっていました。後はウインドウを付ければ完成です。一段ずつ作成していきます。
ウインドウの作成
図2-4-11
ウインドウの1段目の設計図です。
図2-4-12
4つの直方体でウインドウを作成します。
図2-4-13
ウインドウの1段目ができました。
図2-4-14
ウインドウの2段目の設計図です。
図2-4-15
2段目を設置するプログラムです。
図2-4-16
完成に近づいてきました。あともう少し。
図2-4-17
自動車の完成図です。
図2-4-18
最後にウインドウの3段目を設置します。
図2-4-19
自動車が完成しました。角度を変えて、上下左右から覗き込んで、細部がうまくクラフトできているか確認して下さい。
プログラムの改造
自動車を作るプログラムが完成しましたが、このプログラムは問題点がいくつかあります。
①自動車を作る位置を簡単に変更できない。
②自動車の大きさを変更できない。
③自動車の向きを変更できない。
これらの問題を解決するため、プログラムを改造します。Scratch の「リスト」という仕組みを利用して、プログラムを書き換えます。
データのリスト化
図2-4-20
図2-4-20は、先ほど作成した「車体作成」プログラムです。「車体(下)」のデータとしてリスト化したい部分を赤丸で囲みました。データの数は15個あります。
図2-4-21
リスト「lower_body(= 車体の下側)」を新しく作成して、「車体作成」プログラムの赤丸のデータを追加していきます。長さが 15(3 + 6 x 2)のリストができました。
図2-4-22
図2-4-22がリスト「lower_body」を読み取って、ブロックを置くプログラムです。
変数 s2arX, s2arY, s2arZ, x0, y0, z0, timesX, tmesY, timesZ, w, d, h, i を作成します。
s2arX は「s2ar の座標系の X座標」を表す変数です。
s2arY は「s2ar の座標系の Y座標」を表す変数です。
s2arZ は「s2ar の座標系の Z座標」を表す変数です。
x0, y0, z0 は「モデリングの原点」を表す変数で、この点を基準にモデルを作成していきます。
timesXは「X方向の拡大倍率」です。
timesYは「Y方向の拡大倍率」です。
timesZは「Z方向の拡大倍率」です。
w は「横幅(= width)」を表す変数です。
d は「奥行き(= depth)」を表す変数です。
h は「高さ(= height)」を表す変数です。
i は「カウンター変数」です。
リスト「lower_body」の1番、2番、3番は色のデータなので、「色指定ブロック」に代入します。4番から9番の数値が、車体の一番下のデータ、10番から15番が2段目のデータになります。これらのデータを「直方体ブロック」に代入するように「繰り返し処理」を使ってプログラミングします。
timesX は X方向の拡大倍率を表す変数です。初期値「1」を増やしてやることで、X方向に拡大できます。timesY, timesZ はそれぞれ Y方向、Z方向の拡大倍率を表します。
図2-4-23
プログラムの実行結果です。目的通りに「車体(下)」の部分が作成されました。
このまま作業を続けていくと、プログラムが縦に長くなりすぎてしまい、プログラミングが読みにくくなります。そこで「サブルーチン」という仕組みを使って、プログラムを読みやすくしてみましょう。
サブルーチン化
「サブルーチン」とはプログラムの中に繰り返し現れる部分を切り離して、プログラムの可読性や保守性をよくするための仕組みです 。サブルーチンは、「メインルーチン」から呼び出されて実行されます 。
実際に「車体(下)作成プログラム」をサブルーチン化しましょう。改造方法は簡単です。
図2-4-24
まずプログラムのサブルーチンにしたい部分を切り離します。図2-4-24を参照に。「[ i ] を [ 0 ] にする」ブロックから下を切り離します。
次に、カテゴリー「イベント」の中にある「[ メッセージ1 ] を受け取ったとき」ブロックを頭に乗せてやります。最後に、名前「メッセージ1」をサブルーチンの名前「parts1」に変更して、サブルーチンは完成です。
コラム メッセージの名前の変更方法
図2-4-25
「▼」の部分をクリックして「新しいメッセージ」を選ぶと、名前を付け替えることができます。メッセージの名前は自由に決めてかまいませんが、用途がイメージできる名前が望ましいです。今回は自動車のパーツ(= parts)であることから「parts1」と名付けました。
(.)
図2-4-26
メインルーチンは、切り離した残りの部分(変数の初期設定)の下に「[ parts1 ] を送って待つ」を合体して作成します。メインルーチンを実行して、「車体(下)」の部分がクラフトできることを確認しておきましょう。
自動車プログラムを完成させる
この後の操作は、「車体(下)」を作成した方法と同じです。
①車体のパーツのデータをリスト化する
②パーツ作成のサブルーチンを作成する。(サブルーチン名は「parts_number」)
③メインルーチンからサブルーチンを呼び出せるようにする
(データを「リスト化」してサブルーチンを作る作業は同じことの繰り返しです。単に面倒なだけですから、ダウンロードしたサンプルプログラムを利用してもかまいません。ただ作業の手順だけは頭に入れて置くようにしてください。 => プログラムの検証
まで飛ぶ)車体(上)の作成
まず「車体(上)」を作りましょう。
図2-4-27
「車体(上)」のデータとしてリスト化したい部分を青丸で囲みました。データの数は45個あります。
図2-4-28
図2-4-27の青丸のデータを追加して、長さ 45 のリスト「upper_body(= 車体の上側)」を作成します。
図2-4-29
図2-4-29がリスト「upper_body」を読み込んでブロックを置くプログラムです。サブルーチン「parts1」を「複製」して、読み込むリスト名を「upper_body」に変更します(10箇所)。サブルーチン名は「parts2」にしました。
図2-4-30
メインルーチンは下に「[parts2] を送って待つ」ブロックを追加します。メインルーチンを実行して、「車体(上)」が作成されることを確認して下さい。
以下はすべて同じ手順を繰り返します。
タイヤ(外)のサブルーチン
以下は書籍でご確認ください