1

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されません。

どうすればいいですか?

4

0 に答える 0