精华内容
下载资源
问答
  • 读取点云文件,用VCG库对其进行处理,返回三角形网格数据,然后用OpenTK进行绘制。能处理海量的点云文件,300W点数据处理只需10S左右!
  • 安装 VCG 库使用托管在 github 的代码仓库来管理。 项目主页地址为 vcg 。 发布的稳定版本在 vcg-release 可以看到。...文件夹结构VCG库主要由头文件构成(核心部分完全是头文件)而不依赖额外的东西. 只需下

    安装

    • VCG 库使用托管在 github 的代码仓库来管理。 项目主页地址为 vcg
    • 发布的稳定版本在 vcg-release 可以看到。
    • 获取开发vcg的开发版本,可以通过命令
      git clone -b devel https://github.com/cnr-isti-vclab/vcglib.git

    文件夹结构

    VCG库主要由头文件构成(核心部分完全是头文件)而不依赖额外的东西. 只需下载压缩包并解压到一个
    文件夹. 例如, 解压到命名为 vcg 的文件夹, 并且设置为编译器的 include 目录. 以后, 你只需要
    app/sample/ 中的例子那样包含你需要的头文件即可.

    在 vcg 文件夹中, 你可以看到5个子文件夹:

    • vcg: vcg的核心代码,包括所有算法和数据结构的定义. 这部分纯粹使用大量的 C++ 模板和 STL 来实现通用的数据结构和算法. 除了包含C++ 标准库之外, 这里没有使用其他的库.
      注意: 核心部分仅由 *.h 文件组成.
    • wrap: 这里包含了一些额外的扩展wrap. 例如, 导入导出各种格式的网格数据, 通过OpenGL 渲染三角网格, 支持常见的GUI 工具,比如轨迹球, 等等…
    • apps: 这个文件夹包含了使用vcg开发的一些命令行程序. 许多都可以在 MeshLab 中找到. apps/sample 包含了许多很基础的小例子. 通过阅读这个文件夹中的例子来学习 vcg 是一种很好的方式.
    • docs: 文档存放在这里.(包含此教程)
    • eigenlib: 线性代数库eigen 的最新版本. vcg 的高级矩阵运算依赖于 eigen 库.
    展开全文
  • VCG库的使用

    千次阅读 2016-12-19 21:29:23
    使用vcg对点云进行采样时遇到了链接问题该网址提示了一个问题。通过将plylib.cpp加入当前工程,就可以解决这一问题。

    使用vcg对点云进行采样时遇到了链接问题

    该网址提示了一个问题。通过将plylib.cpp加入当前工程,就可以解决这一问题。

    展开全文
  • Ubuntu16.04安装 VCG

    2020-07-12 22:43:09
    安装 VCG 库使用托管在 github 的代码仓库...VCG库主要由头文件构成(核心部分完全是头文件)而不依赖额外的东西. 只需下载压缩包并解压到一个 文件夹. 例如, 解压到命名为 vcg 的文件夹, 并且设置为编译器的includ...

    安装

                                        或者 https://github.com/cnr-isti-vclab/vcglib/

    git clone https://github.com/cdcseacave/VCG.git vcglib
    

    如果有下面这个问题:

    fatal: unable to access 'https://github.com/cdcseacave/VCG.git/': GnuTLS recv error (-54): Error in the pull function.

    就输入下面这个命令进行下载:

    git clone git://github.com/cdcseacave/VCG.git vcglib

     下载完,将文件移动到自己的software目录中即可,无需编译

    mv vcglib ~/software/

    完成。 

    文件夹结构

    VCG库主要由头文件构成(核心部分完全是头文件)而不依赖额外的东西. 只需下载压缩包并解压到一个
    文件夹. 例如, 解压到命名为 vcg 的文件夹, 并且设置为编译器的 include 目录. 以后, 你只需要
    像 app/sample/ 中的例子那样包含你需要的头文件即可.

    在 vcg 文件夹中, 你可以看到5个子文件夹:

    • vcg: vcg的核心代码,包括所有算法和数据结构的定义. 这部分纯粹使用大量的 C++ 模板和 STL 来实现通用的数据结构和算法. 除了包含C++ 标准库之外, 这里没有使用其他的库.
      注意: 核心部分仅由 *.h 文件组成.
    • wrap: 这里包含了一些额外的扩展wrap. 例如, 导入导出各种格式的网格数据, 通过OpenGL 渲染三角网格, 支持常见的GUI 工具,比如轨迹球, 等等…
    • apps: 这个文件夹包含了使用vcg开发的一些命令行程序. 许多都可以在 MeshLab 中找到. apps/sample 包含了许多很基础的小例子. 通过阅读这个文件夹中的例子来学习 vcg 是一种很好的方式.
    • docs: 文档存放在这里.(包含此教程)
    • eigenlib: 线性代数库eigen 的最新版本. vcg 的高级矩阵运算依赖于 eigen 库.

    参考:https://blog.csdn.net/zdafei2010/article/details/77131563

               http://www.voidcn.com/article/p-nxwlcrkm-xv.html

    展开全文
  • VCG库提供了几种编码网格的方式,但最常用的一种是顶点向量容器和三角形向量容器(如用于三角网格的三角形和用于四边形网格的四边形)。以下是一个VCG网格类型的定义: class MyMesh: public vcg::tri::TriMesh< ...

    如何定义网格类型

    VCG库提供了几种编码网格的方式,但最常用的一种是顶点向量容器和三角形向量容器(如用于三角网格的三角形和用于四边形网格的四边形)。以下是一个VCG网格类型的定义:

    class MyMesh: 
    public vcg::tri::TriMesh< std::vector<MyVertex>, std::vector<MyFace> , std::vector<MyEdge>  > {
    };
    

    其中,vcg::tri::TriMesh是定义三角网格的基类,基于如下模板:包含顶点的容器类型和包含面片的STL随机访问容器类型。
    换句话说,网格的定义只需要从vcg::tri::TriMesh中派生并提供个人编码网格的元素容器。下面的示例中我们还传递了一个std::vector<MyEdge>,很快会看到,其代表的是边。

    #include<vcg/complex/complex.h>
    class MyVertex; class MyEdge; class MyFace;
    struct MyUsedTypes : public vcg::UsedTypes<vcg::Use<MyVertex>::AsVertexType,
                                               vcg::Use<MyEdge>  ::AsEdgeType,
                                               vcg::Use<MyFace>  ::AsFaceType>{};
    class MyVertex  : public vcg::Vertex<MyUsedTypes, vcg::vertex::Coord3f, vcg::vertex::Normal3f, vcg::vertex::BitFlags  >{};
    class MyFace    : public vcg::Face<MyUsedTypes, vcg::face::FFAdj,  vcg::face::VertexRef, vcg::face::BitFlags > {};
    class MyEdge    : public vcg::Edge<MyUsedTypes> {};
    class MyMesh    : public vcg::tri::TriMesh<std::vector<MyVertex>, std::vector<MyFace> , std::vector<MyEdge>  > {};
    

    面片、边和顶点是理解VCG库的关键元素。一个顶点、一条边、一个面片以及一个四面体仅仅是用户定义的属性集合。例如,你可能希望MyVertex包含顶点的坐标,那么在该顶点处的表面法线、颜色等要如何处理?VCG库给您提供了一种方式,使得您可以在每个顶点、边或者面片中存储想要的属性。例如,以下定义了三种顶点类型,复杂度逐渐增加:

    class MyVertex0  : public vcg::Vertex< MyUsedTypes, vcg::vertex::Coord3f, vcg::vertex::BitFlags  >{};
    class MyVertex1  : public vcg::Vertex< MyUsedTypes, vcg::vertex::Coord3f, vcg::vertex::Normal3f, vcg::vertex::BitFlags  >{};
    class MyVertex2  : public vcg::Vertex< MyUsedTypes, vcg::vertex::Coord3f, vcg::vertex::Color4b, vcg::vertex::CurvatureDirf,
                                                        vcg::vertex::Qualityf, vcg::vertex::Normal3f, vcg::vertex::BitFlags  >{};
    

    vcg::Vertex是VCG中顶点的基类。vcg::UsedTypes则声明了网格定义中涉及的类型。实际上,它是一个用户自定义实体类型的名称以及这些实体类型在网格定义中所起作用之间的映射。该映射是使用带语法的模板参数实现的。它看起来很繁琐,但对于使用来说非常方便。正如你所看到的,上述三种顶点定义的模板参数(或者成分)不同。这些参数指定了顶点类型中存储的值。
    为了方便,VCG库中实现了许多参数,完整的参数列表可以在Vertex ComponentsEdge Components以及Face Components包中找到。你可以任意组合这些参数作为自定义顶点/边/面片类型的模板参数(顺序不重要)。现在,我们能够有效地定义MyMesh类型:

    #include<vcg/complex/complex.h>
    class MyVertex; class MyEdge; class MyFace;
    struct MyUsedTypes : public vcg::UsedTypes<vcg::Use<MyVertex>   ::AsVertexType,
                                               vcg::Use<MyEdge>     ::AsEdgeType,
                                               vcg::Use<MyFace>     ::AsFaceType>{};
    class MyVertex  : public vcg::Vertex< MyUsedTypes, vcg::vertex::Coord3f, vcg::vertex::Normal3f, vcg::vertex::BitFlags  >{};
    class MyFace    : public vcg::Face<   MyUsedTypes, vcg::face::FFAdj,  vcg::face::VertexRef, vcg::face::BitFlags > {};
    class MyEdge    : public vcg::Edge<   MyUsedTypes> {};
    class MyMesh    : public vcg::tri::TriMesh< std::vector<MyVertex>, std::vector<MyFace> , std::vector<MyEdge>  > {};
    int main( int argc, char **argv )
    {
      if(argc<2)
      {
        printf("Usage trimesh_base <meshfilename.obj>\n");
        return -1;
      }
      MyMesh m;
      if(vcg::tri::io::ImporterOFF<MyMesh>::Open(m,argv[1])!=vcg::tri::io::ImporterOFF<MyMesh>::NoError)
      {
        printf("Error reading file  %s\n",argv[1]);
        exit(0);
      }
      vcg::tri::RequirePerVertexNormal(m);
      vcg::tri::UpdateNormal<MyMesh>::PerVertexNormalized(m);
      printf("Input mesh  vn:%i fn:%i\n",m.VN(),m.FN());
      printf( "Mesh has %i vert and %i faces\n", m.VN(), m.FN() );
      return 0;
    }
    

    注:vcg::face::VertexRef是一个属性,该属性存储三个指向顶点类型的指针,因此实现了可索引的数据结构。这是一个为什么MyFace类型需要知道MyVertex类型的示例。

    如何创建网格

    当声明好网格类型后,你可能想要实例化一个对象并且使用顶点和三角形去填充该对象。经典的做法就是打开一些诸如上述代码中的文件。也许你能想到对顶点和面片容器进行push_back操作。实际上,这是错误的方法,因为将元素添加到容器中可能会产生副作用。我们在Allocating and Deleting mesh elements页面中讨论这个问题并给出正确的添加网格元素的方法。

    网格元素的flags

    通常,对于网格的一个元素来说,我们为其分配一个小的bit向量容器,该容器包含顶点和面相关的位信息。例如,顶点的删除仅仅在该向量中标记为一个删除位。更多有关flags的细节请查看Bit Flags页面。

    如何处理网格

    在网格上执行某些操作的算法通常被编写为类的静态成员函数。 例如,下面插入的代码是UpdateNormals类的一部分,该类包含几种计算法线值的算法。

    ...
    template <class ComputeMeshType>
    class UpdateNormals{
    ...
    // Calculates the face normal (if stored in the current face type)
    static void PerFace(ComputeMeshType &m)
    // Calculates the vertex normal. Without exploiting or touching face normals
    // The normal of a vertex v is the weigthed average of the normals of the faces incident on v.
    static void PerVertex(ComputeMeshType &m)
    // Calculates both vertex and face normals.
    // The normal of a vertex v is the weigthed average of the normals of the faces incident on v.
    static void PerVertexPerFace(ComputeMeshType &m)
    ...
    };
    

    该类是名为UpdateValue类的核心部分,该类可计算顶点或面片属性的值,可以在文件夹vcg / complex / trimesh / update中找到。 例如,以下示例显示如何计算法线以及每个顶点的均值和高斯曲率值:

    #include <vector>
    #include <vcg/simplex/vertex/base.h>
    #include <vcg/simplex/vertex/component.h>
    #include <vcg/simplex/face/base.h>
    #include <vcg/simplex/face/component.h>
    #include <vcg/complex/trimesh/base.h>
    #include <vcg/complex/trimesh/update/normals.h>     //class UpdateNormals
    #include <vcg/complex/trimesh/update/curvature.h>   //class UpdateCurvature
    class MyVertex;
    class MyFace;
    class MyUsedTypes: public vcg::UsedTypes< vcg::Use<MyVertex>::AsVertexType>,
                                              vcg::Use<MyFace>::AsFaceType>
    class MyVertex: public vcg::Vertex<MyUsedTypes, vcg::vertex::BitFlags,vcg::vertex::Coord3d, vcg::vertex::Normal3f,vcg::vertex::Curvaturef>{};
    class MyFace: public vcg::Face<MyUsedTypes, vcg::face::BitFlags,vcg::face::VertexRef>{};
    class MyMesh: public vcg::tri::TriMesh< std::vector<MyVertex>, std::vector<MyFace> > {};
    int main()
    {
      MyMesh m;
      // fill the mesh
      ...
      // compute the normal per-vertex -> update the value of v.N() for all v (vcg::vertex::Normal3f)
      vcg::tri::UpdateNormals<MyMesh>::PerVertexPerFace(m);
      // compute the curvature per-vertex -> update the value of v.H() and v.K() (vcg::vertex::Curvaturef)
      vcg::tri::UpdateCurvature<MyMesh>::MeanAndGaussian(m);
      return 0;
    }
    

    除了更新网格属性值的算法之外,VCG库还提供了从另一个源创建网格的算法,例如从点集(通过Ball Pivoting方法)或从体数据集的等值面(通过Marching Cubes 算法)。这些算法可以在vcg / complex / trimesh / create /中找到。 最后,您可以在/ vcg / complex / trimesh下找到用于细分(中点,循环,蝶形…),平滑,封闭孔和其他当前未归类在任何特定标题下的算法。

    展开全文
  • 创建元素 创建单个三角面片或者向已有的网格中新增元素,可以使用AddVertices和AddFaces函数。元素是添加到网格(存储)的末尾的。这些函数返回指向第一个分配元素的指针。...class MyMesh : public vcg
  • 其中“/path to vcglib/ vcglib”需要改为vcg库的实际文件位置,我的vcg库文件位置为“/home/xie/vcglib/vcg”,即需要将上述代码改为 cmake . ../openMVS -DCMAKE_BUILD_TYPE=Release -DVCG_ROOT="/home/xie/vcglib...
  • 几个经典的数学之一学习---VCGlib

    千次阅读 2017-11-13 10:49:45
    1. VCG Libary是Visulization and Computer Graphics Libary(可视化与计算机图形学)的缩写,是一个开源的C++模板,用于三角网格和四面体网格的控制、处理和OpenGL显示。其中包含了超过100 000行的代码。基于该...
  • VCG简介与安装

    千次阅读 2016-09-07 17:58:53
    1 学习背景 最近在需要用到meshlab中的网格简化与平滑功能并要嵌到...最后发现meshlab中的简化和平滑功能原来是依赖于VCG这个的,并且VCG是可以单独使用的,于是就开始学习VCG,然后封装成项目需要的接口。2 VCG简介
  • VCG Eigen学习记录

    2018-08-14 21:50:18
    线性代数的eigen最近的稳定版本的一个副本(相当于就是借用第三方了),VCGLib中的高级矩阵操作都是基于这个的。  用vs编译使用Eigen非常方便。 #include &lt;iostream&gt; #include &lt;...
  • 本文使用vcglib进行读取obj文件(其他各种3d模型格式也是同样的方法)并显示,但是目前仍然遇到一些问题没有解决:读取的纹理信息全部缺失(读出来全部为0,因此下图并没有贴纹理),查了很久真心不知道为什么,...
  • VCGlib资源及解决VCGlib之中的“ LNK2019: 无法解析的外部符号”问题问题描述解决办法VCGlib资源...LNK2019 无法解析的外部符号 "private: void __cdecl vcg::ply::PlyFile::compile(class vcg::ply::PlyElement...
  • vcglib实例

    2019-02-19 19:19:32
    vcglib实例 先给出MyMesh 添加线属性 vcg::tri::UpdateTopology::AllocateEdge(m);
  • VCG文档 - 基本概念 (Basic Concepts)

    千次阅读 2017-08-15 17:52:10
    如何定义曲面网格类型vcg 可以用多种方式表达一个曲面网格, 通常的方式是一个顶点集合和一个三角形集合(例如, 由三角形组成的三角网格). 下面一行代码是定义曲面类型的例子:class MyMesh : public vcg::tri::...
  • 用于命令行和Maya的VCG库 适用于Autodesk Maya和独立命令行网格处理实用程序的VCG包装器节点。 Autodesk Maya的这组节点和命令旨在将集成到Maya工作流程中,并允许进行批处理网格处理。 特征 独立的命令行实用程序...
  • MeshLab和VCG的开发环境配置

    万次阅读 2012-10-22 23:02:08
    Meshlab和VCGlib都是意大利国立研究院的作品...VCGlib是标准C++写的,其提供了IO与封装OpenGL来显示。Meshlab的界面是用QT来写的,因此需要QT SDK的支持。 各软件的地址链接为: (1)MeshLab源代码SVN: https:/
  • 有关简短介绍和说明,请参见此资料中的MINES ParisTech / CRI技术报告,。 有关正确的说明,另请参见文件头。 用法 从VCG_Search_as_General_VCG.v文件开始,以运行整个项目。 否则,如果只想运行此General_VCG_...
  • 邻接关系VCG 没有单一的,硬编码的方式来对三角形和边之间的关系进行编码. 这一切都取决于存储哪些属性以及如何使用它们. 在前面几节的例子中, 面的定义总是包含 vcg::face::VertexRef 属性, 这个属性存储了可以...
  • 1. VCG Libary是Visulization and Computer Graphics Libary(可视化与计算机图形学)的缩写,是一个开源的C++模板,用于三角网格和四面体网格的控制、处理和OpenGL显示。其中包含了超过100 000行的代码。基于该...
  • VCG 专门用于管理三角形网格:该相当大,并提供了许多用于处理网格的最先进功能,例如: 基于高质量二次误差边缘塌陷的简化, 高效的空间查询结构(统一网格、散列网格、kdtree 等), 先进的平滑和整流算法...
  • 工具的函数. 下面的例子展示了从一个二十面体中删除一些面: // Now fill the mesh with an Icosahedron and then delete some faces vcg ::tri ::Icosahedron (m); vcg ::tri ::Allocator < MyMesh > :...
  • VCGLib数据结构

    2019-04-06 10:49:05
    VCG Libary是Visulization and Computer Graphics Libary(可视化与计算机图形学)的缩写,是一个开源的C++模板,用于三角网格和四面体网格的控制、处理和OpenGL显示。其中包含了超过100 0...
  • VCG Libary概述,安装及文件夹结构介绍。
  • vcglib数据结构(1)

    千次阅读 2018-08-07 18:23:14
    1. VCG Libary是Visulization and Computer Graphics Libary(可视化与计算机图形学)的缩写,是一个开源的C++模板,用于三角网格和四面体网格的控制、处理和OpenGL显示。其中包含了超过100 000行的代码。基于该...
  • VCGlib入门记录一

    千次阅读 2017-04-13 11:21:25
    vcg::tri::io::ImporterOFF<MyMesh>::Open(m, argv[1]) 函数 打开的底层代码是针对OFF文件,而非OBJ文件, OFF,Object File Format,即物体文件格式,是一种三维模型文件格式。 物体文件格式...
  • OpenMVS 依赖的几个开源,有两个是可选的可以先不安装。 1. OpenCV version 4.5.2 or higher (注意:opencv 4.5.2版本需要的Eigen3版本为3.3.7,在安装opencv时需先安装Eigen3.3.7版本,opencv安装完成后再将Eigen...
  • VCG库 可视化和计算机图形库(简称VCG)是一个开放源代码的可移植C ++模板库,用于使用三角形和四面体网格的OpenGL进行操作,处理和显示 斯堪的纳维亚 对齐和合并范围数据的系统 沃尔弗 基于体积扩散的空穴填充剂 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 402
精华内容 160
关键字:

vcg库