» cn.Spreads
This site relies heavily on Javascript. You should enable it if you want the full experience. Learn more.

cn.Spreads

English | Russian | Italian | French

The original english version of this page is newer and may contain information this translation does not have! Click here to view the english version.

铺展和切片

用户可以轻松地通过 vvvv 同时处理大量的图形或数据对象。这意味着操作一个数值和操作一百个数值的是一样容易的,同理,绘制一个对象和绘制一大群对象也是一样容易的。这项技术就是所谓的铺展。这有点类似于在其他的编程语言里的矢量、阵列或表单的概念,但它却不像通常与这些概念相关的构件那样难以掌握。

基本上,任何引脚和任何连接能都容纳任意数量的数值。当您使用的工具提示您将只能看到这些数值中的第一个值。如果引脚包含了更多的值,你会在数值后看到一个在括号中的数字,称为“切片数(SliceCount)”:

铺展中某个单个的值被称为“切片”(Slices)。铺展始终是一维的——只是一组切片而已。SliceCount用以表述铺展中切片的数量。所有的数据都可以解释为一个铺展——通常的一个值我们也可以理解为是只有一个元素的铺展。

vvvv的特色之一就是渲染节点也是可以铺展的:如果你把一个铺展连接到被渲染的对象上,这个对象则会被画好多次,这使得用程序实现复杂的粒子动画十分容易。

铺展节点

结合使用多个铺展节点对于编写与图形相关的应用程序是很有用的。铺展节点通过直观的参数创建铺展。这些节点通常都有一个叫做“铺展数(SpreadCount)”的引脚,这个引脚决定了会产生了多少的切片。准确地说,这些节点把单个值铺展成大量不同的值。

vvvv 包含的铺展节点能够很容易地实现大量的对象的复杂行为:

在节点列表地铺展类中查看所有与铺展有关的节点。

线性铺展 LinearSpread

线性铺展是vvvv中最基本的铺展,它按照设定的范围创建一组线性的铺展值。下面的图片来自线性铺展的帮助程序。

环形铺展 CircularSpread

环形的铺展也是一个十分基本的铺展。这个铺展沿着一个圆或椭圆形装安排x轴和y轴的坐标值,这能够让你很容易地创建环形的排列,而不再需要面对通常和这些运算有关的典型的正弦和余弦的公式。

字形铺展 TypoSpread

为了创造更为复杂的行为,字形扩展常常十分有用。它根据给定的文字轮廓上的点的坐标创造两个铺展。一个是x轴的坐标值,一个是y轴的坐标值。你一定会喜欢用它来做排字上的试验,但是它本来是主要用来方便地控制动画的行为。你最终也许会用它来所收集的俗气的字体,哈哈。

条形铺展 BarSpread

贝塞尔铺展 BézierSpread

高斯铺展 GaussianSpread

计数器铺展 I

峰值铺展 PeakSpread

随机铺展 RandomSpread

TODO? 所有的铺展:BarSpread (Spreads) , BézierSpread (Spreads) , CircularSpread (Spreads) , GaussianSpread (Spreads) , I (Spreads) , PeakSpread (Spreads) , Queue (Spreads) , RandomSpread (Spreads) , RingBuffer (Spreads) , SevenSegment (Spreads) , TypoSpread (Spreads)

不同的切片数目的铺展的引脚连接

不同的切片数目的铺展之间引脚连接是完全可行的:

如果输出的铺展中包含的切片数目比输入的少,vvvv 就简单重复输出的铺展(如左图)。如果输出的铺展中包含的切片数目过多,那么多余的切片将被省略掉(中图)。如果输出仅仅有一个切片,所有的输入的切片都是相同的这一个切片(右图),这只是左图的一个特例。

对不同的切片数目的铺展的运算也是同理:

左边的铺展比右边的铺展包含更多的元素。在简单的标量运算中(如 +)输出的切片数目取所有输入的切片数目的最大值。

确切的说也不全然是由那个最大的切片数目的输入来决定,对于空铺展处理有一个特殊的原则,这个原则是:“只要没有一个输入的切片数目为零,则是由最大的那个输入的切片数目决定,否则输出的切片数目是零”。
注意这只不过是一个随意的的解决办法:其它语言如apl或者j就会禁止这种情况,但是我认为针对这种情况有个智能解决方案对于一个趣味性的探索是十分重要的。我们讨论过其它的对策,比起取最小公倍数或者取最小值,取前面提到的最大值被认为是最有趣的对策,因为这样允许我们很自然地把一个切片和更长的铺展混合起来。

因此右边的输入被改变到也包含7个切片。这是通过重复较小地铺展来实现的:

对渲染节点也是同理:

因为所有输入的铺展节点中最大的切片数目是8,所以画出了八个对象。类型引脚的输入只有三个切片,所以三个不同的形状在8个元素里循环使用。颜色的铺展只有一个切片,因此所有的对象的颜色都是相同的。试验这类的设置是十分有启发性的,因为这样可以用很简单的方式创造出很复杂的行为。这一件很好的事情。

空铺展 Empty Spreads

page not found
<!--do not remove the line above-->

在属性检查器中看铺展

在属性检查器中默认显示的只是引脚中的第一个切片。如果你打算看一个引脚中的所有切片,点击在属性检查器的中间的这个双箭头>>图标。一个显示所有切片的表单会在左边显示出来。

如果节点的引脚是有输入连接,所有的切片会显示暗色,表示它们不能被修改。

如果节点的引脚没有输入连接,所有的切片显示为亮色,你可以编辑它们。切片数量的编辑区域也允许重新设置引脚的切片数。

频谱节点 Spectral Nodes

有一组特殊的节点被归类到频谱节点。它们用来方便地计算与铺展输入值有关的一些很有用的输出值。一个典型的例子就是同时统计参数,如平均值,宽度,最大值和最小值。以Bounds (Spectral)为例,它同时统计参数的平均值,宽度,最大值和最小值。

频谱节点在某些字符串操作中也是特别有用的:下面是用频谱做字符串相加把所有的单独的切片合成一个切片的一个例子:

引脚尺寸 BinSize

频谱节点有一个叫BinSize的引脚。这个决定了输出的切片数。引脚尺寸为2意思是输入的切片会分成两个引脚,这些引脚都会被单独处理。注意如果引脚尺寸不是输入铺展数的公约数,则输入的铺展会按需重复。你可以在User Tutorials?中找到BinSize的教程程序。

分栏 Stalloning

经常需要把一个铺展的切片中输出到不同的引脚中,或者反过来。分栏节点(Stallone)是一个十分灵活的节点,能够让你把任何个数的输入值合并起来,然后再分拆成任何个数的输出。

一个把一个引脚上的五个切片变为五个引脚上各有一个切片的简单实例:

相反操作的也是可行的,通过设定输入和输出的引脚数和“切片数”的引脚来实现:

通过设置铺展数的引脚你能选择应当产生多少输出切片。如果输入的切片不够,Stallone就会从第一切片的引脚开始重复这些值。

Stallone 分类模式

分栏节点(Stallone)能够处理一个很大的铺展,其中的包括了来自各个输入的内容合成后再被分解到各个输出引脚上的切片。其内部的SliceCount由所有输入引脚的数目和最大的输入的切片数决定(除非有一个输入的引脚切片数是0-那么这个SliceCount也为0)。

输入的切片通过下面两种方式收集:
a.)首先从第一个引脚中取出所有的切片,然后从第二个引脚以此类推(Pin Sort Mode 引脚分类模式)
b.)首先从所有的引脚中取出第一个切片,然后从所有的引脚中取出第二个切片以此类推(Slice Sort Mode 切片分类模式)

输出的切片以相似的方式分布:
a.)在引脚模式中,第一串的切片被拷贝到第一个引脚,第二串的引脚到第二个引脚以此类推。
b.)在切片模式中,所有的引脚得到他们的第一个切片,然后第二个切片以此类推。

更多的铺展节点

铺展数 Count

取出切片 GetSlice

赋值切片 SetSlice, 插值切片 InsertSlice

Cons, CDR, CAR, Shift

Resample, Scroll

Cross, SwapDim

Select, Sort, Reverse

Buffer, RingBuffer, Queue

anonymous user login

Shoutbox

~9d ago

joreg: Postponed: Next vvvv beginner course starting April 29: https://thenodeinstitute.org/courses/vvvv-beginner-class-summer-2024/

~1mth ago

~1mth ago

joreg: The Winter Season of vvvv workshops is now over but all recordings are still available for purchase: https://thenodeinstitute.org/ws23-vvvv-intermediates/

~2mth ago

schlonzo: Love the new drag and drop functionality for links in latest previews!

~2mth ago

joreg: Workshop on 29 02: Create Sequencers and Precise Clock Based Tools. Signup here: https://thenodeinstitute.org/courses/ws23-vvvv-08-create-sequencers-and-precise-clock-based-tools-in-vvvv-gamma/