三维建模:方法之CSG与B-Rep比较

摘要:
BRep优点:1.有较多的关于面、边、点及其相互关系的信息。以CSG法为系统外部模型,以B-Rep法为内部模型,CSG法适于做用户接口,而在计算机内部转化为B-Rep的数据模型。相当于在CSG树结构的结点上扩充边界法的数据结构。混合模式是在CSG基础上的逻辑扩展,起主导作用的是CSG结构,B-Rep的存在,减少了中间环节中的数学计算量,可以完整的表达物体的几何、拓扑信息,便于构造产品模型。

源自于百度百科:实体造型---

三维模型特征表示方法:

计算机中表示三维形体的模型,按照几何特点进行分类,大体上可以分为三种:线框模型、表面模型和实体模型。如果按照表示物体的方法进行分类,实体模型基本上可以分为分解表示、构造表示CSG(Constructive Solid Geometry)和边界表示BREP(Boundary Representation)三大类。

常用的分解表示法有:四叉树、八叉树、多叉树、BSP树等等。

构造表示的主要方法:扫描表示、构造实体几何表示、特征和参数化表示。
边界表示的典型代表是翼边结构。
CSG建模法,一个物体被表示为一系列简单的基本物体(如立方体、圆柱体、圆锥体等)的布尔操作的结果,数据结构为树状结构。树叶为基本体素或变换矩阵,结点为运算,最上面的结点对应着被建模的物体;而BREP的一个物体被表示为许多曲面(例如面片,三角形,样条)粘合起来形成封闭的空间区域。
BRep优点:
1. 有较多的关于面、边、点及其相互关系的信息。
2. 有利于生成和绘制线框图、投影图,有利于计算几何特性,易于同二维绘图软件衔接和同曲面建模软件相关联。


BRep局限:
由于它的核心信息是面,因而对几何物体的整体描述能力相对较差,无法提供关于实体生成过程的信息,也无法记录组成几何体的基本体素的元素的原始数据,同时描述物体所需信息量较多,边界表达法的表达形式不唯一。
CSG优点:
方法简洁,生成速度快,处理方便,无冗余信息,而且能够详细地记录构成实体的原始特征参数,甚至在必要时可修改体素参数或附加体素进行重新拼合。数据结构比较简单,数据量较小,修改比较容易,而且可以方便地转换成边界(Brep)表示。
CSG局限:
由于信息简单,这种数据结构无法存贮物体最终的详细信息,例如边界、顶点的信息等。由于CSG表示受体素的种类和对体素操作的种类的限制,使得它表示形体的覆盖域有较大的局限性,而且对形体的局部操作(例如,倒角等等)不易实现,显示CSG表示的结果形体时需要的间也比较长。
到底使用哪种方法呢?取决于不同的视角,他们各自都有优缺点,可以从以下几点来考虑:
1.现实 - 模型是否需要近似实际的材质密度,厚度和体积,或者是否需要显示真实的曲面细节
2.精度 - 需要什么样的精度级别
混合模式(Hybird Model)是建立在BRep与CSG的基础上,在同一系统中,将两者结合起来,共同表示实体的方法。以CSG法为系统外部模型,以B-Rep法为内部模型,CSG法适于做用户接口,而在计算机内部转化为B-Rep的数据模型。相当于在CSG树结构的结点上扩充边界法的数据结构。混合模式是在CSG基础上的逻辑扩展,起主导作用的是CSG结构,B-Rep的存在,减少了中间环节中的数学计算量,可以完整的表达物体的几何、拓扑信息,便于构造产品模型。
还有空间划分表示法,利用四叉树或八叉数的数据结构来表示2D/3D的模型。

免责声明:文章转载自《三维建模:方法之CSG与B-Rep比较》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Objective-C入门教程03:属性(@property和@synthesize)主流RPC框架通讯协议实现原理与源码解析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

redis数据结构详解之Hash(四)

序言Hash数据结构累似c#中的dictionary,大家对数组应该比较了解,数组是通过索引快速定位到指定元素的,无论是访问数组的第一个元素还是最后一个元素,所耗费的时间都是一样的,但是数组中的索引却没有实际意义,他只是一个位置而已。而我们在查找某个元素时,一般都会使用有意义的字段来做索引,这就产生啦dictionary。其实dictionary的实现,就...

长沙社区团购独角兽《兴盛优选》 18k 面试题记录,已拿offer!

长沙或者想从北上广大回长沙的小伙伴,应该都听说过《兴盛优选》,一家位于长沙市从事社区团购业务的独角兽企业。 目前日订单1000+万,在长沙薪资也较有诱惑力,要不要来挑战一下? 我在里面潜伏过一段时间,发现里面缺人非常严重,大家都知道长沙互联网发展的晚,目前《兴盛优选》的招人要求也比较高(相对长沙其他企业),所以招到满意的人非常少,100份简历可能只能进1到...

ES6 (9):iterator 遍历器

遍历器(Iterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。 作用: 一是为各种数据结构,提供一个统一的、简便的访问接口; 二是使得数据结构的成员能够按某种次序排列; 三是 ES6 创造了一种新的遍历命令for...of...

golang数据结构之双链表

目录结构:  doubleLink.go package link import ( "fmt" ) //HerosNode 链表节点 type HerosNode struct { ID int Name string pre *HerosNode //指针 next *HerosNode //指针 }...

【数据结构与算法】用go语言实现数组结构及其操作

引言   数组结构是一种很常见的数据结构,并且在大部分编程语言中都存在,这些语言都提供了现成的可以立马就能使用的数组这种数据结构。为了更好的理解数组,这边文章就是来实现数组。 数组的特点   1.内存中数据之间紧密排列在一起。   2.新增元素需要开辟内存空间用以存放新的元素。   3.新增元素时候,如果新增的元素在其他元素中间,那么该新增元素的位置后面所...

Unity3D中常用的数据结构总结与分析

Unity3D中常用的数据结构总结与分析  c#语言规范 阅读目录 1.几种常见的数据结构 2.几种常见数据结构的使用情景 来到周末,小匹夫终于有精力和时间来更新下博客了。前段时间小匹夫读过一份代码,对其中各种数据结构灵活的使用赞不绝口,同时也大大激发了小匹夫对各种数据结构进行梳理和总结的欲望。正好最近也拜读了若干大神的文章,觉得总结下常用的数...