• Meshlab架构解析


    1. src 源码目录

    csdn: Meshlab源码初探

    • common: 项目和插件常用到的功能函数和classes

    • external: 依赖的第三方库的源码,例如:

      • lib3ds

        Autodesk 3D Studio文件C语言库.

      • muparser

        Fast mathematical expressions parser library.

      • OpenCTM

        Library for compression of 3D triangle meshes.

      • bzip2

        File compression program that uses the Burrows–Wheeler algorithm.

      • jhead

        Extract and manipulate JPEG EXIFinformation of photos.

      • levmar

        The Levenberg-Marquardt algorithm is an iterative technique that finds a local minimum ofa function that is expressed as the sum of squares of nonlinear functions.通用的非线性最小二乘算法库.

      • glew

        The OpenGL Extension Wrangler Library.

      • qhull

        Qhullcomputes the convex hull, Delaunay triangulation, Voronoi diagram, halfspaceintersection about a point, furthest-site Delaunay triangulation, andfurthest-site Voronoi diagram. It runs in 2-d, 3-d, 4-d, and higher dimensions.研究解决凸包问题.

    • meshlab: 核心功能和GUI实现

      • 程序入口(MainWindow的实现,分别在mainwindow_RunTime和mainwindow_Init文件中)
      • 各种Actions(Render部分的生成,在rendermodeactions文件中)
      • Menus、Toolbars、Dialog等
    • meshlabserver: 运行在cmd的meshlab工具,常用于批量处理。

    • meshlabplugins: 插件集合

      meshlab中插件的加载有二种方式:

      1. 一种是遍历插件目录中的dll文件,进行加载。
      2. 另一种是遍历插件目录中的xml文件(例如:filter_measure.xml),通过判断是否存在与xml文件同名的dll文件和xml文件中是否包含javascript,进行不同方式的加载。

      其中,插件中的对话框等UI部分,都是通过MeshlabStdDialog和MeshLabXMLStdDialog二个类生成的。

      MeshLab对其功能的扩展是通过插件来实现的,通过实现不同的接口,可以将插件放在不同的菜单下或工具栏上。例如:MeshFilterInterface接口,用于实现Filter菜单下的插件。

      常见插件例如:

      • filter_meshing

        Mesh网格处理:缩放、移动、旋转,细分面,删除重复顶点等。

      • filter_select

        提供多种选择和删除方式。

      • filter_layer

        Mesh层操作。例如:删除/复制/重命名Mesh层、合并Mesh层等。

      • io_base

        导入/导出一些3D文件。例如:STL,PLY, OBJ等。

      • decorate_base

        绘制坐标轴、顶点、边角、边框、网格、标签、特征柱状图等。

      • edit_manipulators

        鼠标和键盘键进行操作:缩放、平移和旋转。

      • edit_align

        Mesh拼接。

      • edit_hole

        Mesh补洞。

      • edit_measure

        测量Mesh中选定距离。

      • render_gdp

        着色器:遍历加载与处理.gdp文件。

      • render_rfx

        着色器:遍历加载与处理.rfx文件。

      • sampleplugins

        扩展插件示例源码的目录。

    • use_cpu_opengl: 仅用于Windows平台,用于非GPU加速的OpenGL调用

    • vcglib: 核心功能库(项目子模块)

      vcglib采用标准C++开发,封装了IO,OpenGL等功能。核心功能如下:

      • 提供 Mesh(triangular mesh,tetrahedral mesh,三角网格或四面体网格)数据结构的定义,该数据结构支持对 Mesh数据的快速访问(拓扑信息、空间查询等)以及高效执行网格上算法;
      • 在 Mesh数据结构基础上,实现大量高效的网格算法,如网格修补、平滑、变形、曲率计算、细分、泊松盘采样、等值面计算等;
      • IO支持,读写 PLY、OBJ、STL、3DS、OFF、DXF 等格式网格文件;
      • UI 支持,如 OpenGL网格显示,Trackball交互等。

      目录结构:

      • vcg

        整个库的核心,定义了所有的算法和数据结构。

      • wrap

        包含一些针对特定需求/上下文/库的VCG概念的封装。例如:很多格式的网格数据的导入和导出,用OpenGL渲染三角形网格的代码等。

      • eigenLib

        线性代数库,VCGLib中的高级矩阵操作基于这个库。

    插件类图(继承关系)

  • 相关阅读:
    【Others】2048逻辑整理
    【MySQL】MySQL学习笔记(一)
    【PHP】对TP中session的理解
    【Python基础】python 作用域
    【phantomJs + selenium】动态cookie,数据采集记录
    [ZJOI2015][LOJ2137]诸神眷顾的幻想乡(广义SAM)
    [CF235C]Cyclical Quest(SAM)
    [BZOJ1426]收集邮票(概率期望dp)
    [HDU5421]Victor and String(PAM)
    [CF932G]Palindrome Partition(PAM回文划分dp)
  • 原文地址:https://www.cnblogs.com/brt2/p/14251184.html
Copyright © 2020-2023  润新知