Mesh BRep Shapes

eryar@163.com

Abstract. 当对OpenCASCADE的BRep表示法的数据结构有了一定的理解后,建议可以自己实现一个显示数据生成的功能,即网格剖分功能。

Key Words. BRep, Mesh, Triangulation

1. Introduction

在OpenCASCADE中网格剖分功能是很重要的一个模块,他可用于生成模型的可视化数据,还可用于HLR消隐,对于离散求交算法也是基于网格数据。OpenCASCADE开源版本中的模块TKMesh可以用来生成网格的显示数据,主要的类为BRepMesh_IncrementalMesh。

在使用BRepMesh_IncrementalMesh的过程中发现其剖分精度高,且精度不便于控制。如对一个球进行网格剖分,想得到一个粗糙的效果,即一个多边形,使用BRepMesh_IncrementalMesh是不容易得到的。

如上图所示为同一个球的不同的剖分精度得到的模型。为了能精确控制网格剖分精度,以便后期使用LOD等优化算法,自己实现一个网格剖分功能。

网格剖分的主要思路就是遍历每个TopoDS_Face的TopoDS_Wire,根据Wire找到边界或面上的孔洞。将Wire对应到二维参数空间,并对二维参数空间中的边界先进行一次三角网格剖分。对于平面来说,只需要这一步就可以满足可视化的要求。对于其他曲面来说,就需要在二维参数空间中额外插入一些点,以使最终生成的网格满足剖分精度要求。最后将二维参数空间的三角剖分映射到三维空间。

2. Mesh Boundary Region

因为使用BRepBuilderAPI_MakeFace可以通过Add(TopoDS_Wire)来添加面上的开孔,所以一个TopoDS_Face会有大于1个的TopoDS_Wire。找出外边界和内孔Wire后可进行一次三角剖分,如下图所示:

如上图所示,对于平面而言,直接对边界及内孔进行一次三角剖分即可以得到满意的网格数据。对于曲面而言,这显然是不满足精度要求的。

如上图所示为球面的第一次对边界进行三角剖分得到的效果。因为在一个参数上的边是退化Degenerated边,所以退化边的参数空间上没有均分。将参数空间的三角剖分映射到三维空间后,得到的是一条线,其实是两个非退化边。

3. Deflection Control

对于曲面来说,如果直对边界进行一次三角剖分,是达不到精度要求。为了使曲面网格剖分效果更好,就需要对按边界剖分后的网格进行插入点继续剖分。对于上面球面的参数空间区域,根据精度要求插入点剖分后的结果如下图所示:

得到的三维效果如下图所示:

4. Demo

下面给出几个自己实现网格剖分的结果与OpenCASCADE的TKMesh作个对比:

上图为自己实现网格剖分算法对椭球面的网格剖分结果

上图为TKMesh网格剖分算法对椭球面的网格剖分结果

上图为自己实现网格剖分算法对椭圆环面的网格剖分结果

上图为TKMesh网格剖分算法对椭圆环面的网格剖分结果

通过上面的对比可以发现,在大致相同的显示效果情况下,OpenCASCADE产生了更多的顶点和三角形数据。自己实现的网格剖分产生的网格质量相对可控且性能高。

5. Conclusion

OpenCASCADE中开源的网格剖分库TKMesh可以实现模型的可视化数据生成功能,但是对于网格剖分的精度可控性差。为了对模型的网格精度进行更好地控制,自己实现一套网格剖分功能,且性能要优于TKMesh。在程序的编写过程中,可以加深BREP数据结构中一些概念的理解。有兴趣的读者在熟悉BREP数据结构后,也可以尝试下网格剖分功能的实现。

转载于:https://www.cnblogs.com/opencascade/p/MeshBrep.html

Mesh BRep Shapes相关推荐

  1. BRep Shapes Based on Tessellated Geometry

    BRep Shapes Based on Tessellated Geometry eryar@163.com Key Words. BRep Shape, Tessellated Geometry, ...

  2. Topology Shapes of OpenCascade BRep

    Topology Shapes of OpenCascade BRep eryar@163.com 摘要Abstract:通过对OpenCascade中的BRep数据的读写,理解边界表示法的概念及实现 ...

  3. Opencascade 帮助手册学习1 Overview

    Opencascade 帮助手册学习 Overview Documentation Third-party libs Contens of OCCT-7.3.0 dir (OCCT root) Env ...

  4. ExtrudeGeometry

    ExtrudeGeometry ExtrudeGeometry可以从路径形状创建挤压几何体. var length = 12, width = 8;var shape = new THREE.Shap ...

  5. Unity中Skinned Mesh Renderer Blend Shapes小试

    第一个应用:如何使用网格渲染器Blend Shapes Unity制作木棍剥皮 1. Intro 2.Modeling (Blender) 打开Blender 软件 调整视角 然后快捷键: Shift ...

  6. 多边形网格到B-Rep实体转换:算法详细信息和C ++代码示例

    Using a triangulation algorithm (known as tessellation) on a model's boundary representation is rela ...

  7. 图形学笔记(十九)动画 —— 动画的历史、关键帧插值、物理仿真、质点弹簧系统、粒子系统、(反向IK)动力学、Rigging 绑定、Blend Shapes、动作捕捉

    图形学笔记(十八)光场.颜色和感知-- 光场相机(全光函数.光线和光场的定义).可见光谱.谱功率密度.颜色的生物学基础.Tristimulus Theory.同色异谱.加色与减色系统.颜色空间SPD ...

  8. Mesh is Art(5):Circle Packing Mesh优化及其应用

    Mesh is Art(5) Circle Packing Mesh优化及其应用 Circle Packing在各个领域中的应用 CP Mesh优化原理 和CP Mesh相关的几何性质 优化算法 CP ...

  9. Unity 之 Mesh

    Meshes Unity 内置提供了 ProBuilder 插件可以在unity里面创建模型 Unity支持三角形或四边形多边形网格,因此您必须将Nurbs.Nurms和Subdiv曲面转换为多边形. ...

最新文章

  1. 3位物理学家获基础物理学特别突破奖
  2. Docker建网站 4条命令搞定
  3. 架构师之路 — 分布式系统 — gRPC 的 4 种服务定义及调用方式
  4. 【数字信号处理】傅里叶变换性质 ( 序列傅里叶变换共轭对称性质示例 | 证明 原序列实部 x_R(n) 的 傅里叶变换 是 原序列傅里叶变换 的 共轭对称序列 )
  5. MySQL修改数据表(ALTER TABLE语句)
  6. 开发中的几种加密算法的使用场景
  7. jQuery中国各个省份地图分部代码
  8. 基于Echarts+HTML5可视化数据大屏展示—企业生产销售作战指挥室数据平台
  9. sql2005关闭c2审核_C2审核–使用C2审核模式SQL Server审核和通用标准合规性
  10. 【转】B树的插入和删除
  11. ORACLE Physical Standby 级联备库搭建
  12. 撤销excel工作表保护
  13. 计算机电源接口图,电脑电源接口定义图解
  14. 关查找我的iphone时显示服务器连接超时,iPhone 屏幕镜像无法关闭,一直显示“正在查找 Apple TV”怎么办?...
  15. 电子计算机的指令是由什么和什么组成的,吴承亮问:计算机指令由两部分组成它们是 计算机指令由哪两个字段组成,各自的作用是什么?...
  16. 情侣的网站代码java_GitHub - 90x64/lovers-website: 程序员的情侣网站 (programmer's website of lovers)...
  17. 微信小程序-腾讯云即时通信 IM 小程序直播(一)
  18. Python取某个目录下的所有的EXCEL
  19. xmanager登陆linux黑屏,使用xmanager工具登陆linux服务器时黑屏问题
  20. 小波阈值去噪的原理及程序

热门文章

  1. 2014年用户最买账的五款手机应用
  2. 集团公司固定资产管理的痛点和解决方案
  3. PHP之美团餐饮系统,订单推送,订单同步,订单消息回调
  4. c语言wchar转化为char_烦人的char*,wchar_t*或者WCHAR转换
  5. python编程控制示波器设备_测试普源设备控制软件 RglComm
  6. 核心交换机安全多业务高性能万兆交换机
  7. 今日!云洲智造直播间开讲啦
  8. JAVA中parse和format用法
  9. 最新 | 河北省将编程教育纳入中小学课程体系,编程教育逐渐低龄化!
  10. 救灾军人最感人的瞬间