我想要做的是在2个模型上执行CGAL布尔运算符(联合运算符),每个模型的每个顶点都有RGB颜色。但结果并没有保留颜色信息。 也许你知道如何解决这个问题。
以下是进行布尔运算的模型(coff格式):
以下是我使用的代码:
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Polyhedron_3.h>
#include <CGAL/Polyhedron_items_with_id_3.h>
#include <CGAL/Polygon_mesh_processing/corefinement.h>
#include <fstream>
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Polyhedron_3<K, CGAL::Polyhedron_items_with_id_3> Mesh;
namespace PMP = CGAL::Polygon_mesh_processing;
int main(int argc, char* argv[])
{
const char* filename1 = (argc > 1) ? argv[1] : "data/b1.off";
const char* filename2 = (argc > 2) ? argv[2] : "data/b2.off";
std::ifstream input(filename1);
Mesh mesh1, mesh2;
if (!input || !(input >> mesh1))
{
std::cerr << "First mesh is not a valid off file." << std::endl;
return 1;
}
input.close();
input.open(filename2);
if (!input || !(input >> mesh2))
{
std::cerr << "Second mesh is not a valid off file." << std::endl;
return 1;
}
Mesh out;
bool valid_union = PMP::corefine_and_compute_union(mesh1, mesh2, out);
if (valid_union)
{
std::cout << "Union was successfully computed\n";
std::ofstream output("union.off");
output << out;
return 0;
}
std::cout << "Union could not be computed\n";
return 1;
}
我最后得到的是正确的网格,但不保留颜色信息。 有没有机会修复颜色信息?
答案 0 :(得分:1)
目前还不可能。 corefine
中有一个隐藏参数来保留这些属性,但布尔操作的输出构建器缺少一个访问者(我希望有时间在CGAL 4.13中添加)。
有一些解决方法,但没有一个可以处理所有可能的情况。
修改强>: 在CGAL 4.13中,可以通过传入一个访问者的命名参数来实现。这个PR是添加支持的,并且已经合并到主分支中。以下example显示了如何执行此操作。
答案 1 :(得分:0)
我发现cgal库中有一个命令加载“coff”格式 其中包含RGB颜色。但我不知道如何使用它。我的第一次 尝试是如何定义数据类型。
据我所知,只有Surface_mesh数据结构能够使用COFF文件。您可以在Polyhedron / demo / Polyhedron中查看Surface_mesh_io_plugin的代码。 COFF格式是一个很好记录的标准。