PHPプログラムで制御する3Dプリンタ入門

第3回 STLデータはどのように生成されるのか

この記事を読むのに必要な時間:およそ 2.5 分

STLデータ生成ライブラリの動作原理

さて,これまで3Dデータを作ってきたライブラリの動作原理を見てみることにしましょう。興味のない方は読み飛ばしていただいて構いません。

3Dプリンタで使うSTLというファイル形式は,非常にシンプルです。Wikipediaにも解説がありますが,立体の表面を三角形に分割し,三角形1つ1つの座標をファイルに記述します。座標はミリメートル単位で,それぞれの三角形にある3つの頂点の並べ方に決まりがあります。

  1. 三角形の頂点を,ファイルに記述されている順に追うと,右まわりか左まわりになる
  2. この向きに回したときに木ねじが進む向きを,法線ベクトルという
  3. 法線ベクトルは,立体の外側を向いていなければならない

具体的に見てみましょう。図3は三角柱です。三角形ABCをSTLファイルに出力するときは,A→B→Cの順に点を出力しなければなりません。逆順だと,法線ベクトルが下向きになり,立体の内側を指すことになってしまいます。

図3 三角柱

図3 三角柱

一方,三角形DEFは,STLファイルに出力するときは,F→E→Dの順に点を出力しなければなりません図4⁠。なお,三角形はFEDでなくても,EDFやDFEでも構いません。

図4 上面・下面の法線ベクトル

図4 上面・下面の法線ベクトル

また,四角形BCFEは,2つに分割して三角形にする必要があります。STLファイルは三角形しか記述できないからです(これはあくまでもデータ上での話であり,3Dプリンタなどで出力しても継ぎ目などは生じません⁠⁠。この場合も,法線ベクトルが立体の外側を指すように,点を並べる必要があります。たとえば,F→B→Eの順で1つめの三角形を,F→C→Bの順で2つ目の三角形を出力します図5⁠。

図5 側面の法線ベクトル

図5 側面の法線ベクトル

他の面も同様に出力すれば完成です。三角形どうしの出力順は自由です。なお,三角形どうしが交差するようなものはNGです。

では,ライブラリはどうやってこのようなデータを出力すればいいでしょうか。

まず,底面にあたる多角形があり,この1点を持ち上げる動作(movetoメソッド)を見てみましょう図6⁠。

図6 点を動かす

図6 点を動かす

これにより,三角形ABA'と,三角形FAA'が生まれます図7ちなみに,法線ベクトルが外側を向くように記述しています⁠⁠。

図7 側面となる三角形が2つできる

図7 側面となる三角形が2つできる

続いて点Bを持ち上げると,三角形BCB'と,三角形A'BB'が生まれます図8⁠。

図8 次の点を動かすと,三角形かさらに2つできる

図8 次の点を動かすと,三角形かさらに2つできる

こうして生まれた三角形を順次出力することで,側面のデータを出力することができます図9⁠。

図9 すべての点を動かしたところ

図9 すべての点を動かしたところ

今回は最初に点Aを,次に点Bを動かしましたが,実際にはどのような順序で点を動かしても正しく動作します。ただし,点を下向きに動かすと三角形の法線ベクトルが逆向きになってしまうため,z座標が増加する向きに動かしてください。

著者プロフィール

木元峰之(きもとみねゆき)

独立系ソフトハウスに8年間勤務,パッケージソフトの開発や記事執筆などを行う。現在はフリーのコンサルタント。SWESTなどのワークショップで分科会のコーディネータを務める。デジタル回路設計歴30年,プログラミング歴27年。

きもと特急電子設計
URL:http://business.pa-i.org/