Grasshopper 中提供的矢量功能是 Rhino 中没有的概念,因此可能很多即便熟悉 Rhino 的用户在学习 Grasshopper 的时候也会对这部分有一些陌生,本篇教学旨在为学习Grasshopper 的矢量功能提供一些帮助。
无论在 Grasshopper 中还是初中课本里,矢量就是矢量,他都代表同样的意思:既具有大小又具有方向的量。 在 Rhino 中制作模型,比如画曲线,拉控制点,移动,阵列物体等等几乎所有的手工建模都是在反复的做定义距离和方向的工作。而在以程序建模(参数化建模)的软件中,这个工作我们希望是尽量以输入数据和程序自动计算的方式来完成,以替代传统的手工去画的方式,在 Grasshopper 或者其他的参数化建模的软件中用来完成这个工作的工具就是矢量。
我们先来看看grasshopper中的矢量物件是如何画出来的:
如下图中,vector 栏中可以找到 vector 2pt 工具,这个工具 是 Grasshopper 中一个标准的定义矢量物件的工具。
其中元件左边的 A 和 B 端需要输入两个不同的“点坐标”数据,右边 V 端便可以输出一个方向由 A 到 B,大小为 A 到 B 的长度值的矢量。
例如: 在Rhino场景中放置2个点物件:点1 和 点2,然后在 Grasshopper 中用两个point元件从 Rhino 中拾取这2个点,然后把这两个 point 元件分别接到 vector 2pt 的 A和 B 端,这样在 Grasshopper 中便生成了一个:方向由点1到点2 大小为点1到点2的距离值的矢量,如图所示:
Rhino中没有看到矢量?没错,因为矢量不是一个常规标准几何物件,所以在 Rhino 中是看不到矢量物件的,但是有时候为了检查和分析,我们需要直观的在 Rhino 场景中看到这些矢量物件,这种情况下我们可以使用 Display 工具,如下图所示。
Display工具物件有2个输入口, A 和 V,V 端接入需要在Rhino场景中显示的矢量,而 A 端则需要输入一个点物件,用于定义需要显示的矢量的起始点。
可能你会对这个“起始点”有些疑惑,刚才我们定义的矢量是从点1到点2,那么点1应该就是起始点呀?为什么还要另外定义一个起始点?这里还要再特别强调一下矢量的概念:矢量只代表了一个具有大小和方向的量,并没有位置的定义。在这个例子中我们是以两个点的方式来定义一个矢量,因此这个矢量获得了这两个点之间的距离和方向的数据,因此还需要告诉程序矢量显示在三维空间中的具体位置,因此我们需要定义一个这样的“起始点”。
在这里,为了直观看出矢量是从点1到点2的方式定义的,所以我们就以点1作为这个起始点输入到display工具的 A 端,如下图所示。
显示效果如图。我们已经看到了显示出来的矢量。
如果我们在display工具的输入口输入其他的点,那么这个矢量就会显示在其他的位置,如下图所示。
以上两个不同的方式只是把同一个矢量显示在不同的位置处,虽然显示出的矢量在不同的位置,但是矢量本身并没有不同。
除了vector 2pt 工具,Grasshopper 还提供了一种直接以一个点来定义矢量的方式,如图所示。
这种方式其实仍然是以2个点的方法定义矢量,只是第一个点是默认的世界坐标原点,所以只需要入另外一个点坐标。这种方式得到的矢量的方向就是从原点到这个点的方向,而距离就是这个点到原点的距离。如下图是使用前面的点1和点2输入得到矢量,为了直观,把矢量的起始点设置为原点。
因为输入了2个点:点1跟点2 ,因此得到了2个矢量。
Grasshopper 中除了如上两中常见在定义初始矢量的方式,还有好几种其他的方法都可以定义矢量,在 vector 栏目的 vector 中找到对应的这些元件。
顺便提一下,我们也可以使用 params 栏目下的 vec 元件直接点右键使用 set one vector 或者 set mutilple vector 在Rhino场景中定义矢量,默认初始点就是原点,也可以在指令区点 startpoint 切换成以2个点定义矢量的方式,也即是前面我们介绍的两中定义矢量的方式。
了解了Grasshopper中的矢量元素的概念之后,下面是一个简单的利用矢量元件的小案例。效果如下:
下面简要介绍一下制作过程:
打开场景,如图所示,场景中有上下放置的两块曲面。
在 Grasshopper 中,如下图设置
在左边的两个 srf 元素上点右键选 set one surface ,分别在 Rhino 场景中各拾取一块曲面,上下两块曲面都依据UV分布各自提取出100个点,效果如下图所示。
接下来依据上下两块曲面上对应提取出来的点作为起始点和结束点定义矢量。如图所示
如前面所说,这时候矢量已经生成,按照如下设置在场景中显示出矢量。
正确显示出的矢量效果如图
接下来我们要在 Grasshopper 中作一根圆管的程序,程序如下图所示:
这个程序比较简单,就不具体解释,需要说明:右边的 S 端输出的是圆管几何体,V 端输出的是圆管对应的矢量,其矢量的方向是圆管的轴心方向,大小是圆管长度的值。
Rhino场景中效果图图所示。
接下来要做的就是:把圆管复制到曲面上100个点对应的位置。
在 Rhino中,有一个工具叫做 Orient,中文叫做定位,他的工作原理是首先拾取场景中的2个点作为定位参考点,然后再拾取另外2个目标点,一句前后连个点之间的方位讯息为依据,将物件复制,这个方法的好处是可以同时定位物件的基准点,方向,并且缩放尺寸,不清楚这个工具使用方法的朋友可以在rhino的帮助文件查询该工具的纤细说明。在 Grasshopper 中,同样有一个 Orient,功能也完全一样,但是用于定位的方式有些区别,它是利用基准点和矢量的方式来复制物件。如图所示:
该元件有5个输入口,G为需要复制的几何体输入端,pA 和 pB 分别为几何体的参考基准点和目标基准点,而da和db则代表几何物件的参考矢量和目标矢量,简单解释就是:pA 和 pB 定义几何体的基准点,而 dA 和 dB 定义几何体的大小和方向。
连接方式如下:
如果前面的步骤没问题,那么正确的效果应该如下图所示,所需要的曲面已经生成。
接下来的编辑曲面的部分因为不是该教学的主要介绍部分因此跳过,您也可以直接在Rhino中处理后面的部分,最终效果如图:每一根立足高度越高也就越粗,越矮的也越细,顶部整体呈现曲面起伏的感觉,整体形成一种有规律的美感。
如下图所示,运用类似的逻辑,配合矢量的运用,可以制作其他更复杂的效果。
Shaper3d 论坛原创教材,转载请注明来源与作者!!
shaper3d 论坛技术支持团队