c++ - 使用 vcglib 示例时断言失败

标签 c++ vcg

我想使用 vcglib 基于点云重建表面。但是每当我运行我的程序(也使用提供的示例,例如/vcglib/apps/sample/trimesh_allocate)时,我都会得到以下输出:

trimesh_allocate: ../../../vcg/simplex/vertex/component.h:50: int vcg::vertex::EmptyCore::cFlags() const [with TT = MyUsedTypes]: Assertion `0' failed.

有什么解决办法吗?我在 Ubuntu 12.04 上使用 QT-Creator 2.4.1。我确实得到了任何编译器或链接器错误。

提前致谢,Mirco

最佳答案

为了消除此类错误,您通常需要更改顶点、边、面、网格定义的定义。我可以使用以下方法使这个示例起作用:

class MyFace;
class MyVertex;

struct MyUsedTypes : public vcg::UsedTypes< vcg::Use<MyVertex>::AsVertexType,
vcg::Use<MyFace>::AsFaceType>{};

class MyVertex  : public vcg::Vertex< MyUsedTypes, vcg::vertex::Coord3f,  vcg::vertex::Normal3f, vcg::vertex::VFAdj, vcg::vertex::BitFlags, vcg::vertex::Mark>{};
class MyFace    : public vcg::Face  < MyUsedTypes, vcg::face::VertexRef,   vcg::face::Normal3f, vcg::face::FFAdj, vcg::face::Mark, vcg::face::VFAdj,  vcg::face::BitFlags > {};
class MyMesh    : public vcg::tri::TriMesh< std::vector<MyVertex>, std::vector<MyFace> > {};

我相信 vcg::xx::BitFlags 是您需要为顶点和面添加的那些。这可以从您遇到的关于 cFlags() 的错误中看出。

此外,在trimesh_allocate.cpp示例中,您需要注释掉以下部分:

// WRONG WAY of iterating: FN() != m.face.size() if there are deleted elements
/*for(int i=0;i<m.FN();++i)
{
 if(!fi->IsD())
   {
    MyMesh::CoordType b = vcg::Barycenter(*fi);
   }
}*/

关于c++ - 使用 vcglib 示例时断言失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13586957/

相关文章:

c++ - 在 C++ 中包含目录时指定完整路径

c++ - CMake 错误 : Unable to find package GTest

c++ - 为什么 Win32 没有僵尸线程问题?

C++ 静态链接共享库

c++ - 在 VCG 中创建超过 400k 顶点的 VertexPointer 时程序崩溃

c++ - 无法在 VS 2010 中编译 Vcg 库

c++ - 需要帮助使用 g++ 编译 vcglib 代码

c++ - 性能超时问题