» Распределяем данные
This site relies heavily on Javascript. You should enable it if you want the full experience. Learn more.

Распределяем данные

English | French | Spanish | Japanese | Italian | Korean | Mandarin

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.

Этот урок подразумевает, что вы знакомы с упражнениями из урока 2: Ваш друг Инспектор.

Распределяем данные

Прежде чем наступит тот день, когда вы решите сдать экзамен на черный пояс по vvvv, и прежде чем вы рискнете соперничать с мастерами, убедитесь в том, что вы полностью усвоили суть спредов (spreads). Прочитайте этот урок очень внимательно. Вам понравится. Потому что:

В подавляющем большинстве случаев, когда вам понадобится иметь дело с большим количеством данных, будь то числа, цвета, файлы, текстуры или трехмерные модели... Вы сможете сохранить ваши патчи легкими и простыми только благодаря спредам.

Список состоит из строк

Прежде всего. Слово Spread означает список. Всего лишь упорядоченный список. Будь то values, strings, colors,... а каждая строка в этом списке называется Slice.

Вы уже знаете, что каждый пин относится к тому или иному типу данных vvvv (таких как числа, строки, цвет, списки, ноды). О чем до сих пор не упоминалось, так это о том, что пин может передавать не одно значение, а целый список значений.

  • в традиционном программировании это кажется называется массив

Генераторы спредов

Вы можете выяснить количество слайсов в пине просто наведя курсор мыши на пин. Создайте LinearSpread (Spreads) и наведите курсор на его выходной пин. Ничего особенного. Пока. Теперь установите значение 5 для входного пина SpreadCount. Снова наведите курсор на выходной пин. Вы должны увидеть (5) после значением.

Этот не хитрый прием показывает, что даже если у вас 5 слайсов, в подсказке вы увидите только один. Это хорошо. Предположим, что у вас не 5, а 9874 слайса. Вы вряд ли заходите увидеть все сразу во всплывающей подсказке. И конечно есть другой способ увидеть все слайсы спреда. Помните финал прошлого урока? В Инспекторе вы видите две стрелки у выходного пина, кликнув на них, вы увидите весь спред в правой колонке.

Существует несколько нодов аналогичных LinearSpread (Spreads), они генерируют спреды в различных техниках. Рекомендуем вам пробежаться по help-патчам (см.helppatches) для CircularSpread (Spreads), RandomSpread (Spreads) и I (Spreads).

  • См. также GaussianSpread (Spreads), Resample (Spreads). По умолчанию в категории Spreads подразумеваются числовые спреды. Однако аналогичные ноды существуют для категорий String, Color и некоторых других.

Пользуемся спредами

Смотрите шире. Если во входной пин приходит 5 строк, как нод интерпретирует эти 5 строк? Сойздайте Renderer (GDI) и подключите к нему Point (GDI). В результате вы увидите + в центре окна рендера (по умолчанию координаты X и Y равны нулю). Теперь доваьте LinearSpread (Spreads) к входному пину X Point (GDI) и задайте SpreadCount равным 5.

Вы видите как умно Point (GDI) интерпретирует спред. Он просто повторяет себя 5 раз, поскольку получает список из 5 значений, понимая их как 5 точек по координате X. Круто? А что бы вы сделали на месте точки?
Так, теперь посмотрим, что будет если мы подсоединим спред с другим количеством слайсов к другому пину. Сдублируйте LinearSpread (Spreads), но установите SpreadCount = 2 и подключите его к входному пину Y Point (GDI). Получилось:

Понимаете? Point (GDI) получает 5 значений по оси X и 2 значения по оси Y. И вот что происходит:

  • когда нод отрисовывает первый +, он забирает первый слайс по оси X и первый слайс по оси Y
  • когда нод отрисовывает второй +, он забирает второй слайс по оси X и второй слайс по оси Y
  • когда нод отрисовывает третий +, он забирает третий слайс по оси X и поскольку по оси Y нет новых слайсов, снова повторяет первый слайс
  • ...

Вот так. Любой нод обрабатывает спреды точно таким же образом. Конечно, если входной пин в принципе понимает спреды. Если пин не поддерживает спреды, то из всего спреда будет использован только первый слайс. Чтобы выяснить понимает пин спреды или нет, загляните в Инспектор. Значок > или >> между значением и названием пина, показывает, что пин поддерживает спреды.

Видео уроки на английском о спредах. the video tutorial.

Доступ к отдельным слайсам

В большинстве случаев вам не понадобится доступ к отдельным слайсам, поскольку большинство нодов обрабатывают спреды целиком. Но есть и масса причин, чтобы управлять отдельными слайсами. Предположим, нам нужно вручную управлять третьим слайсом из нашего первого LinearSpread (Spreads). Для этого сначала ставим SetSlice (Spreads) как показано ниже.

  • Нумерация слайсов начинается с 0

Крайний правый вход SetSlice (Spreads) устанавливает номер слайса, который мы хотим изменить.
Поскольку нумерация слайсов начинается с 0, а мы хотим изменить третий слайс, то ставим значение = 2. Второй входной пин задает значение для этого слайса. Поиграйте с этим значением и увидите, что третий + движется независимо от остальных.

А теперь взгляните сюда:

При помощи I (Spreads) мы говорим SetSlice (Spreads), что мы хотим управлять не только третьим слайсом, но всеми слайсами с первого по третий. И еще одним LinearSpread (Spreads) мы создаем эти 3 значения...

И так далее.
Когда кажется что ничего не получится, спред приходит на помощь.

Дальнейшие эксперименты

В этом месте мы так же рекомендуем взглянуть на help-патчи для: GetSlice (Spreads), Stallone (Spreads), Queue (Spreads) и Cons (Spreads).

А теперь нам пора рассказать кое-что еще Подробнее об IOBoxes

anonymous user login

Shoutbox

~11h ago

tonfilm: to whom it may concern: 64-bit #vvvv #alpha builds are up an running again: downloads/alphas

~2d ago

StiX: @synth you sauin something about 420? if mangosh gets confirmed i am coming with him as we are in one ... package

~2d ago

synth: @evvvvil here only to do lasers, they don't let me near the screens after last time ...

~2d ago

evvvvil: hahaha yes, please sir, can I have some more sir? Hopefully me and you be battling for visual space soon, GTFOH with your lasers.

~2d ago

synth: BTW - Got 4 20w Kvant lasers here thinking of testing the ILDA nodes live :)

~2d ago

synth: @evvvvil Hell yeah! Couldn't get Vux drunk but your going to get it :D

~2d ago

evvvvil: @synth: hopefully I should be going to GEM FEST soon, not confirmed yet, but if so, beer is on you why not ;) (and me ok)

~3d ago

synth: BTW any vvvv guy coming to Georgia for GEM Festival shout out I am here for the entire thing alone. Some beer on me ;)