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_index
std::vector<vec3<float>> v_vec
頂点の x、y、z 座標を含むフィールドを持つのインデックスですvt_vec_index
std::vector<vec2<float>> vt_vec
含まれているテクスチャの u および v 座標のインデックスですvn_vec_index
std::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_z
float 値を作成するために使用されますstd::vector<float> vertex_array
。
また、 のフィールドのすべてのインデックスf_vec
は、デフォルトで - の値です。つまり、 からまでstd::vector<uint32_t>> element_array
の整数の範囲が含まれています。0
f_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
されません。
どうすればいいですか?