
こんにちは、Habr。 昨日、私は新しいUbuntu 11.10を試しましたが、Structure Synthのようなすばらしいアプリケーションに偶然出会いました。 Structure Synthはすでにハブで
議論されており、公式サイトからの短い
チュートリアルの無料の文学翻訳を概説したいと思います。
彼は何について話しているのですか?
Structure Synthは、複雑な3次元構造を構築するためのクロスプラットフォームアプリケーションです。 Eisenscriptで一連のルールを実行することにより、構造が構築されます。 文法は元々Chris Coyneという名前の男性によって開発され、2次元画像
Context Free Artを構築するためのアプリケーションで使用されています。 構造シンセは、OpenGLとQtを使用してC ++で記述されています。 ビルドは、Windows、Mac OS、およびLinuxで利用できます。
状態、変換、およびアクション。
SSの礎石は
国家です。 状態は、現在の座標系とカラーモードを表します。 座標系は、現在の状態で作成されたすべてのオブジェクトの位置、方向、およびサイズを決定します。
状態は
変換によって変更され
ます 。 たとえば、変換
{ x 1 }
を使用して、現在の座標系をX軸に沿って1つずつシフトできます。 同様に、
{ rx 90 }
変換を使用して、座標系をX軸を中心に90度回転できます。 変換は解析と結合されるため、
{ x 1 x 1 }
{ x 2 }
{ x 1 x 1 }
同等です。
状態を呼び出し規則と組み合わせて、
アクションを作成できます。 たとえば、
{ x 2 } box
は変換の後にルールが続きます。 組み込みの「ボックス」ルールは、現在の座標系の座標(0、0、0)->(1、1、1)に立方体を作成します。
例を見てみましょう:
box
{ x 2 } box
{ x 4 } box
{ x 6 } box
結果は次のようになります。

上記の例のコードは、ギャップが等しい4つのキューブを作成します。 いくつかのアクションを次々に定義していることに注意してください。 各アクションは同じ状態に適用されます-私たちの場合、元の状態。 アクション
は 、前のアクションで作成された状態に
は適用され
ません 。
繰り返し
乗算のシンボルを使用して、複数のアクション(
反復 )を記述することができます。 たとえば、
3 * { x 2 } box
最初の例のコード
3 * { x 2 } box
完全に同一です。
色変換
空間変換を適用するのと同じ方法で、現在のレンダリング色を変更できます。 構造シンセは、HSV(色相、彩度、値)スキームを使用して色を表現します。
hue
、
sat/saturation
b/brightness
演算子は、色を変換するために使用されます。
反復と色変換を示す例:
10 * { x 1 hue 36 } 10 * { y 1 sat 0.9 } 10 * { z 1 b 0.9 } box
結果:

さまざまな変換の別の例:
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
結果:

インラインルール
box
は、Structure Synthのプリミティブの1つである組み込みルールです。 自由に使えるのは
sphere, dot, grid, line, cylinder, mesh, cylindermesh
です。
いくつかのプリミティブは次のようになります(左から右:メッシュ、グリッド、ライン、ドット、ボックス、球体):

カスタムルール
カスタムルールは、複雑で複雑な構造を作成するための鍵です。 ルールはキーワード
rule
を使用して定義されます。 カスタムルールは、組み込みルールと同じ方法で使用されます。 ルールの重要な特徴は、ルールが
それ自体を
呼び出すことができる
ことです 。 次の例を見てください。
R1
rule R1 {
{ x 0.9 rz 6 ry 6 s 0.99 sat 0.99 } R1
{ s 2 } sphere
}
結果は次のとおりです。

ルール
R1
はそれ自体を再帰的に呼び出すことに注意してください。 論理的には、このコードは決して終わりませんが、Structure Synthには最大許容再帰深度(デフォルトでは1000回の再帰呼び出し)があります。 再帰の最大の深さに達することは、再帰ベースの達成と見なすことができます。 最大再帰深度値は、
set maxdepth xxx
を使用して変更できます。 再帰を強制的に完了する別の方法は、
set maxobjects xxx
を使用してオブジェクトの最大数を
set maxobjects xxx
。
ランダム
構造をより面白くするために、静的でないものを追加します-ランダム性を追加します。 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が2回定義されています。 現在、このようなルールを呼び出す必要があるたびに、その実装の1つがランダムに選択されます。 上記の例を実行すると、たとえば次の結果が得られます。

あとがき
おそらくそれだけです。 私はhabrastコミュニティの注目をStructure Synthに引き寄せることができ、近い将来
、創造物の新しい複雑な
腸の出現を期待できることを願っています。
いくつかの関連リンク: