zoukankan      html  css  js  c++  java
  • 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中的高级矩阵操作基于这个库。

    插件类图(继承关系)

  • 相关阅读:
    syslog日志格式解析
    Linux打补丁的一个简单例子
    Linux打补丁的一些问题
    安全漏洞整改解决方案(很不错网络文章)
    Linux系统启动过程
    chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息
    主机名/etc/hosts文件的作用
    Linux中如何配置IP相关文件
    /bin、/sbin、/usr/bin、/usr/sbin目录Linux执行文档的区别
    日志生成控制文件syslog.conf
  • 原文地址:https://www.cnblogs.com/brt2/p/14251184.html
Copyright © 2011-2022 走看看