BMesh - Blender 开发者文档

主要观点:BMesh 是一种非流形边界表示,旨在替代当前有限的 EditMesh 结构,解决其设计限制和维护问题,与 Radial Edge Structure 类似。
关键信息

  • 结构组成:BMesh 在四个主要元素结构中存储拓扑,包括面(Faces)、环(Loops)、边(Edges)、顶点(Verts),各元素存储不同信息且相互关联。
  • 连接循环:有磁盘循环(Disk Cycle)、环循环(Loop Cycle)、径向循环(Radial Cycle),通过循环维持拓扑实体间的关系,可快速推导全连接信息,函数用于处理各循环。
  • 编辑 API:分为低、中、高层,低层次提供遍历循环和局部编辑的 API,高层次可直接影响用户可见属性。
  • 未来工作:原设计中 BMesh 能处理单面色的多个边界即面中的洞,现暂不作为第一版 BMesh 功能合并目标。
    重要细节
  • 磁盘循环:每个边包含两个磁盘链接结构,用于跟踪边在顶点磁盘循环中的成员关系,bmesh_disk_*函数用于导航磁盘循环, wire 边可完全集成到拓扑数据库,且不受面的非流形条件影响。
  • 环循环:每个面由BMFaceBMLoop结构表示,BMFace通过l_first指针指向面的环循环中的第一个BMLoopBMLoop结构类似半边缘,顶点指针与面相关。
  • 径向循环:类似径向边缘数据结构,每个边存储一个指向其BMLoop的指针作为基,通过遍历BMLoopnextprev指针可访问与边相关的面。
  • 编辑 API 低层:提供遍历循环和局部编辑的函数,如bmesh_split_edge_make_vert等欧拉算子,可组合实现各种非流形建模操作,且每个算子利用持久邻接信息修改局部拓扑。
  • 编辑 API 中层:BMesh 运算符基于低层 API,提供基本的网格编辑功能,可嵌套调用,通过操作符槽接收输入和返回输出,有整数、浮点数、指针、元素缓冲区、映射等槽类型。
  • 编辑 API 高层:网格编辑工具连接网格编辑器和 Blender 界面,可直接由用户运行或被脚本调用,是唯一能修改头标志(如可见性、选择等)的部分。
阅读 15
0 条评论