Geometry 卡夫CSG图书馆

Geometry 卡夫CSG图书馆,geometry,modeling,csg,Geometry,Modeling,Csg,是否有人成功编译并使用了Carve CSG库?我正试图在一个项目中使用它,但我还没能让它发挥作用。而且,文档非常糟糕。我一直在寻找搅拌机的来源,它似乎成功地使用雕刻,但我一直有困难复制它 下面是我一直尝试使用的代码,只是为了创建一个立方体来与Carve一起使用: std::vector<carve::geom3d::Vector> vertices; vertices.push_back(carve::geom::VECTOR(+1.0, +1.0, +1.0)); vertice

是否有人成功编译并使用了Carve CSG库?我正试图在一个项目中使用它,但我还没能让它发挥作用。而且,文档非常糟糕。我一直在寻找搅拌机的来源,它似乎成功地使用雕刻,但我一直有困难复制它

下面是我一直尝试使用的代码,只是为了创建一个立方体来与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);
std::向量顶点;
顶点。向后推(carve::geom::VECTOR(+1.0,+1.0,+1.0));
顶点。向后推(carve::geom::VECTOR(-1.0,+1.0,+1.0));
顶点。向后推(carve::geom::VECTOR(-1.0,-1.0,+1.0));
顶点。向后推(carve::geom::VECTOR(+1.0,-1.0,+1.0));
顶点。向后推(carve::geom::VECTOR(+1.0,+1.0,-1.0));
向后推(carve::geom::VECTOR(-1.0,+1.0,-1.0));
向后推(carve::geom::VECTOR(-1.0,-1.0,-1.0));
顶点。向后推(carve::geom::VECTOR(+1.0,-1.0,-1.0));
std::向量f;
int numfaces=6;
f、 推回(4);
f、 推回(0);
f、 推回(1);
f、 推回(2);
f、 推回(3);
f、 推回(4);
f、 推回(7);
f、 推回(6);
f、 推回(5);
f、 推回(4);
f、 推回(4);
f、 推回(0);
f、 推回(4);
f、 推回(5);
f、 推回(1);
f、 推回(4);
f、 推回(1);
f、 推回(5);
f、 推回(6);
f、 推回(2);
f、 推回(4);
f、 推回(2);
f、 推回(6);
f、 推回(7);
f、 推回(3);
f、 推回(4);
f、 推回(3);
f、 推回(7);
f、 推回(4);
f、 推回(0);
CAVE::mesh::MeshSet*poly=新CAVE::mesh::MeshSet(顶点、NUMFACE、f);

它似乎卡在最后一行,陷入长期运行的循环,然后出现分段故障。

您使用的是来自blender源的版本吗?我也有一些问题,虽然我得到了不同类型的错误。我的问题是,我没有使用blender carve库编译时使用的所有编译器标志进行编译。当我把它们添加到我的构建中时,一切都很好。通常我会抱怨使用库所需的秘密编译器标志,但它是blender项目的内部标志。如果您是通过CMake构建blender carve库,那么可以使用“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__