您需要 登录 才可以下载或查看,没有账号?注册
x
大家好计算机图形学的同学,我们需要的两大数据是三角形或3d模型和纹理,我们会在下一集中看看纹理,所以今天我们将讨论三角形(内有多个动态图)
来开始! 我想要看的一个3d模型,比如这个消防栓,如果我们像这样展示它是如何由三角形构成的还不是很明显,
然而,如果我展示这个线框覆盖模型变得更数学化。它是由多边形构成的,而多边形只是平面图形由线段组成,例如我们有一个由三个线段组成的三角形,我们有一个四边形或还有一个五边形,六边形,七边形,八边形,我还可以继续讲下去我已经把这些多边形以规则形式显示出来了,
但我也可以把它们画出来,他们的不规则形式不会改变他们的名字,因为名字是基于组成它们的行数,
你可能已经注意到我们的3d模型大部分是由四边形组成的,因为它们允许您在整个页面上创建水平线和垂直线
3d艺术家易于使用的模型,但这并不意味着我们只能使用引号,例如消防栓的盖子是用三角形封闭的,我们也可以用八边形来把它封闭起来
这种多边形不容易使用,相反,如果所有东西都是三角形,因为它只包含三个点简化了大量的数学过程,将多边形转换为一堆三角形的过程称为三角剖分
我们有两个选项,要么多边形是凸的,要么多边形是凹的 在凸多边形中,所有内角都小于180度,我是说凹多边形至少有一个内角大于180度,同时,您通过凸多边形绘制的任何线只会与多边形相交两次,而在凹多边形中您可以绘制至少一条与凸多边形的三角剖分相交四倍的线。
很简单,随便选一个点然后逆时针移动顺时针方向,这就是我要做的在这个例子中我们跳过第一点,我们会画一条线到我们遇到的下一个点继续标记点,用直线将它们连接到我们原点,当然,我们不需要在最后一点上画一条线,因为那不会创建一个新的三角形,我们已经三角形我们的凸多边形进行三角测量。
不幸的是,这种方法不适用于凹多边形的三角剖分但让我们试着说明为什么,我们随机选择一个点跳过下一个点然后继续到下一个点,画一条线,但是这条线在我们的凹多边形之外引入了一个三角形,因此改变了它的形状,解释解决这个问题的算法超出了本文的范围。
你不应该真的在3d模型中使用凹多边形,所以在三角剖分之后我们最终得到的是一堆三角形,现在的问题是我们如何告诉计算机这些三角形。我们使用顶点缓冲区来做到这一点
三角形由三个点组成顶点缓冲器,一个三角形由计算机图形学中的三个点组成在计算机图形学中我们称之为顶点,或者它是一个奇异的顶点,这些顶点与这些顶点相连在它们之间有一个最重要的面,关于这些顶点我们需要的信息是它们的位置
我们要画一个坐标系,现在我们可以给坐标赋值你应该考虑这些顶点的坐标位置向量,也就是说它们是从原点开始的向量,将我们顶点的这些坐标或位置称为顶点属性,并在在这种情况下每个顶点的属性都是它现在的位置
是时候引入顶点缓冲区了,它是内存中的一个位置,我们可以存储所有这些属性给定计算机的顶点缓冲区,我们可以从第一个顶点开始重建三角形顶点缓冲区向第二个顶点绘制一条直线第三个顶点,通过回到第一个顶点来封闭哪些顶点存储在顶点缓冲区中是非常重要的,因为如果你仔细观察,就会发现它决定了缠绕顺序如果我们改变顶点的顺序,就会沿顺时针方向移动然后,三角形生成的顺序将改变因此,现在的缠绕顺序是逆时针的对于标记属性,
我们不局限于我们可以指定的位置,我们想要的属性例如颜色,这些颜色属性会被存储在顶点缓冲区中,以及顶点的所有其他属性。有趣的是顶点属性是内插的在三角形表面上所以如果我们把颜色形象化我们会得到这样的彩虹三角形,因为红绿蓝可以插值。
例如,要知道这一点的位置,计算机可以计算出来它在x y z轴上的坐标是0通过插值我们的3个位置顶点缓冲,有一个小问题,但是要解决这个问题我需要引入索引缓冲区,
假设我们不想画一个三角形,我们想要的是一个正方形,当然是由两个三角形组成的,但如果我们想将这个正方形的信息存储在我们的顶点中,我们当然想要一个由两个三角形组成的正方形,现在在顶点中每三个元素追加第二个三角形的顶点,顶点缓冲区代表一个三角形我们可以添加更多的三角形将他们的数据添加到顶点,
但是问题是,左上角的顶点是重复的,右下角的顶点也是重复的。如果我们可以删除这些重复项,并且只在顶点缓冲区中存储唯一值那就更好了,但是现在三角形不再是顶点缓冲区中的唯一值,但是现在三角形不再以三个为一组进行分组,解决这个问题的第一步是为每个索引从零开始的顶点分配一个索引,因为程序员从0开始计数,一直到现在重新创建我们的三角形的顶点数量,我们需要一个索引缓冲区,我们要存储每个三角形顶点的下标第一个三角形是0 1和2第二个三角形是0 2和3注意到我们对每个三角形都遵循相同的顺序,这些缓冲区我们现在可以使用索引缓冲区来重新创建我们的三角形。它的三个元素代表一个三角形和索引中的索引缓冲区,可以用来查找每个顶点的正确属性
最后我想说的是顶点法向量
对于这个三角形,它是法向量是一个垂直于其表面并在二维屏幕上指向的向量。有点难表示所以你应该把蓝色的向量看做3d建模软件通常会向外指向你的屏幕,用这些法向量但知道如何计算和是很有用的,尽管如此为了解释我们是怎么做的,
我会给顶点命名
第一步是计算两个向量和一个向量从 A 点指向 B 点,我们称该向量为 B,我们当然通过从 B 的位置减去 a 的位置
我们也有计算从a到C的第二个向量,我们称它为向量AC用C点的位置减去a点的位置
我们现在知道向量AB和向量AC基于顶点的位置,我们要计算一个垂直于三角形的向量,我们当然是用叉乘来做的这是缠绕的地方。这就是我们的三角形现在起作用了。我们有一个逆时针绕线顺序,会指向相反的方向,
但如果我们把它改成顺时针的绕线顺序,那么法线会指向相反的方向。因为你采取的顺序叉乘实际上很重要,这也意味着缠绕顺序不是唯一决定法向量方向的,是另一件事当然然是您计算叉积的顺序,因为如果改变这两项法向量也会改变方向。
一旦我们知道了法向量,我们就可以把它存储为每个顶点的属性,但是单顶点会带来一个问题,也就是说顶点现在不能在三角形之间共享了,因为法线对于每个三角形都是唯一的这也意味着我们不能利用杠杆。假设我们有这个金字塔我们想要计算蓝色的法线,我们要做的第一件事是计算每个三角形的法线以我们刚才讨论的方式与那个蓝色顶点相邻,
我们现在可以这个公式对它们求平均,它所做的就是取所有相邻三角形的所有法线的的总和除以相邻三角形的数量,
这给了我们现在可以将这个法向量存储为蓝色顶点的顶点属性,这就是三角形如何组成3d模型
内容以原视频教程为主
原帖地址:三角形是如何组成3d模型?计算机图形系列-01期 (qq.com)
作者:FloatyMonkey
https://www.youtube.com/c/FloatyMonkey/videos
|