用于简化网格的类。 更多...
#include <Simplify.h>
Public 成员函数 | |
double | calculate_error (int id_v1, int id_v2, vec3f &p_result) |
void | compact_mesh () |
bool | flipped (vec3f p, int i0, int i1, Vertex &v0, Vertex &v1, std::vector< int > &deleted) |
检查移除指定边后三角形是否会翻转 | |
void | load_obj (const char *filename, bool process_uv=false) |
void | simplify_mesh (int target_count, double agressiveness=7, bool verbose=false) |
主简化函数。 | |
void | simplify_mesh_lossless (bool verbose=false) |
无损简化网格 | |
char * | trimwhitespace (char *str) |
void | update_mesh (int iteration) |
更新网格:压缩三角形,并建立引用列表 | |
void | update_triangles (int i0, Vertex &v, std::vector< int > &deleted, int &deleted_triangles) |
更新三角形连接和边误差 | |
void | update_uvs (int i0, const Vertex &v, const vec3f &p, std::vector< int > &deleted) |
更新UV坐标 | |
double | vertex_error (SymetricMatrix q, double x, double y, double z) |
void | write_obj (const char *filename) |
Public 属性 | |
std::vector< std::string > | materials |
存储材质名称的向量。 | |
std::string | mtllib |
材质库的名称。 | |
std::vector< Ref > | refs |
存储引用的向量。 | |
std::vector< Triangle > | triangles |
存储三角形的向量。 | |
std::vector< Vertex > | vertices |
存储顶点的向量。 | |
用于简化网格的类。
在文件 Simplify.h 第 828 行定义.
|
inline |
在文件 Simplify.h 第 1364 行定义.
引用了 SymetricMatrix::det(), min(), vertex_error(), vertices, vec3f::x, vec3f::y , 以及 vec3f::z.
被这些函数引用 simplify_mesh(), simplify_mesh_lossless(), update_mesh() , 以及 update_triangles().
|
inline |
在文件 Simplify.h 第 1326 行定义.
引用了 loopi, loopj, triangles, Simplify::Triangle::v , 以及 vertices.
被这些函数引用 simplify_mesh() , 以及 simplify_mesh_lossless().
|
inline |
检查移除指定边后三角形是否会翻转
遍历与顶点v0相关联的所有三角形,检查如果移除边(p, v0) -> (p, v1)后, 是否有三角形发生翻转。翻转的条件包括:
p | 与v0和v1形成边的另一个端点 |
i0 | 顶点p在顶点数组中的索引 |
i1 | 顶点v1在顶点数组中的索引 |
v0 | 顶点v0的引用 |
v1 | 顶点v1的引用 |
deleted | 用于标记被删除的三角形的数组 |
在文件 Simplify.h 第 1090 行定义.
引用了 vec3f::cross(), Simplify::Triangle::deleted, vec3f::dot(), loopk, Simplify::Triangle::n, vec3f::normalize(), refs, Simplify::Vertex::tcount, triangles, Simplify::Vertex::tstart, Simplify::Triangle::v , 以及 vertices.
被这些函数引用 simplify_mesh() , 以及 simplify_mesh_lossless().
|
inline |
在文件 Simplify.h 第 1431 行定义.
引用了 Simplify::Triangle::attr, fn, loopi, loopj, Simplify::Triangle::material, materials, mtllib, Simplify::Vertex::p, Simplify::TEXCOORD, triangles, trimwhitespace(), Simplify::Triangle::v, vertices, vec3f::x, vec3f::y , 以及 vec3f::z.
|
inline |
主简化函数。
target_count | 目标三角形数量。 |
agressiveness | 激进程度,用于增加阈值的锐度。5到8是较好的数值,更多迭代次数可以获得更高质量。 |
verbose | 是否输出详细信息。 |
在文件 Simplify.h 第 859 行定义.
引用了 Simplify::Triangle::attr, Simplify::Vertex::border, calculate_error(), compact_mesh(), Simplify::Triangle::deleted, Simplify::Triangle::dirty, Simplify::Triangle::err, flipped(), loopi, loopj, Simplify::Vertex::p, Simplify::Vertex::q, refs, Simplify::Vertex::tcount, Simplify::TEXCOORD, triangles, Simplify::Vertex::tstart, update_mesh(), update_triangles(), update_uvs(), Simplify::Triangle::v , 以及 vertices.
|
inline |
无损简化网格
该函数通过迭代地移除误差低于给定阈值的三角形来简化网格,同时保持网格的无损性。
verbose | 是否打印详细信息,默认为false不打印 |
在文件 Simplify.h 第 978 行定义.
引用了 Simplify::Triangle::attr, Simplify::Vertex::border, calculate_error(), compact_mesh(), Simplify::Triangle::deleted, Simplify::Triangle::dirty, Simplify::Triangle::err, flipped(), loopi, loopj, Simplify::Vertex::p, Simplify::Vertex::q, refs, Simplify::Vertex::tcount, Simplify::TEXCOORD, triangles, Simplify::Vertex::tstart, update_mesh(), update_triangles(), update_uvs(), Simplify::Triangle::v , 以及 vertices.
|
inline |
|
inline |
更新网格:压缩三角形,并建立引用列表
该函数在指定的迭代次数大于0时,会压缩三角形数组,移除被标记为删除的三角形。 接着,它会初始化顶点的三角形起始索引和三角形计数,然后遍历三角形数组来更新这些值。 最后,它会构建一个引用列表,该列表将每个顶点与其相关联的三角形以及三角形中的顶点索引相关联。
iteration | 当前迭代次数,用于判断是否进行三角形的压缩 |
在文件 Simplify.h 第 1201 行定义.
引用了 calculate_error(), vec3f::cross(), vec3f::dot(), Simplify::Triangle::err, loopi, loopj, loopk, min(), Simplify::Triangle::n, vec3f::normalize(), refs, Simplify::Vertex::tcount, triangles, Simplify::Vertex::tstart, Simplify::Triangle::v, vertices, vec3f::x, vec3f::y , 以及 vec3f::z.
被这些函数引用 simplify_mesh() , 以及 simplify_mesh_lossless().
|
inline |
更新三角形连接和边误差
遍历与顶点v相关联的所有三角形,更新其顶点连接和边误差。如果三角形被标记为删除, 则将其标记为已删除并增加已删除三角形的计数。否则,更新三角形的顶点连接, 并重新计算其误差。
i0 | 顶点p在顶点数组中的索引 |
v | 顶点v的引用 |
deleted | 用于标记被删除的三角形的数组 |
deleted_triangles | 已删除三角形的计数,通过引用传递以便更新 |
在文件 Simplify.h 第 1165 行定义.
引用了 calculate_error(), Simplify::Triangle::deleted, Simplify::Triangle::dirty, Simplify::Triangle::err, loopk, min(), refs, Simplify::Vertex::tcount, Simplify::Ref::tid, triangles, Simplify::Vertex::tstart, Simplify::Ref::tvertex , 以及 Simplify::Triangle::v.
被这些函数引用 simplify_mesh() , 以及 simplify_mesh_lossless().
|
inline |
更新UV坐标
遍历与顶点v相关联的所有三角形,对于未被删除且当前顶点未被标记为删除的三角形, 更新其UV坐标。新的UV坐标通过插值计算得到。
i0 | 顶点p在顶点数组中的索引 |
v | 顶点v的引用 |
p | 与v形成边的另一个端点 |
deleted | 用于标记被删除的三角形的数组 |
在文件 Simplify.h 第 1136 行定义.
引用了 Simplify::Triangle::deleted, interpolate(), loopk, refs, Simplify::Vertex::tcount, Simplify::Ref::tid, triangles, Simplify::Vertex::tstart, Simplify::Ref::tvertex, Simplify::Triangle::uvs, Simplify::Triangle::v , 以及 vertices.
被这些函数引用 simplify_mesh() , 以及 simplify_mesh_lossless().
|
inline |
|
inline |
在文件 Simplify.h 第 1627 行定义.
引用了 loopi, mtllib, Simplify::TEXCOORD, triangles , 以及 vertices.
std::vector<std::string> Simplify::SimplificationObject::materials |
std::string Simplify::SimplificationObject::mtllib |
std::vector<Ref> Simplify::SimplificationObject::refs |
存储引用的向量。
在文件 Simplify.h 第 842 行定义.
被这些函数引用 flipped(), simplify_mesh(), simplify_mesh_lossless(), update_mesh(), update_triangles() , 以及 update_uvs().
std::vector<Triangle> Simplify::SimplificationObject::triangles |
存储三角形的向量。
在文件 Simplify.h 第 834 行定义.
被这些函数引用 compact_mesh(), flipped(), load_obj(), simplify_mesh(), simplify_mesh_lossless(), update_mesh(), update_triangles(), update_uvs() , 以及 write_obj().
std::vector<Vertex> Simplify::SimplificationObject::vertices |
存储顶点的向量。
在文件 Simplify.h 第 838 行定义.
被这些函数引用 calculate_error(), compact_mesh(), flipped(), load_obj(), simplify_mesh(), simplify_mesh_lossless(), update_mesh(), update_uvs() , 以及 write_obj().