CARLA
 
载入中...
搜索中...
未找到
Public 成员函数 | Public 属性 | 所有成员列表
Simplify::SimplificationObject类 参考

用于简化网格的类。 更多...

#include <Simplify.h>

+ Simplify::SimplificationObject 的协作图:

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< Refrefs
 存储引用的向量。
 
std::vector< Triangletriangles
 存储三角形的向量。
 
std::vector< Vertexvertices
 存储顶点的向量。
 

详细描述

用于简化网格的类。

在文件 Simplify.h828 行定义.

成员函数说明

◆ calculate_error()

double Simplify::SimplificationObject::calculate_error ( int id_v1,
int id_v2,
vec3f & p_result )
inline

在文件 Simplify.h1364 行定义.

引用了 SymetricMatrix::det(), min(), vertex_error(), vertices, vec3f::x, vec3f::y , 以及 vec3f::z.

被这些函数引用 simplify_mesh(), simplify_mesh_lossless(), update_mesh() , 以及 update_triangles().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ compact_mesh()

void Simplify::SimplificationObject::compact_mesh ( )
inline

在文件 Simplify.h1326 行定义.

引用了 loopi, loopj, triangles, Simplify::Triangle::v , 以及 vertices.

被这些函数引用 simplify_mesh() , 以及 simplify_mesh_lossless().

+ 这是这个函数的调用关系图:

◆ flipped()

bool Simplify::SimplificationObject::flipped ( vec3f p,
int i0,
int i1,
Vertex & v0,
Vertex & v1,
std::vector< int > & deleted )
inline

检查移除指定边后三角形是否会翻转

遍历与顶点v0相关联的所有三角形,检查如果移除边(p, v0) -> (p, v1)后, 是否有三角形发生翻转。翻转的条件包括:

  1. 边(p, v0)相邻的两向量几乎共线(点积接近1或-1)。
  2. 三角形的法向量与由边(p, v0)相邻的两向量构成的平面的法向量差异较大。
参数
p与v0和v1形成边的另一个端点
i0顶点p在顶点数组中的索引
i1顶点v1在顶点数组中的索引
v0顶点v0的引用
v1顶点v1的引用
deleted用于标记被删除的三角形的数组
返回
true 如果移除边后至少有一个三角形翻转,否则返回false

在文件 Simplify.h1090 行定义.

引用了 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().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ load_obj()

void Simplify::SimplificationObject::load_obj ( const char * filename,
bool process_uv = false )
inline

在文件 Simplify.h1431 行定义.

引用了 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.

+ 函数调用图:

◆ simplify_mesh()

void Simplify::SimplificationObject::simplify_mesh ( int target_count,
double agressiveness = 7,
bool verbose = false )
inline

主简化函数。

参数
target_count目标三角形数量。
agressiveness激进程度,用于增加阈值的锐度。5到8是较好的数值,更多迭代次数可以获得更高质量。
verbose是否输出详细信息。

在文件 Simplify.h859 行定义.

引用了 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.

+ 函数调用图:

◆ simplify_mesh_lossless()

void Simplify::SimplificationObject::simplify_mesh_lossless ( bool verbose = false)
inline

无损简化网格

该函数通过迭代地移除误差低于给定阈值的三角形来简化网格,同时保持网格的无损性。

参数
verbose是否打印详细信息,默认为false不打印
待办事项
使用范围for循环替换宏定义的循环,以提高代码可读性和安全性

在文件 Simplify.h978 行定义.

引用了 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.

+ 函数调用图:

◆ trimwhitespace()

char * Simplify::SimplificationObject::trimwhitespace ( char * str)
inline

在文件 Simplify.h1405 行定义.

引用了 end().

被这些函数引用 load_obj().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ update_mesh()

void Simplify::SimplificationObject::update_mesh ( int iteration)
inline

更新网格:压缩三角形,并建立引用列表

该函数在指定的迭代次数大于0时,会压缩三角形数组,移除被标记为删除的三角形。 接着,它会初始化顶点的三角形起始索引和三角形计数,然后遍历三角形数组来更新这些值。 最后,它会构建一个引用列表,该列表将每个顶点与其相关联的三角形以及三角形中的顶点索引相关联。

参数
iteration当前迭代次数,用于判断是否进行三角形的压缩

在文件 Simplify.h1201 行定义.

引用了 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().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ update_triangles()

void Simplify::SimplificationObject::update_triangles ( int i0,
Vertex & v,
std::vector< int > & deleted,
int & deleted_triangles )
inline

更新三角形连接和边误差

遍历与顶点v相关联的所有三角形,更新其顶点连接和边误差。如果三角形被标记为删除, 则将其标记为已删除并增加已删除三角形的计数。否则,更新三角形的顶点连接, 并重新计算其误差。

参数
i0顶点p在顶点数组中的索引
v顶点v的引用
deleted用于标记被删除的三角形的数组
deleted_triangles已删除三角形的计数,通过引用传递以便更新

在文件 Simplify.h1165 行定义.

引用了 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().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ update_uvs()

void Simplify::SimplificationObject::update_uvs ( int i0,
const Vertex & v,
const vec3f & p,
std::vector< int > & deleted )
inline

更新UV坐标

遍历与顶点v相关联的所有三角形,对于未被删除且当前顶点未被标记为删除的三角形, 更新其UV坐标。新的UV坐标通过插值计算得到。

参数
i0顶点p在顶点数组中的索引
v顶点v的引用
p与v形成边的另一个端点
deleted用于标记被删除的三角形的数组

在文件 Simplify.h1136 行定义.

引用了 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().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ vertex_error()

double Simplify::SimplificationObject::vertex_error ( SymetricMatrix q,
double x,
double y,
double z )
inline

在文件 Simplify.h1358 行定义.

被这些函数引用 calculate_error().

+ 这是这个函数的调用关系图:

◆ write_obj()

void Simplify::SimplificationObject::write_obj ( const char * filename)
inline

在文件 Simplify.h1627 行定义.

引用了 loopi, mtllib, Simplify::TEXCOORD, triangles , 以及 vertices.

类成员变量说明

◆ materials

std::vector<std::string> Simplify::SimplificationObject::materials

存储材质名称的向量。

在文件 Simplify.h850 行定义.

被这些函数引用 load_obj().

◆ mtllib

std::string Simplify::SimplificationObject::mtllib

材质库的名称。

在文件 Simplify.h846 行定义.

被这些函数引用 load_obj() , 以及 write_obj().

◆ refs

std::vector<Ref> Simplify::SimplificationObject::refs

存储引用的向量。

在文件 Simplify.h842 行定义.

被这些函数引用 flipped(), simplify_mesh(), simplify_mesh_lossless(), update_mesh(), update_triangles() , 以及 update_uvs().

◆ triangles

std::vector<Triangle> Simplify::SimplificationObject::triangles

存储三角形的向量。

在文件 Simplify.h834 行定义.

被这些函数引用 compact_mesh(), flipped(), load_obj(), simplify_mesh(), simplify_mesh_lossless(), update_mesh(), update_triangles(), update_uvs() , 以及 write_obj().

◆ vertices

std::vector<Vertex> Simplify::SimplificationObject::vertices

存储顶点的向量。

在文件 Simplify.h838 行定义.

被这些函数引用 calculate_error(), compact_mesh(), flipped(), load_obj(), simplify_mesh(), simplify_mesh_lossless(), update_mesh(), update_uvs() , 以及 write_obj().


该类的文档由以下文件生成: