计算机图形学(九):三维对象的表示(三维几何模型的CSG树和B-rep表示)

2023-10-30 14:20

本文主要是介绍计算机图形学(九):三维对象的表示(三维几何模型的CSG树和B-rep表示),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

构造表示法

体素构造CSG的原理和方法

空间形体的正则集合运算

建立实体模型的一般过程

空间形体的CSG树表示

边界表示法


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

构造表示法

CSG建模法,一个物体被表示为一系列简单的基本物体(如立方体、圆柱体、圆锥体等)的布尔操作的结果,数据结构为树状结构。树叶为基本体素或变换矩阵,结点为运算,最上面的结点对应着被建模的物体;而BREP的一个物体被表示为许多曲面(例如面片,三角形,样条)粘合起来形成封闭的空间区域。

更严谨的表述:

边界表示法是用实体的表面来表示实体的形状,它的基本元素是面、边、顶点。它以欧拉公式作为理论基础,要求实体的基本拓扑结构符合欧拉公式。目前采用的比较多的数据结构是翼边数据结构和半边数据结构(又称对称数据结构)。

实体构造表示法的基本思想是将简单的实体(又称体素)通过集合运算组成所需要的物体。其中,集合运算的实现过程由一棵二叉树来描述,二叉树的叶子节点表示体素或者几何变换的参数,非终端节点表示施加于其子结点的正则集合算子或几何变换的定义。

体素构造CSG的原理和方法

CSG(Constructive Solid Geometry)体素构造表示法,是用计算机进行实体造型的一种构形方法,也是一种新的构形思维方式。这种构形方法的描述,既符合空间形体的构形过程,又能满足计算机实体造型的要求。体素构造表示法把复杂的实体,看成由若干较简单的最基本实体经过一些有序的布尔运算而构造出来,这些简单的最基本的实体称为体素。

空间形体的正则集合运算

并:

交:

差:

 

建立实体模型的一般过程

从上到下,逐渐建立实体模型:

 

空间形体的CSG树表示

CSG树结构建立实体模型时使用的布尔运算,可以形成一个记录每步执行信息的层结构或者树结构。

根据支架的投影,构造其CSG树:

CSG总结

数据结构:二叉树结构,记录了实体所有基本体素的组成、正则集合运算和相关的几何变换。

特点:方法简洁,生成速度快,处理方便,无冗余信息,而且能够详细地记录构成实体的原始特征参数,甚至在必要时可修改体素参数或附加体素进行重新拼合。数据结构比较简单,数据量较小,修改比较容易,而且可以方便地转换成边界(Brep)表示。

缺点:没有详细几何信息,必须转化为其它形式才能对点、边、面等信息进行查询和编辑。由于信息简单,这种数据结构无法存贮物体最终的详细信息,例如边界、顶点的信息等。由于CSG表示受体素的种类和对体素操作的种类的限制,使得它表示形体的覆盖域有较大的局限性,而且对形体的局部操作(例如,倒角等等)不易实现,显示CSG表示的结果形体时需要的间也比较长。

边界表示法

B-rep的概念

通过面、环、边、顶点的几何和拓扑参数来表示实体。

B-rep的总结

数据结构:是以边为中心的翼边结构,通过任意一条边,可以遍历整个实体所有几何元素。

BRep优点:
     1. 有较多的关于面、边、点及其相互关系的信息。
  2. 有利于生成和绘制线框图、投影图,有利于计算几何特性,易于同二维绘图软件衔接和同曲面建模软件相关联。

BRep局限:
  由于它的核心信息是面,因而对几何物体的整体描述能力相对较差,无法提供关于实体生成过程的信息,也无法记录组成几何体的基本体素的元素的原始数据,同时描述物体所需信息量较多,边界表达法的表达形式不唯一。 

这篇关于计算机图形学(九):三维对象的表示(三维几何模型的CSG树和B-rep表示)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/308489

相关文章

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

C++/类与对象/默认成员函数@构造函数的用法

《C++/类与对象/默认成员函数@构造函数的用法》:本文主要介绍C++/类与对象/默认成员函数@构造函数的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录名词概念默认成员函数构造函数概念函数特征显示构造函数隐式构造函数总结名词概念默认构造函数:不用传参就可以

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结