久しぶりにSTLファイルを取り扱ったので備忘録。
3D Systems社のSLA CADというソフト用のファイルフォーマットです。
多くの解析ソフトがサポートし、三角形メッシュソリッド表現ファイルフォーマットとして広く使用されています。
記録される3Dモデルデータは、三角形の面法線ベクトルと3つの頂点の座標値です。
三角形の頂点の順番と面の表裏の関係は、右ねじの規則に従います。(三角形の表側は点が半時計周りに回る順番に並びます。)(3つの点の座標値から三角形の面法線ベクトルは求まるはずなのだが、三角形の面法線も記録するフォーマットとなっています。)
※hiramine.com様HPより
http://www.hiramine.com/programming/3dmodelfileformat/stlfileformat.html
今3Dプリンタの取扱い形式でSTLがほとんどと聞いてます。結構使われてるのね。
iPhone上でも簡単にSTLを見られるビューワなるものがあったりと、
自分が学生時代に 扱っていた頃とはだいぶアクセスしやすくなっている印象です。
STLファイルはASCII(テキストデータ)、バイナリの2種類がある。
点列から3Dデータを起こしたいという奇特な方はテキストを直接いじることで
3Dデータを手打ちで作れます。
solid file_name
facet normal nx1 ny1 nz1 ……①
outer loop
vertex x1 y1 z1 ……②
vertex x2 y2 z12
vertex x3 y3 z3
endloop
endfacet
facet normal nx2 ny2 nz2
outer loop
vertex x4 y4 z4
vertex x5 y5 z5
vertex x6 y6 z6
endloop
endfacet
......
endsolid file_name
facet normal~endfacetが1枚の三角形データ。
①は法線ベクトルで、②の3点の座標からも求められるが
重複して記録する形式になっている。
具体的な求め方は、単純に②の外積を取れば良いかな。
実際は (x2-x1, y2-y1, z2-z1) × (x3-x1, y3-y1, z3-z1) なりで処理。座標の順番は時計回りの前提です。
規格化する必要あるかはよくわからないが、別に法線は(0,0,0)でも
読めるソフトは読めるので、そもそもあまり気にしなくても良いかも。
点列読んでSTL吐き出すコードを前に書いた記憶があるのにどっか行った...(泣)