1

我无法将数据放在波前 .obj 文件中。

这些是vec3vec2定义

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_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_z浮点值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_arrayvertex_array将保持不变

我该怎么做?

4

0 回答 0