mieki256's diary



2017/03/22(水) [n年前の日記]

#2 [dxruby][ruby] COLLADA形式の3Dモデルデータファイルを解析するスクリプトを書いてたり

Ruby を使って、COLLADA形式(.dae)の3Dモデルデータファイルを解析するスクリプトを書いてたり。

_COLLADA - Wikipedia
元々は、ソニー・コンピュータエンタテインメントがPlayStation 3とPlayStation Portable向けの開発用公式フォーマットとして策定した。

COLLADA - Wikipedia より


中身が 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 側で記述されているっぽい。

以上です。

過去ログ表示

Prev - 2017/03 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project