欢迎光临散文网 会员登陆 & 注册

几何图形的基础数据

2023-07-25 18:02 作者:一点十六  | 我要投稿

哈喽大家好,终于得空儿,来聊聊几何图形的数据,是如何记录的。


咱们常见的模型啊,一般有两种:多边形网格,和NURBS曲面。像咱们熟知的obj,fbx,abc等格式的模型,都属于多边形网格的范畴,而NURBS曲面呢,由于更擅长表现平滑的表面,常用于工业建模。

这篇文儿出发点,是为 Blender 几何节点那期视频做的补充,所以,咱们的主要话题,只围绕多边形网格展开。
从一个最简单的正方体开始,来瞧瞧,在计算机内,是如何画出3D模型的?


第一步:按位置画点

想要画出一个正方体,首先,需要画出8个顶点,顶点的位置数据,也就是这样一组3维的矢量:

现在,就得到了一片离散的点,也可以叫点云,每个点上只存储了点的位置属性。

稍微拓展一下,如果为每个点加上:速度,质量,ID,生命,半径,颜色等属性的数据,那就和粒子差不多了,所以,在几何节点模块,也是可以做粒子模拟的。


第二步:围点成面

咱们接着第二步,开始画立方体的6个面。也很简单,记下每个面,所包含的顶点编号,就可以把面画出来了。
所以,面的数据,是这样一组对点编号的引用:


看起来像是一组4维矢量,其实也不一定哈,这会儿都是4边面嘛,如果是三角面的话,那每个面就只有三个点的引用了。

至于边,算是衍生数据,包含在面的点引用之中,两个相邻点,就可以看作是一条边。

第三步:定义法向

接下来,咱们定义下面的正反,也就是法向。

每个面的法向,其实也是衍生数据,可以按照点的引用顺序,根据右手螺旋定则来确定,比如5号面的点顺序是:7,3,1,5,咱们用右手摆出个点赞的手势,让四指指向7,3,1,5,的螺旋方向,那么,大拇指指向的,就是5号面的法向。


第四步:展开UV

展UV的过程,是把三维模型的表面,展开,投射到一个二维的坐标上。

在这个过程中,咱们就不得不引入一个新的概念 - 面拐。
好奇怪的名字,感觉还是把英文:Face Corner,直译成:面角,更容易理解一些。
它的本意就是,面上的每个角。

为啥要再弄个新概念呢,你看哈,在展UV的过程中,原先的顶点会随着面,分裂成多个,比如正方体的0号点,在UV坐标上,就分在了3个位置上,总不能把三个UV坐标都存在这1个点上吧。

而面拐呢,它定义就是每个面所包含的角,所以先天性的,已经把面都拆分好了。

黑色为点序号,蓝色为面序号,紫色为面拐序号

二维的UV坐标,记录在面拐上,顺理成章,就可以把模型的表面展开。


总结

这么四步下来,3D的模型就算是构建出来了,再往后就是渲染的步骤了。

最后总结下:
对于3D模型,最基础的几何数据是:点的位置,和面对点的引用。
边和法向的数据都包含在面中,而UV数据存储在面拐中。

现在,多边形网格的4个数据域,或者说数据层级,点,边,面,面拐,就都带到了。
再往后,就看大家如何修改和使用这些数据了。

OK,以上就是本期的全部内容了,感谢大家的支持,咱们下期再见。




几何图形的基础数据的评论 (共 条)

分享到微博请遵守国家法律