Как стать автором
Обновить

Введение в Structure Synth

Время на прочтение3 мин
Количество просмотров3.6K
Автор оригинала: Mikael Hvidtfeldt Christensen
Structure Synth, Virus
Здравствуй, хабр. Вчера я игрался с новой Ubuntu 11.10 и совершенно случайно наткнулся на такое замечательное приложение, как Structure Synth. Structure Synth уже обсуждался на хабре, а я бы хотел набросать вольно-литературный перевод краткого туториала с официального сайта.


О чем это он?

Structure Synth — это кросс-платформенное приложение для построения сложных трехмерных структур. Структуры строятся путем выполнения набора правил на языке Eisenscript. Грамматика была первоначально разработана человеком по имени Chris Coyne и используется в приложении для построения двухмерных изображений Context Free Art. Structure Synth написан на C++ с использованием OpenGL и Qt. Доступны сборки для Windows, Mac OS и Linux.

Состояния, трансформации и действия.

Краеугольным камнем в SS служит состояние. Состояние описывает текущую систему координат и режим окраски. Система координат определяет позицию, ориентацию и размер всех объектов, созданных в текущем состоянии.

Состояние модифицируется трансформациями. Например, мы можем сдвинуть текущую систему координат на единицу по оси Х применив трансформацию { x 1 }. Таким же образом можно повернуть систему координат на 90 градусов вокруг оси Х с помощью трансформации { rx 90 }. Трансформации комбинируются при парсинге, так что { x 1 x 1 } эквивалентно { x 2 }.

Состояние можно комбинировать с вызовом правил, создавая действия. Например, { x 2 } box представляет собой трансформацию, следом за которой вызывается правило. Встроенное правило «box» создаст куб в координатах (0, 0, 0) -> (1, 1, 1) в текущей системе координат.

Давайте взглянем на такой пример:

box
{ x 2 } box
{ x 4 } box
{ x 6 } box


Результатом будет примерно такое изображение:

4 boxes

Код из примера выше создает четыре куба с одинаковыми промежутками. Обратите внимание на то, что мы определяем несколько действий друг за другом. Каждое действие применяется к одному и тому же состоянию — в нашем случае исходному. Действия не применяются к состоянию, созданному предыдущим действием.

Итерации

Существует возможность описывать множественные действия (итерации) с помощью символа умножения. Например, 3 * { x 2 } box полностью идентично коду из первого примера.

Цветовые трансформации

Мы можем изменять текущий цвет рендеринга таким же образом, как и применять пространственные трансформации. Structure Synth использует схему HSV (Hue, Saturation, Value) для представления цвета. Для трансформации цвета используются операторы hue, sat/saturation и b/brightness.

Пример, демонстрирующий итерации и трансформацию цвета:

10 * { x 1 hue 36 } 10 * { y 1 sat 0.9 } 10 * { z 1 b 0.9 } box

Результат:

Colored Cube

Еще один пример с различными трансформациями:

10 * { x 2 } box
1 * { y 2 } 10 * { x 2 rx 6 } box
1 * { y 4 } 10 * { x 2 hue 9 } box
1 * { y 6 } 10 * { x 2 s 0.9 } box


Результат:

Misc

Встроенные правила

box это лишь один из примитивов — встроенных правил — в Structure Synth. В вашем распоряжении имеются также: sphere, dot, grid, line, cylinder, mesh, cylindermesh.

Вот как выглядят некоторые примитивы (слева на право: mesh, grid, line, dot, box, sphere):

Primitives

Пользовательские правила

Пользовательские правила — ключ к созданию сложных и замысловатых структур. Правила задаются с помощью ключевого слова rule. Пользовательское правило используется точно так же, как и встроенное. Важная особенность правил — правило способно вызывать само себя. Взгляните на следующий пример:

R1

rule R1 {
{ x 0.9 rz 6 ry 6 s 0.99 sat 0.99 } R1
{ s 2 } sphere
}


Что в результате даст:

Spheres

Обратите внимание, правило R1 рекурсивно вызывает само себя. По логике вещей такой код никогда не завершится, но в Structure Synth существует максимально допустимая глубина рекурсии (по умолчанию — 1000 рекурсивных вызовов). Достижение максимальной глубины рекурсии можно считать достижением базы рекурсии. Значение максимальной глубины рекурсии можно изменить с помощью команды set maxdepth xxx. Еще один способ принудительного завершения рекурсий — установка максимально допустимого количества объектов с помощью set maxobjects xxx.

Random

Дабы сделать структуры более интересными, мы добавим нечто менее статичное — добавим случайности. В SS случайность достигается определением нескольких правил с одним и тем же именем. Например:

R1

rule R1 {
{ x 0.9 rz 6 ry 6 s 0.99 sat 0.99 } R1
{ s 2 } sphere
}

rule R1 {
{ x 0.9 rz -6 ry 6 s 0.99 sat 0.99 } R1
{ s 2 } sphere
}


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

Random spheres

Послесловие

На этом, пожалуй, все. Надеюсь, что мне удалось привлечь внимание хабраобщества к Structure Synth и в ближайшее время можно ожидать появление новых замысловатых кишечников творений.
Пара ссылок по теме:
Теги:
Хабы:
Всего голосов 62: ↑61 и ↓1+60
Комментарии9

Публикации