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