U3Dが難解である
データが頻度分析に基づいてエンコードされてるんだが,それが理解できない...
- http://www.ecma-international.org/publications/standards/Ecma-363.htm Standard ECMA-363 Universal 3D File Format
- http://u3d.sourceforge.net/ 3DIF - U3D Sample Software (規格制定に携わった一員であるIntelによるサンプル・コード,読めた物ではない
誰か解説して.
Intelのサンプル・コードが生成した hello.u3d
とかネット上に転がってた dice.u3d
というファイルのパージングを試みてるんだが,色々行き詰った:
- 頻度分析以前に,
Shading ID
の次にはBase Corner Info
が3個続き,この中には少なくともBase Position Index
が1つ含まれるはずなのに,Base Corner Info
を読み飛ばさないとhello.u3d
がパーズできない(立方体を構成する12個のface(3角形の面)の情報を読み込む前にCLOD Base Mesh Continuation Block
末尾に辿り着いてしまう - 頻度分析をデコードしないと
CLOD Progressive Mesh Continuation Block
のNew Diffuse Color Info
のパージングができない(New Diffuse Color Count
の値だけ繰り返す箇所があるが,これがエンコードされている
(↑の汚いソースの中のマクロ READ_STR_AUX
にあるのだが)string(&v[idx], &v[v.size()])
みたいなところで生じたバグで詰まっていた私に string(v.begin() + idx, v.begin() + v.size())
という解を教えてくれたKee君に感謝.