雕刻CSG图书馆

时间:2013-04-19 09:59:37

标签: geometry modeling csg

有没有人成功编译和使用过Carve CSG库?我正试图在一个项目中使用它,但我无法让它工作。此外,文档非常糟糕。我一直在寻找Blender源代码,它似乎成功地使用了Carve,但我一直无法复制它。

这是我尝试使用的代码,只是为了创建一个与Carve一起使用的立方体:

std::vector<carve::geom3d::Vector> vertices;

vertices.push_back(carve::geom::VECTOR(+1.0, +1.0, +1.0));
vertices.push_back(carve::geom::VECTOR(-1.0, +1.0, +1.0));
vertices.push_back(carve::geom::VECTOR(-1.0, -1.0, +1.0));
vertices.push_back(carve::geom::VECTOR(+1.0, -1.0, +1.0));
vertices.push_back(carve::geom::VECTOR(+1.0, +1.0, -1.0));
vertices.push_back(carve::geom::VECTOR(-1.0, +1.0, -1.0));
vertices.push_back(carve::geom::VECTOR(-1.0, -1.0, -1.0));
vertices.push_back(carve::geom::VECTOR(+1.0, -1.0, -1.0));

std::vector<int> f;
int numfaces = 6;

f.push_back(4);
f.push_back(0);
f.push_back(1);
f.push_back(2);
f.push_back(3);

f.push_back(4);
f.push_back(7);
f.push_back(6);
f.push_back(5);
f.push_back(4);

f.push_back(4);
f.push_back(0);
f.push_back(4);
f.push_back(5);
f.push_back(1);

f.push_back(4);
f.push_back(1);
f.push_back(5);
f.push_back(6);
f.push_back(2);

f.push_back(4);
f.push_back(2);
f.push_back(6);
f.push_back(7);
f.push_back(3);

f.push_back(4);
f.push_back(3);
f.push_back(7);
f.push_back(4);
f.push_back(0);

carve::mesh::MeshSet<3> *poly = new carve::mesh::MeshSet<3> (vertices, numfaces, f);

它似乎停留在最后一行,陷入长期循环,然后是分段错误。

1 个答案:

答案 0 :(得分:0)

您使用的是搅拌机来源的版本吗?虽然我遇到了另一种错误,但我也遇到了一些问题。我的问题是我没有编译使用编译器雕刻库编译的所有相同的编译器标志。当我将它们添加到我的构建中时,一切正常。通常我会抱怨使用库所需的秘密编译器标志,但它是blender项目的内部标志。如果你正在通过CMake构建blender雕刻库,你可以使用“make VERBOSE = 1”(如果你使用忍者,则使用“ninja -v”)来编译,以确切地了解所有内容的编译方式,然后适当地修改你的构建。我正在使用的标志(显然这些可能会随着时间的推移而在构建环境中发生变化;不依赖于它们是正确的):

-DCARVE_SYSTEM_BOOST -DDEBUG -DHAVE_BOOST_UNORDERED_COLLECTIONS -DHAVE_STDBOOL_H -DWITH_BOOL_COMPAT -D_DEBUG -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -D__LITTLE_ENDIAN__ -D__MMX__ -D__SSE2__ -D__SSE__

我没有尝试将这些减少到所需的最低限度;我只是剪切并粘贴了所有与我的探索/测试代码构建相关的标志。