Este es el sintetizador de estructura de comandos que se puede ejecutar en el proveedor de alojamiento gratuito de OnWorks utilizando una de nuestras múltiples estaciones de trabajo en línea gratuitas, como Ubuntu Online, Fedora Online, emulador en línea de Windows o emulador en línea de MAC OS.
PROGRAMA:
NOMBRE
structure-synth - aplicación para crear estructuras 3D
SINOPSIS
sintetizador de estructura
DESCRIPCIÓN
Structure Synth es una aplicación para crear estructuras 3D a partir de un conjunto de elementos especificados por el usuario.
normas. Las estructuras resultantes se pueden ver en el visor OpenGL integrado o exportarse
a varios formatos. El programa se inspiró en la sintaxis CFDG de Chris Coyne, y el
GUI sin contexto por Mark Lentczner y John Horigan.
ESTADOS, Transformaciones Y ACCIONES
Structure Synth tiene que ver con los estados. Un estado describe el sistema de coordenadas actual y
el modo de coloración actual. El sistema de coordenadas determina la posición, orientación y
tamaño de todos los objetos dibujados en el estado actual.
Los estados se modifican mediante transformaciones. Por ejemplo, podemos mover el sistema de coordenadas uno
unidad en la dirección x aplicando la transformación: {x 1}. Del mismo modo, podemos rotar
el sistema de coordenadas 90 grados sobre el eje x aplicando: {rx 90}. Los estados son
combinado automáticamente durante el análisis, es decir, {x 1 x 1} es igual a {x 2}.
Los estados se pueden combinar con llamadas a reglas para crear acciones. El cuadro {x 2} es un ejemplo de
transformación seguida de una llamada de regla. 'caja' es una regla incorporada. No es sorprendente que esto
La regla dibuja un cuadro ubicado en (0,0,0) -> (1,1,1) en el sistema de coordenadas actual.
Iterado comportamiento:
Es posible aplicar acciones iteradas, esto se hace usando el símbolo de multiplicación:
por ejemplo, el cuadro 3 * {x 2} equivaldría a crear tres acciones:
{x 2} caja
{x 4} caja
{x 6} caja
Color transformaciones:
Similar a las transformaciones espaciales, también es posible transformar la corriente
color de reproducción. Structure Synth utiliza HSV (tono, saturación y valor) para representar
colores: esto quizás no sea tan familiar como el modelo de color RGB, pero ofrece un ligero
representación más intuitiva una vez que te acostumbras (al menos eso es lo que algunas personas
afirmación: personalmente, todavía me resulta más fácil pensar en términos de rojo, verde y azul
componentes). Las transformaciones de color se aplican utilizando el 'tono', la 'saturación' y
operadores de 'valor'.
El siguiente ejemplo demuestra tanto acciones iteradas como transformaciones de color para dibujar un
bonito cubo de color:
10 * {x 1 tono 36} 10 * {y 1 sat 0.9} 10 * {z 1 b 0.9} caja
Aquí hay otro ejemplo que demuestra diferentes tipos de transformaciones:
Caja de 10 * {x 2}
1 * {y 2} 10 * {x 2 rx 6} cuadro
1 * {y 4} 10 * {x 2 hue 9} cuadro
1 * {y 6} 10 * {x 2 s 0.9} cuadro
Incorporado reglas:
The Box es un ejemplo de una de las primitivas (reglas integradas) en Structure Synth. los
otras reglas integradas son: Esfera, Punto, Cuadrícula, Línea, Cilindro, Malla, CilindroMesh.
HACIENDO REGLAS
Las reglas personalizadas son la clave para crear estructuras complejas y sofisticadas. Las reglas son
creado utilizando la palabra clave 'regla'. Una regla se puede utilizar de la misma forma que cualquier primitiva incorporada.
El aspecto más importante de las reglas es que pueden llamarse a sí mismas. Echar un vistazo
en el siguiente ejemplo:
R1
regla R1 {
{x 0.9 rz 6 ry 6 s 0.99 sábado 0.99} R1
{s 2} esfera
}
Observe que esta regla se llama a sí misma de forma recursiva. Nunca terminaría, sin embargo
Structure Synth tiene una profundidad de recursividad máxima predeterminada de 1000 recursiones. Este valor puede
ser cambios usando el comando 'set maxdepth xxx'. Otra forma de forzar la terminación sería
utilizando la palabra clave 'set maxobjects xxx', que hace que Structure Synth realice un seguimiento de los
número de objetos dibujados.
Adición some aleatoriedad:
Ahora, para que las cosas sean interesantes, probablemente querremos crear algo menos estático.
- agregando algo de aleatoriedad. En Structure Synth esto se logra creando múltiples
definiciones para la misma regla:
R1
regla R1 {
{x 0.9 rz 6 ry 6 s 0.99 sábado 0.99} R1
{s 2} esfera
}
regla R1 {
{x 0.9 rz -6 ry 6 s 0.99 sábado 0.99} R1
{s 2} esfera
}
Observe que la regla 'R1' tiene dos definiciones. Ahora, siempre que el constructor de sintetizadores de estructura necesite
para llamar a la regla 'R1', elegirá una de las definiciones al azar.
REFERENCIA
Comportamiento:
Criterios de terminación:
. máxima profundidad [entero]:
Se rompe después de iteraciones [enteras] (generaciones). Esto también servirá como una parte superior
límite de recursividad para todas las reglas.
. maxobjetos [entero]:
Una vez creados los objetos [integer], la construcción finaliza.
Otro:
. dispersores [entero]:
Le permite establecer la semilla aleatoria. Esto hace posible reproducir creaciones.
. del Proyecto [color]:
Le permite establecer el color de fondo. Los colores se especifican como cadenas de texto analizadas
utilizando el análisis de color de Qt, lo que permite especificaciones HTML RGB estándar (por ejemplo, # F00
o # FF0000), pero también nombres de palabras clave SVG (por ejemplo, rojo o incluso amarillo dorado claro).
Regla modificadores:
md / máxima profundidad [entero]:
Retiro de regla: establece el máximo recursivo para la regla. La regla no se ejecutaría
cualquier acción después de que se haya alcanzado este límite.
md / máxima profundidad [entero] > [nombre de la regla]:
Retiro de regla con sustitución Establece el máximo recursivo de la regla. Después
se ha alcanzado este límite [nombre de la regla] se ejecutará en su lugar esta regla.
w / peso [flotador]:
Reglas ambiguas: si se definen varias reglas con el mismo nombre, se
La definición se elige de acuerdo con el peso especificado aquí. Si no hay peso
especificado, se utiliza el peso predeterminado de 1.
Transformaciones
Transformaciones geométricas:
x [flotador]:
Traslación del eje X. El argumento flotante es el desplazamiento medido en unidades del local
sistema coordinado.
y [flotador]:
Traslación del eje Y. Como anteriormente.
z [flotador]:
Traslación del eje Z. Como anteriormente.
rx [flotador]:
Rotación sobre el eje x. El argumento 'flotante' es el ángulo especificado en grados.
El eje de rotación está centrado en el cubo unitario en el sistema de coordenadas local: que
es el eje de rotación que contiene el segmento de línea de (0, 0.5, 0.5) -> (1, 0.5, 0.5).
ry [flotador]:
Rotación sobre el eje y. Como anteriormente.
rz [flotador]:
Rotación sobre el eje z. Como anteriormente.
s [flotador]:
Cambia el tamaño del sistema de coordenadas local. Observe que el centro para el cambio de tamaño es
ubicado en el centro del cubo unitario en el sistema local (en (0.5,0.5,0.5)).
s [f1] [f2] [f3]:
Cambia el tamaño del sistema de coordenadas local. Como arriba pero con una escala separada para cada uno
dimensión.
m [f1] ... [f9]:
Aplica la matriz de rotación 3x3 especificada a la matriz de transformación para el
estado actual. Acerca del orden de los argumentos: [f1], [f2], [f3] define la primera fila de
la matriz.
efecto: Refleja el sistema de coordenadas local sobre el eje x. Como arriba de los planos reflectantes
está centrado en el cubo.
fy: Refleja el sistema de coordenadas local sobre el eje y.
fz: Refleja el sistema de coordenadas local sobre el eje z.
Transformaciones del espacio de color:
h / matiz [flotador]:
Agrega el valor 'flotante' al parámetro de color de tono para el estado actual. Los tonos son
medido de 0 a 360 y se envuelve cíclicamente, es decir, un tono de 400 es igual a un tono de
40.
sat [flotador]:
Multiplica el valor 'flotante' con el parámetro de color de saturación para la corriente
estado. La saturación se mide de 0 a 1 y se sujeta a este intervalo (es decir,
los valores superiores a 1 se establecen en 1).
b / brillo [flotador]:
Multiplica el valor 'flotante' con el parámetro de color de brillo para la corriente
estado. El brillo se mide de 0 a 1 y se fija a este intervalo. Aviso
ese parámetro a veces se llama 'V' o 'Valor' (y el espacio de color a menudo se
referido como HSV).
a / alfa [flotador]:
Multiplica el valor 'flotante' con el parámetro de color alfa para el estado actual.
Alpha se mide de 0 a 1 y se fija a este intervalo. Un valor alfa de
cero es completamente transparente y un valor alfa de uno es completamente opaco.
Color [color]:
Este comando establece el color en un color absoluto (la mayoría de las otras transformaciones son
modificaciones relativas sobre el estado actual). Los colores se especifican como cadenas de texto
analizado utilizando el análisis de color de Qt, lo que permite especificaciones HTML RGB estándar
(por ejemplo, # F00 o # FF0000), pero también nombres de palabras clave SVG (por ejemplo, rojo o incluso
amarillo claro dorado).
Dibujo de primitivas:
caja: caja sólida
cuadrícula: caja de estructura metálica
esfera:
la cosa redonda (a partir de ahora, esta primitiva tiene algunos problemas, por ejemplo, los elipsoides son
no funciona.)
línea: a lo largo del eje x, centrado en el plano y, z.
punto: centrado en el sistema de coordenadas.
triángulo:
crea un polígono personalizado. Especifique las coordenadas de la siguiente manera:
Triángulo [0,0,0; 1,0,0; 0.5,0.5,0.5]
malla: prototipo de malla
cilindro:
el eje de simetría será el eje x actual. [No se ha implementado]
tubo: cilindro poligonal (se dibujará suavemente a medida que se transforme el sistema de coordenadas).
[No se ha implementado]
Preprocesador comandos:
#definir nombrevar valor:
sustituye cada aparición de 'varname' con 'value'. El valor puede contener espacios.
Para transferencias Contexto Gratis / CFDG usuarios:
La sintaxis de EisenScript en Structure Synth tiene mucho en común con CFDG.
Sin embargo, existen algunas diferencias importantes:
Contexto sensibilidad:
Un script CFDG puede verse como una gramática, donde las reglas de producción son
independiente de su contexto, o dicho de otra manera, al elegir entre reglas
CFDG no tiene ningún conocimiento de la historia del sistema. Este 'sin contexto'
propiedad de CFDG se omitió deliberadamente en EisenScript, simplemente por motivos pragmáticos
Razones: algunas estructuras serían difíciles de crear sin tener alguna forma de
cambiar las reglas después de un cierto número de recursiones.
La 'regla de sobresalto' declaración:
en CFDG las reglas iniciales se especifican explícitamente. En EisenScript, una versión más genérica
Se utiliza un enfoque: declaraciones que se pueden utilizar en una definición de regla, también se pueden
utilizado en el alcance de nivel superior, por lo que para especificar una regla de inicio, simplemente escriba el
nombre de la regla.
Terminación criterios:
en CFDG, la recursividad termina automáticamente cuando los objetos producidos son demasiado pequeños
para ser visible. Esta es una solución muy elegante, pero no es fácil de hacer en un
Mundo 3D dinámico, donde el usuario puede moverse y hacer zoom con la cámara. Varias opciones
existen en Structure Synth para terminar la renderización.
orden:
en las transformaciones CFDG (a las que CFDG se refiere como ajustes) entre llaves son
no se aplica en el orden de aparición, y si múltiples transformaciones del mismo
se aplica el tipo, sólo se realiza realmente el último. Para transformaciones en
corchetes en CFDG el orden por otro lado es significativo. En estructura
Sintetizador el orden de transformación es siempre significativo: se aplican transformaciones
comenzando desde el más a la derecha.
EJEMPLO
A continuación se muestra una muestra de EisenScript:
/*
Muestra Torus.
*/
establecer maxdepth 100
r1
36 * {x -2 ry 10} r1
regla r1 maxdepth 10 {
2 * {y -1} 3 * {rz 15 x 1 b 0.9 h -20} r2
{y 1 h 12 a 0.9 rx 36} r1
}
regla r2 {
{s 0.9 0.1 1.1 tono 10} cuadro // un comentario
}
regla r2 w 2 {
{hue 113 sat 19 a 23 s 0.1 0.9 1.1} caja
}
Utilice el sintetizador de estructura en línea utilizando los servicios de onworks.net