Wavefront .obj ファイル内のデータをまとめるのに問題があります。
これらはvec3とのvec2定義です
template <typename T>
struct vec3 {
T x;
T y;
T z;
};
template <typename T>
struct vec2 {
T x;
T y;
};
ベクトルで使用:
+-----------------------------------+--------------+--------------+-------+
| std::vector<vec3<uint32_t>> f_vec | 0 | 1 | (...) |
+-----------------------------------+--------------+--------------+-------+
| | v_vec_index | v_vec_index | (...) |
| +--------------+--------------+-------+
| | vt_vec_index | vt_vec_index | (...) |
| +--------------+--------------+-------+
| | vn_vec_index | vn_vec_index | (...) |
+-----------------------------------+--------------+--------------+-------+
どこ:
v_vec_indexstd::vector<vec3<float>> v_vec頂点の x、y、z 座標を含むフィールドを持つのインデックスですvt_vec_indexstd::vector<vec2<float>> vt_vec含まれているテクスチャの u および v 座標のインデックスですvn_vec_indexstd::vector<vec3<float>> vn_vec通常の x、y、z 座標のインデックスです
すべてf_vecのフィールドは、 内に一連のvert_x, vert_y, vert_z, tex_u, tex_v, norm_x, norm_y, norm_zfloat 値を作成するために使用されますstd::vector<float> vertex_array。
また、 のフィールドのすべてのインデックスf_vecは、デフォルトで - の値です。つまり、 からまでstd::vector<uint32_t>> element_arrayの整数の範囲が含まれています。0f_vec.size() - 1
問題は、vec3内部のフィールドf_vecが繰り返される可能性があることです。したがって、上記のユニークなシーケンスのみを組み立てるために、次のように変更することを計画しました。
+-----------------+---+---+---+---+---+
| f_vec | 0 | 1 | 2 | 3 | 4 |
+-----------------+---+---+---+---+---+
| | 1 | 3 | 1 | 3 | 4 |
| +---+---+---+---+---+
| | 2 | 2 | 2 | 2 | 5 |
| +---+---+---+---+---+
| | 2 | 4 | 2 | 4 | 5 |
+-----------------+---+---+---+---+---+
これに:
+------------------------+-----------------+---+---+---+---+---+
| whatever that would be | index | 0 | 1 | 2 | 3 | 4 |
+------------------------+-----------------+---+---+---+---+---+
| | key | 0 | 1 | 0 | 1 | 2 |
| +-----------------+---+---+---+---+---+
| | | 1 | 3 | 1 | 3 | 4 |
| | +---+---+---+---+---+
| | vec3 of indices | 2 | 2 | 2 | 2 | 5 |
| | +---+---+---+---+---+
| | | 2 | 4 | 2 | 4 | 5 |
+------------------------+-----------------+---+---+---+---+---+
の要素が " "f_vecに挿入されるたびにwhatever container
一意であるかどうかがチェックされます
そうである場合、
containerそのキーは最大のキーの次の自然数であり、 の最後にプッシュされます。キーの値は にプッシュされ、element_array新しい頂点が内部に作成されます。vertex_array- そうでない場合、
containerそのキーはその複製のキーと同じで、の最後にプッシュされます。キーの値はにプッシュされますが、element_array変更vertex_arrayされません。
どうすればいいですか?