» Распределяем данные
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

~3d ago

cznickesz: @tonfilm thanks for the info. Can´t wait to give it a try!

~4d ago

tonfilm: @cznickesz #vvvv #vl #xenko integration is not ready for the public yet, it's still under heavy development... more updates soon.

~5d ago

cznickesz: Possibly dumb question: is there any release containing xenko-integration right now?

~6d ago

~6d ago

~7d ago

joreg: looking for latest #vvvv gamma preview? it is here: vvvv-gamma-2019.1-preview

~8d ago

udo2013: I just want to know why the camera does not work. should be easy to be answered.

~8d ago

udo2013: an answer, please. also there was a 4d julia set in dx9. that must have programmed one. haalllooo!!

~8d ago

udo2013: where are the people who have translated shadertoy's mandelbulb in hlsl ?? for vvvv