我无法将数据放在波前 .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浮点值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将保持不变
我该怎么做?