U3Dが難解である

データが頻度分析に基づいてエンコードされてるんだが,それが理解できない...

誰か解説して.
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 BlockNew 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君に感謝.