Nada, ya está la primera parte de esta introducción a Structure_Synth, sin mas dilación...

Todos lo que se puede hacer en Structure Synth se basa en unos elementos básicos llamados reglas, las reglas básicas (llamadas primitivas) son:

  • Sphere (esfera) [http://3.bp.blogspot.com/_26RJWnubh-w/TESbLnXFlrI/AAAAAAAAAMU/WkZo-TcXQWA/ s320/sphere.png]

  • Box (caja) [http://1.bp.blogspot.com/_26RJWnubh-w/TESbMjbb_vI/AAAAAAAAAMY/dYJLkeWHL3o/ s320/box.png]

  • Grid (Rejilla) [http://3.bp.blogspot.com/_26RJWnubh-w/TESbOPkyi8I/AAAAAAAAAMg/zxdi_EYpfcM/ s320/grid.png]

  • Line (Línea) [http://4.bp.blogspot.com/_26RJWnubh-w/TESbNI8TUfI/AAAAAAAAAMc/A-M_soM3WpA/ s320/line.png]

Lo único necesario para que se muestre una regla es poner su nombre en el archivo que se va a "leer", por ejemplo

=============================================================================== Sphere =============================================================================== Mostraría una esfera.

Como no, este lenguaje permite comentarios multilínea, desde  /   hasta / y comentarios de una sola línea, poniendo // al principio del comentario, como cualquier comentario en C.

Por cierto, si estas viendo que las imágenes tienen el fondo en blanco, pero si lo haces tu no, es por que hay que añadir

=============================================================================== set background white =============================================================================== Ya explicaré más tarde para que sirve, pero no afecta a la programación en si.

Transformaciones geométricas: Movimiento, Traslaciones

En este lenguaje siempre se parte del sistema de coordenadas, para mover una regla lo que hay que hacer es mover sus coordenadas a través de lo que se llaman transformaciones, estas se especifican entre '{'  '}' antes de una regla, para mover el sistema de coordenadas del eje X en 2 unidades haremos { x 2 } regla

Lo mismo para cualquier otro eje ('Y' o 'Z'). Así si queremos poner dos cajas separadas, haremos

=============================================================================== Box { x 2 } Box =============================================================================== El resultado es este: [http://1.bp.blogspot.com/_26RJWnubh-w/TESfluHPlUI/AAAAAAAAAMo/7p6049Gm7rs/ s320/box2.png]

Hay que recordar que las transformaciones solo se aplican para esa regla en concreto, las nuevas reglas seguirán partiendo del sistema de coodenadas original.

=============================================================================== Box { x 2 } Box { x 4 } Box =============================================================================== [http://1.bp.blogspot.com/_26RJWnubh-w/TESgH44zjDI/AAAAAAAAAMs/ueK2lZ6uuUk/ s320/box3.png]

Esto se puede hacer pesado si se tiene que repetir muchas veces, así que se puede utilizar un bucle que lo haga, la sintaxis para hacerlo es: * { }

Por ejemplo, si queremos que se repita lo que hemos estado haciendo (poner cajas separadas), digamos... 10 veces, haremos:

=============================================================================== 10 * { x 2 } Box ===============================================================================

Importante: Cada iteración del bucle parte del sistema de coordenadas de la anterior (la primera parte del original)

[http://3.bp.blogspot.com/_26RJWnubh-w/TESh9jU1CFI/AAAAAAAAAMw/VxQHJSEFRxQ/ s320/box4.png]

Por supuesto, también se pueden anidar para hacer cosas más complejas, por ejemplo:

=============================================================================== 10 * { x 2 } 10 * { y 2 } Box ===============================================================================

[http://3.bp.blogspot.com/_26RJWnubh-w/TESj_cEjewI/AAAAAAAAAM0/O3kOrFs5LGo/ s320/box5.png]

Transformaciones geométricas: Rotaciones

Otro tipo de movimiento que se realiza a través de las transformaciones es el de rotación, pero como la posición inicial depende del sistema de coordenadas, lo que se hace es rotar este sistema, por ejemplo, para rotarlo sobre el eje Y ( se "moverán" los ejes 'X' y 'Z' ), especificaremos una transformación ry (rx o rz para los ejes 'X' y 'Z' respectivamente )

Entonces, para dibujar un circulo solo hay que poner una caja, girar el eje 'X' (rotando sobre uno de los otros dos), y avanzar sobre este eje, repitiendo esto hasta que se hayan completado los 360 grados, por ejemplo:

=============================================================================== 360 * { ry 1 x 1 } Box =============================================================================== [http://1.bp.blogspot.com/_26RJWnubh-w/TESmanGWP3I/AAAAAAAAAM4/1s4sOuZ0y_4/ s320/box6.png]

Transformaciones geométricas: Cambios de tamaño

Además se puede cambiar el tamaño del sistema de coordenadas, hacerlo implica cambiar el tamaño de las figuras y la distancia que se recorrerá con los mismos valores, la transformacion es: s  

La proporcion original es 1, 2 el doble, 0.5 la mitad... Si al ejemplo anterior se le añade esta transformación...

=============================================================================== 360 * { ry 1 x 1 s 0.995 } Box =============================================================================== [http://3.bp.blogspot.com/_26RJWnubh-w/TESpZmdusxI/AAAAAAAAAM8/hOBAi0BlHww/ s320/spiral.png]

Si se añaden más iteraciones la espiral continúa...

=============================================================================== 1080 * { ry 1 x 1 s 0.995 } Box =============================================================================== [http://2.bp.blogspot.com/_26RJWnubh-w/TESpeZUvU2I/AAAAAAAAANA/4zYBbUU_hYk/ s320/spiral2.png]

Transformaciones de color: Tono, saturación y brillo

Structure Synth usa un tipo de color llamado HSV_(Tono,_saturación_y_valor), en vez del RGB, esto divide los colores en 3 valores, tono, la saturación y el valor (o brillo). Tono es el "color" que tiene: rojo, verde, azul... La saturación, que indica la cantidad de color (va de blanco a todo color). Y el valor (o el brillo), que indica la cantidad de luz (de blanco a negro).

El tono va de 0 a  360 y vuelta a empezar (361 es igual a 1), su transformación es hue  

Para ver como funciona de una forma más grafica, volveré al ejemplo del circulo (por problemas con Structure Synth esta pasado por Sunflow) ...

=============================================================================== 360 * { ry 1 x 1 hue 1 } Box =============================================================================== [http://2.bp.blogspot.com/_26RJWnubh-w/TESwC92AldI/AAAAAAAAANE/DjRhanD6C_g/ s320/circle_hue.png]

La saturación es una proporción (como el cambio de tamaño), la transformación es  sat  

Volviendo al caso de las cajas contiguas:

=============================================================================== 10 * { x 1 sat 0.8 } Box =============================================================================== [http://1.bp.blogspot.com/_26RJWnubh-w/TESx4bzDMCI/AAAAAAAAANI/p3Fso7Mw7_0/ s320/line_sat.png]

El valor (o brillo) es también una proporción, de 1 (claro) a 0 (negro), la transformación es b

Siguiendo con el ejemplo de las cajas contiguas

=============================================================================== 10 * { x 1 b 0.8 } Box =============================================================================== [http://4.bp.blogspot.com/_26RJWnubh-w/TESzEuKMy9I/AAAAAAAAANM/JDlgwcwWjEs/ s320/line_sat.png]  Transformaciones de color: Alfa y colores absolutos

El alfa (o alpha) es el grado de transparencia que tiene un objeto, es una proporción, de opaco a totalmente transparente, la transformación es  a

Si seguimos con las cajas...

=============================================================================== 10 * { x 1 a 0.8 } Box =============================================================================== [http://1.bp.blogspot.com/_26RJWnubh-w/TES0UhmjoeI/AAAAAAAAANQ/KYbcmbe5BCs/ s320/line_a.png]

Por último decir que Structure Synth permite usar colores absolutos con la transformación  color

Los colores pueden ser RGB (rojo: #FF0000, verde: #0000FF ...) y los colores predefinidos de SVG (red, lightred, blue, gray ...)

Parámetros y preprocesador

Structure Synth se basa en unos parámetros para definir el "límite" de lo que se renderizará (ahora puede que no parezca muy lógico, pero con recursividad lo será), estos parámetros se especifican con:

set maxdepth       // Número máximo de generaciónes (iteraciónes o recursividad) antes de acabar set maxobjects      // Número máximo de objetos antes de acabar set minsize      // Tamaño mínimo de los objetos que se mostrarán antes de acabar set maxsize      // Tamaño máximo de los objetos que se mostrarán antes de acabar set background       // Color de fondo (en RGB o con las palabras clave de SVG)

El preprocesador sirve para definir constantes de la misma forma que se hace en C, no tiene ninguna dificultad...

define nombre_de_la_constante constante

Mezclando un poco de todo...

=============================================================================== 1080 * { ry 1 x 1 hue 1 s 0.997 } Box ===============================================================================

[http://3.bp.blogspot.com/_26RJWnubh-w/TETIEy2b9eI/AAAAAAAAANU/r9rWXubLDtA/ s320/spiral_color.png]

Eso es todo por ahora, con el próximo más y mejor: definir nuevas reglas, recursividad, fractales, aleatoriedad...

Hasta entonces