几何内核是现代工业软件的核心,涉及大量工业行业。但是核心就几个点:
- 基础图元表示与计算,如园,平面,直线,线段等
- 基础几何关系的函数判断:距离,夹角,平行,共线等
- 一个统一离散与连续的建模框架。简单来说,多边形曲面也好,还是连续曲线曲面可以互相转换,或者说IO友好,便于上下游操作。
这一块说一说自己的理解,因为目前还没有学完涉及几何的数学领域,目前也只是简单学了一点,有点实践。
一个简单的例子,比如一个圆,只需要半径和中心点坐标参数就可以使用,这就是连续图元的表示;
如果一个圆里面有多个不同的圆形小孔,我们如何导出到下游操作?一种选择是大圆和小孔的半径和圆心坐标,这时候就需要一些表示基础图元空间关系的一个函数工具辅助下游运算;
如果圆里面的小孔不是圆形,而是多个不规则形状的小孔呢?我们这时候可能需要离散化近似,可能是限制边界的三角剖分,即用三角形离散模拟这种形状
再进一步,如果把这个圆在空间沿z轴旋转成了一个球,我们要如何表示与计算?我们或许想知道,每个维度的坐标之间是否会互相关联变化,这就算是分析各向异性与各向同性了
如果把一个球一样的西瓜切成多份,它们之间还有什么相似的几何特征?如果仍然把这些西瓜看成一个整体,如果把它们排成一排,一刀沿着差不多是中轴的位置切下去,这些西瓜的形状会由于实际的偏差发生哪些变化?如何快速判断这些变化?如果我们把这种关系离散化表示成图结构,我们这时候研究的就是图的连通性问题,以及不同的component之间的关系,如何统一计算的问题。
更进一步的,我们可能会通过敲击西瓜判断是否成熟?比如我们设定一个参数进去比如声音大小,判断西瓜内部的结构所蕴含的化学物理性质。这时候我们就踏入仿真的领域了,我们研究的就是几何结构与实际的物理化学性质的关联了。比如材料的分子动力学仿真,医疗器械的结构功能,地质结构与地震预测,大型建筑的稳定性与渗漏情况
还有一个有趣的点:比如我们想做一个简单的动画,比如一只兔子跑的情况。我们知道,兔子在一个时间段内,除了四肢与头部出现了一定的旋转以外,其他情况不变,那么我们要如何模仿这一点呢?比如我们有一个兔子的模型mesh,我们需要给腿部和头部加入一些旋转,但是整体的结构不变,而且我们还需要兔子在一个时间段内身体的旋转更平滑。这时候我们研究的随着时间维度一个复杂结构保证一定的拓扑不变性,以及有序的变化。 - 加速的数据结构以及不同精度,不同维度快速转换的模版结构。为什么需要加速的数据结构?为了快速进行局部定位,或者说一般情况下为了快速求交或者快速检索到特定位置,特定的邻域范围。对于需要重复检索或者复杂的几何结构,可以避免大量不必要的计算。
- 内存管理与多线程模块:目的就是为了加速计算。
- 渲染验证模块:复杂度和目的有关,基础的算法验证渲染模块是需要的。
- IO:因为目前模型格式不能说百花齐放,只能说是乱七八糟。连续与离散的几何结构或者复杂多层嵌入的几何结构进行高效通用的数据传递是个商业问题。商业上复杂的格式以及兼并策略导致的兼容性问题是其阻碍,技术上如果约定好问题不大。
- 与第三方库的结合使用:减少不必要开发,有成熟的东西就先用成熟的,先重新搞尽量提高开源工具的利用率,减少工程周期和实现难度。
- 数值计算与高性能计算:之所以单独拿出来说,单纯是因为重要。
- 如果说非要加一个点是什么?AI与几何结合,图像推测三维结构关系,分段场景生成或者连续几何场景生成,以及根据已知条件构造进行一定随机性的场景构建。简单说,就是怎么无脑构建大的几何场景而且还能被较低的硬件条件渲染出来或者利用?
几何内核只是一个基础,一个是实际工程问题可能需求实现起来比较麻烦,一个就是几何内核受限于数学和计算编程能力,解决不了特定问题。几何内核里面的东西梳理完需要并且测试完成并指出算法的局限性,需要一定的时间,后面会先以CGAL源码结合上面个人理解的几何内核框架进行分类介绍。
声明:
本文采用
BY-NC-SA
协议进行授权,如无注明均为原创,转载请注明转自
几何代码及文字整理
本文地址: 如何学习或写一个几何内核?
本文地址: 如何学习或写一个几何内核?
您必须 登录 才能发表评论