0

有没有人成功编译和使用 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);

它似乎卡在最后一行,陷入长时间运行的循环,然后出现段错误。

4

1 回答 1

0

您使用的是搅拌机来源的版本吗?尽管我遇到了另一种错误,但我也遇到了一些问题。我的问题是我没有使用编译搅拌机雕刻库时使用的所有相同编译器标志进行编译。当我将它们添加到我的构建中时,一切正常。通常我会抱怨使用库所需的秘密编译器标志,但它是搅拌机项目的内部。如果您通过 CMake 构建搅拌机雕刻库,您可以使用“make VERBOSE=1”(如果您使用 ninja,则使用“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__

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

于 2013-10-01T16:17:55.507 回答