Max/MSP/Jitter 官方教程翻译15 - 剪刀和胶水

00 翻译自 Cycling74 的 Max/MSP/Jitter 官方文档:Tutorial 13: Scissors and Glue

本教程学习如何使用两个简单的对象来切割和组合二维矩阵的矩形区域。

教程 patch 有两个互补的 Jitter 对象:将矩阵切割成大小相等的小矩阵的 jit.scissors; 将多个矩阵粘贴到一起的 jit.glue。还会简要介绍 router 对象,它可以将 Max 消息从多个源引导到多个目的地。


读取视频

patch 左上角的 loadbang 自动发送 read traffic.mov 消息给 jit.movi​​e 加载交通镜头的视频。

点击 patch 顶部的开关启动 metro。视频出现在底部较大的 jit.pwindow 中。有趣的是,图像被切割成四个象限,出现在分开的的 jit.pwindow 中。

切割

jit.scissors 把包含视频的矩阵分割成四个小矩阵:

jit.scissors 将任意尺寸/类型/平面数的矩阵切割成更小的矩阵,然后在不同出口发送。@rows 和 @columns 属性指定每次接收到矩阵时分割成多少个小矩阵。这里 jit.scissors 将图像拆分为四个小矩阵(2 列 2 行)。这些单独的矩阵以列优先顺序发送到各出口(从左到右,然后从上到下)。

jit.scissors 有两个属性非常重要:

1)出口数量在创建对象时就确定。只有在对象框中指定行和列属性,才会生成对应数量的出口。例如,jit.scissors @rows 10 @columns 2 将创建一个有 20 个出口的 jit.scissors 实例(包括用于查询属性的最右出口),如果 jit.scissors 没有参数,就只会生成一个出口。可以用 Max 消息更改行和列属性,但是无法添加超过对象初始化时的出口数量。

2)jit.scissors 发送的矩阵大小等于矩阵切片的大小,而不是整个原始矩阵。例如,教程 patch 中的四个较小的矩阵,每个都是 160x120 个单元,而不是 320x240。

Routing the Matrices

jit.scissors 输出的四个小矩阵,被发送到两个不同的地方: jit.pwindowrouter 对象。彩色接线显示每小矩阵被发送到了哪里。


router 对象

routergateswitch 的组合。它有两个参数(输入口数量和输出口数量),由左入口的消息指定。router 能处理的大多数消息与 MSP 对象 matrix~ 相同。因此可以跟 matrixctrl 对象一起使用。

router 右侧的四个入口从 jit.scissors 的四个矩阵出口获取输入。receive routeit 对象从 patch 的右下方控制 routers routeit 获取消息。router 最左边四个出口连接到 jit.glue 对象,我们稍后会讨论。


控制路由器

发送消息 patch $1 后跟入口号($1)和出口号到 router, 会在该入口和对象的出口之间建立虚拟连接。到达该入口的任何消息会转发给相应出口。如果先前已有入口连接到该出口,patch 消息将切断该连接以支持新连接。

patch 中的 radiogroup 对象控制四个小矩阵(到达入口)被发送到 router 的哪些出口。入口和出口从 0 开始编号,所以 2 1router 的 3 入口和 2 出口建立连接。

单击 radiogroup 控件并观察下方 jit.pwindow 的图像如何变化。注意 router 如何使剪切的矩阵,出现在底部合成图像的四个象限中。

整合的胶水

patch 底部的 jit.glue 做与 jit.scissors 相反的事情。行和列的属性指定入口数而不是出口数,以网格排列的输入矩阵合成一个矩阵输出。


将相同的矩阵发送到 jit.glue 的四个入口

要点:与 jit.scissors 一样,jit.glue 只能在对象初始化时创建入口和出口,对象框中的行和列属性将确定入口数。此外,由 jit.glue 生成的输出矩阵的大小,等于所有小矩阵的大小(例如,四个 160x120 矩阵将合成一个 320x240 矩阵)。

jit.glue 默认当从左入口接收到新矩阵时,只输出复合矩阵。如果断开 jit.glue 最左边的入口,就不能再获得任何新的输出矩阵。syncinlet 属性可让 jit.glue 发送输出到不同的入口。syncinlet 值为 -1 时,jit.glue 在任一入口收到新矩阵时都输出新的合成矩阵。虽然看似不错,但会增加大量冗余工作,降低 Jitter 的帧处理速率。

小结

jit.scissors 对象切割矩阵成更小的、大小相等的矩阵。jit.glue 对象把相同大小的矩阵合并到一起生成复合矩阵。两个对象的行和列属性分别确定出/入口的数量,以及矩阵被切割或合成的方式,这在对象创建时就要给出。router 以任意方式连接多个入口处的消息到多个出口,跟 MSP matrix~ 对象类似。



友情提示:独自折腾 Max 易患上癔症……不妨入群互助

👇👇👇

kidult00 wechat
扫码关注 00 的公众号
如果文章帮您节省时间或者解答疑问,不妨打个赏 :)