ファイルにデータを書き出し、それを読み戻すことができるファイル形式を書く必要があります。バイナリデータをファイルに書き込んで、高速に読み込むことができますか?
大量のデータをstd::vector
にブリッティングする必要があります(そのストレージは常に隣接して実装されているため)。
しかし、ファイルを書き込むときに、intやその他の型の整列とサイズにどのように制約を適用するかはわかりません。
これはどのように行う必要がありますか? Q6600(x86)でgccをbuntu linuxに使っています。ただ、一例として
:
struct Vertex
{
float point [3];
float normal [3];
float texcoord [2];
}
は、後に、データが
std::vector<Vertex>
に格納されます。私は
__attribute__
を使用してそれを梱包し/整列させることを考えて、異なるプラットフォーム間で移植性を高めるようにしました。
編集: 私は既に仕様を作成しており、使用する予定です。データの最大ビットは頂点とインデックスです。したがって、それらは大きなブロックとして読み込まれます。たとえば、(より大きな仕様の一部): VertexGroupは特性を共有する頂点のグループです。一度に1つのマテリアルしか保持できないため、メッシュに含まれているマテリアルの数が多いはずです。
<uint> thisid # Of this VertexGroup
<string> name
<uint> materialId # A material
<uint> vertexCount
for (vetexCount):
<3xfloat> point
<3xfloat> normal
<2xfloat> texcoord
<uint> triangleCount
for (triangleCount):
<3xuint> indices
ブーストシリアル化はどのくらいの速さですか?これは私に多くの面倒を節約することができ、それがどのように動作するか見ることは面白いだろう。私はそれがどのように配列を処理するのか、どれほど速いのか(ファイルに1000000個の頂点があるので、メモリ全体にデータブロックをblitするだけでは遅くなるだろう)と思います。 – solinent
似たような質問があります: http://stackoverflow.com/questions/321619/c-serialization-performance –