自動車を作る

自動車を作る

空間に「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] を送って待つ」ブロックを追加します。メインルーチンを実行して、「車体(上)」が作成されることを確認して下さい。

以下はすべて同じ手順を繰り返します。

タイヤ(外)のサブルーチン

以下は書籍でご確認ください

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です