2017/03/22(水) [n年前の日記]
#2 [dxruby][ruby] COLLADA形式の3Dモデルデータファイルを解析するスクリプトを書いてたり
Ruby を使って、COLLADA形式(.dae)の3Dモデルデータファイルを解析するスクリプトを書いてたり。
_COLLADA - Wikipedia
中身が xml なので、Ruby の rexml ライブラリを使えば各情報を取り出すところは簡単にできるだろう、と。
_library rexml (Ruby 2.4.0)
_library rexml/document (Ruby 2.4.0)
_XML処理 REXMLの使い方 - プログラムメモ
うむ。なんだか取り出せそうな気がしてきたぞ…。
_COLLADA - Wikipedia
元々は、ソニー・コンピュータエンタテインメントがPlayStation 3とPlayStation Portable向けの開発用公式フォーマットとして策定した。
中身が xml なので、Ruby の rexml ライブラリを使えば各情報を取り出すところは簡単にできるだろう、と。
_library rexml (Ruby 2.4.0)
_library rexml/document (Ruby 2.4.0)
_XML処理 REXMLの使い方 - プログラムメモ
> irb irb(main):001:0> require 'rexml/document' => true irb(main):002:0> doc = REXML::Document.new(File.read("vtxcoltest01.dae")) => <UNDEFINED> ... </> irb(main):003:0> mesh = doc.elements["COLLADA/library_geometries/geometry/mesh"] => <mesh> ... </> irb(main):004:0> puts mesh.elements["polylist"] <polylist count='12' material='Material_001-material'> <input offset='0' semantic='VERTEX' source='#Cube-mesh-vertices'/> <input offset='1' semantic='NORMAL' source='#Cube-mesh-normals'/> <input offset='2' semantic='TEXCOORD' set='0' source='#Cube-mesh-map-0'/> <input offset='3' semantic='COLOR' set='0' source='#Cube-mesh-colors-Col'/> <vcount>3 3 3 3 3 3 3 3 3 3 3 3 </vcount> <p>1 0 0 0 2 0 1 1 0 0 2 2 3 1 3 3 6 1 4 4 2 1 5 5 7 2 6 6 4 2 7 7 6 2 8 8 5 3 9 9 0 3 10 10 4 3 11 11 6 4 12 12 0 4 13 13 2 4 14 14 3 5 15 15 5 5 16 16 7 5 17 17 1 0 18 18 3 0 19 19 2 0 20 20 3 1 21 21 7 1 22 22 6 1 23 23 7 2 24 24 5 2 25 25 4 2 26 26 5 3 27 27 1 3 28 28 0 3 29 29 6 4 30 30 4 4 31 31 0 4 32 32 3 5 33 33 1 5 34 34 5 5 35 35</p> </polylist> => nil irb(main):008:0> puts mesh.elements["polylist"].attributes["count"] 12 => nil irb(main):009:0> plst = mesh.elements["polylist"] => <polylist material='Material_001-material' count='12'> ... </> irb(main):010:0> plst.elements.each("input") {|d| puts d} <input offset='0' semantic='VERTEX' source='#Cube-mesh-vertices'/> <input offset='1' semantic='NORMAL' source='#Cube-mesh-normals'/> <input offset='2' semantic='TEXCOORD' set='0' source='#Cube-mesh-map-0'/> <input offset='3' semantic='COLOR' set='0' source='#Cube-mesh-colors-Col'/> => [<input semantic='VERTEX' source='#Cube-mesh-vertices' offset='0'/>, <input semantic='NORMAL' source='#Cube-mesh-normals' offset='1'/>, <input semantic='TEXCOORD' source='#Cube-mesh-map-0' offset='2' set='0'/>, <input semantic='COLOR' source='#Cube-mesh-colors-Col' offset='3' set='0'/>]
うむ。なんだか取り出せそうな気がしてきたぞ…。
◎ glTF なるフォーマットもあるらしい。 :
OpenGL的には、COLLADA形式の後継相当の、glTF(openGL Transmission Format) なるフォーマットもあるらしい。xmlを解析しなくても済むように、というか実機(?)上で比較的そのまま使えるように改良されたフォーマット、だそうで。
_今話題の3Dファイル形式「glTF」でWebGLの表現力を高めよう! - Qiita
_glTF を触ってみた | shikihuiku
_COLLADAワーキンググループの次のプロジェクトとしてglTFプロジェクトがスタート - 強火で進め
blenderからglTFでエクスポートするアドオンも存在している模様。
_Kupoman/blendergltf: A glTF exporter for Blender
試しに、blender 2.78 にインストールして使ってみた。エクスポートすると、.gltf と .bin の2つのファイルが出力された。.gltf は .json(テキスト形式)の模様。バイナリファイル .bin の中にどんな情報が列挙されているかが .gltf 側で記述されているっぽい。
_今話題の3Dファイル形式「glTF」でWebGLの表現力を高めよう! - Qiita
_glTF を触ってみた | shikihuiku
_COLLADAワーキンググループの次のプロジェクトとしてglTFプロジェクトがスタート - 強火で進め
blenderからglTFでエクスポートするアドオンも存在している模様。
_Kupoman/blendergltf: A glTF exporter for Blender
試しに、blender 2.78 にインストールして使ってみた。エクスポートすると、.gltf と .bin の2つのファイルが出力された。.gltf は .json(テキスト形式)の模様。バイナリファイル .bin の中にどんな情報が列挙されているかが .gltf 側で記述されているっぽい。
[ ツッコむ ]
以上です。