Aceasta este structura de comandă-sintet care poate fi rulată în furnizorul de găzduire gratuit OnWorks folosind una dintre multiplele noastre stații de lucru online gratuite, cum ar fi Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS
PROGRAM:
NUME
structure-synth - aplicație pentru crearea structurilor 3D
REZUMAT
structură-sintet
DESCRIERE
Structure Synth este o aplicație pentru crearea de structuri 3D dintr-un set de utilizator specificat
reguli. Structurile rezultate pot fi vizualizate în vizualizatorul integrat OpenGL sau exportate
la diverse formate. Programul a fost inspirat de sintaxa CFDG de Chris Coyne, iar
GUI fără context de Mark Lentczner și John Horigan.
STATE, TRANSFORMĂRI AND ACȚIUNI
Structure Synth este totul despre stări. O stare descrie sistemul de coordonate curent și
modul de colorare curent. Sistemul de coordonate determină poziția, orientarea și
dimensiunea tuturor obiectelor desenate în starea curentă.
Statele sunt modificate prin transformări. De exemplu, putem muta sistemul de coordonate unul
unitate în direcția x prin aplicarea transformării: { x 1 }. În mod similar, putem roti
sistemul de coordonate la 90 de grade în jurul axei x prin aplicarea:{ rx 90 }. Statele sunt
combinat automat în timpul analizării, adică { x 1 x 1 } este egal cu { x 2 }.
Statele pot fi combinate cu apeluri de reguli pentru a crea acțiuni. caseta { x 2 } este un exemplu de a
transformare urmată de un apel de regulă. „cutie” este o regulă încorporată. Nu este surprinzător, asta
regula desenează o casetă situată la (0,0,0) -> (1,1,1) în sistemul de coordonate curent.
Repetată acţiuni:
Este posibil să se aplice acțiuni repetate, acest lucru se face folosind simbolul de înmulțire:
de exemplu, caseta 3 * { x 2 } ar fi egală cu crearea a trei acțiuni:
caseta { x 2 }
caseta { x 4 }
caseta { x 6 }
Culori transformari:
Similar transformărilor spațiale, este posibilă și transformarea curentului
redarea culorii. Structure Synth folosește HSV (Hue, Saturation and Value) pentru reprezentare
culori - acesta nu este poate la fel de familiar ca modelul de culoare RGB, dar oferă un ușor
reprezentare mai intuitivă odată ce te obișnuiești cu ea (cel puțin asta este ceea ce unii oameni
pretind - personal încă mi se pare mai ușor să gândesc în termeni de roșu, verde și albastru
componente). Transformările de culoare sunt aplicate folosind „nuanța”, „saturația” și
operatori „valoare”.
Următorul exemplu demonstrează atât acțiuni repetate, cât și transformări de culoare pentru a desena a
frumos cub de culoare:
10 * { x 1 hue 36 } 10 * { y 1 sat 0.9 } 10 * { z 1 b 0.9 } caseta
Iată un alt exemplu care demonstrează diferite tipuri de transformări:
cutie de 10 * { x 2 }
1 * { y 2 } 10 * { x 2 rx 6 } casetă
caseta 1 * { y 4 } 10 * { x 2 hue 9 }
1 * { y 6 } 10 * { x 2 s 0.9 } casetă
Built-in reguli:
Boxa este un exemplu de primitive - reguli încorporate - în Structure Synth. The
alte reguli încorporate sunt: Sferă, Punct, Grilă, Linie, Cilindru, Mesh, CylinderMesh.
FACEREA REGULI
Regulile personalizate sunt cheia pentru crearea unor structuri complexe și sofisticate. Regulile sunt
creat folosind cuvântul cheie „regulă”. O regulă poate fi folosită în același mod ca orice primitivă încorporată.
Cel mai important aspect al regulilor este că acestea sunt capabile să se numească. Aruncă o privire
la următorul exemplu:
R1
regula R1 {
{ x 0.9 rz 6 ry 6 s 0.99 sat 0.99 } R1
{ s 2 } sferă
}
Observați că această regulă se numește recursiv. Nu s-ar termina niciodată - totuși
Structure Synth are o adâncime maximă implicită de recursivitate de 1000 de recursiuni. Această valoare poate
fie modificări folosind comanda „set maxdepth xxx”. O altă modalitate de a forța încetarea ar fi
folosind cuvântul cheie „set maxobjects xxx”, ceea ce face ca Structure Synth să țină evidența
numărul de obiecte desenate.
Adăugare unele aleatoriu:
Acum, pentru a face lucruri interesante, probabil că vom dori să creăm ceva mai puțin static
- prin adăugarea unor caractere aleatorii. În Structure Synth acest lucru se realizează prin crearea mai multor
definiții pentru aceeași regulă:
R1
regula R1 {
{ x 0.9 rz 6 ry 6 s 0.99 sat 0.99 } R1
{ s 2 } sferă
}
regula R1 {
{ x 0.9 rz -6 ry 6 s 0.99 sat 0.99 } R1
{ s 2 } sferă
}
Observați că regula „R1” are două definiții. Acum, ori de câte ori are nevoie de constructorul Structure Synth
pentru a apela regula „R1”, va alege una dintre definiții la întâmplare.
REFERINȚE
acţiuni:
Criterii de reziliere:
set adancime maxima [întreg]:
Se întrerupe după iterații [întregi] (generații). Acesta va servi și ca un superior
limita recursiunii pentru toate regulile.
set maxobiecte [întreg]:
După ce obiectele [întregi] au fost create, construcția este încheiată.
Alte:
set sămânţă [întreg]:
Vă permite să setați sămânța aleatoare. Acest lucru face posibilă reproducerea creațiilor.
set fundal [culoare]:
Vă permite să setați culoarea de fundal. Culorile sunt specificate ca șiruri de text analizate
folosind analiza culorilor Qt, permițând specificații standard HTML RGB (de exemplu, #F00
sau #FF0000), dar și nume de cuvinte cheie SVG (de ex. roșu sau chiar galben-auriu deschis).
Regula modificatori:
md / adancime maxima [întreg]:
Retragerea regulii. Setează valoarea maximă recursivă pentru regulă. Regula nu se va executa
orice acțiuni după ce această limită a fost atinsă.
md / adancime maxima [întreg] > [nume regulă]:
Retragerea regulii cu înlocuire. Setează recursivitatea maximă pentru regulă. După
această limită a fost atinsă [nume regulă] va fi executată în schimb această regulă.
w / greutate [pluti]:
Reguli ambigue.Dacă mai multe reguli sunt definite cu același nume, o aleatorie
definiția este aleasă în funcție de greutatea specificată aici. Dacă nici o greutate este
specificat, se utilizează greutatea implicită de 1.
Transformări:
Transformări geometrice:
x [pluti]:
Translația axei X. Argumentul float este offset-ul măsurat în unități ale localului
sistem de coordonate.
y [pluti]:
Translația axei Y. Ca mai sus.
z [pluti]:
Translația axei Z. Ca mai sus.
rx [pluti]:
Rotație în jurul axei x. Argumentul „float” este unghiul specificat în grade.
Axa de rotație este centrată pe cubul unității din sistemul local de coordonate: că
este axa de rotație care conține segmentul de linie de la (0, 0.5, 0.5) -> (1, 0.5, 0.5).
ry [pluti]:
Rotație în jurul axei y. Ca mai sus.
rz [pluti]:
Rotație în jurul axei z. Ca mai sus.
s [pluti]:
Redimensionează sistemul local de coordonate. Observați că centrul pentru redimensionare este
situat în centrul cubului unității în sistemul local (la (0.5,0.5,0.5)).
s [f1] [f2] [f3]:
Redimensionează sistemul local de coordonate. Ca mai sus, dar cu o scară separată pentru fiecare
dimensiune.
m [f1] ... [f9]:
Aplică matricea de rotație 3x3 specificată la matricea de transformare pentru
starea curenta. Despre ordinea argumentelor: [f1],[f2],[f3] definește primul rând de
matricea.
fx: Oglindește sistemul local de coordonate în jurul axei x. Ca deasupra planurilor de oglindire
este centrat pe cub.
fy: Oglindește sistemul de coordonate local în jurul axei y.
fz: Oglindește sistemul local de coordonate în jurul axei z.
Transformări ale spațiului de culoare:
h / nuanţă [pluti]:
Adaugă valoarea „float” la parametrul de culoare nuanță pentru starea curentă. Nuanțele sunt
măsurată de la 0 la 360 și se înfășoară ciclic - adică o nuanță de 400 este egală cu o nuanță de
40.
SAT [pluti]:
Înmulțește valoarea „float” cu parametrul de culoare de saturație pentru curent
stat. Saturația este măsurată de la 0 la 1 și este fixată la acest interval (adică
valorile mai mari decât 1 sunt setate la 1).
b / strălucire [pluti]:
Multiplică valoarea „float” cu parametrul de culoare a luminozității pentru curent
stat. Luminozitatea este măsurată de la 0 la 1 și este fixată la acest interval. Înștiințare
acel parametru se numește uneori „V” sau „Valoare” (și spațiul de culoare este adesea
denumit HSV).
a / alfa [pluti]:
Înmulțește valoarea „float” cu parametrul de culoare alfa pentru starea curentă.
Alfa este măsurat de la 0 la 1 și este fixat la acest interval. O valoare alfa a
zero este complet transparent, iar o valoare alfa de unu este complet opac.
culoare [culoare]:
Această comandă setează culoarea la o culoare absolută (majoritatea celorlalte transformări sunt
modificări relative asupra stării curente). Culorile sunt specificate ca șiruri de text
analizat folosind analiza culorilor Qt, permițând specificații standard HTML RGB
(de ex. #F00 sau #FF0000), dar și nume de cuvinte cheie SVG (de exemplu, roșu sau par
auriu deschis galben).
Desen primitive:
cutie: cutie solidă
grilă: cutie wireframe
sferă:
chestia rotundă (de acum această primitivă are unele probleme - de exemplu, elipsoizii sunt
Nu funcționează.)
linia: de-a lungul axei x, centrată în planul y,z.
punct: centrat în sistemul de coordonate.
triunghi:
creează un poligon personalizat. Specificați coordonatele după cum urmează:
Triunghi[0,0,0;1,0,0;0.5,0.5,0.5]
plasă: plasă prototip
cilindru:
axa de simetrie va fi axa x curentă. [Neimplementat]
tub: cilindru poligonal (va fi desenat fără probleme pe măsură ce sistemul de coordonate se transformă).
[Neimplementat]
Preprocesor comenzi:
#defini varname valoare:
înlocuiește fiecare apariție a lui „varname” cu „valoare”. Valoarea poate conține spații.
Pentru Context Gratuit / CFDG utilizatori:
Sintaxa EisenScript din Structure Synth are multe în comun cu CFDG.
Există totuși câteva diferențe importante:
Context sensibilitate:
Un script CFDG poate fi privit ca o gramatică, unde sunt regulile de producție
independent de contextul lor – sau spus altfel – atunci când alegeți între reguli
CFDG nu are cunoștințe despre istoria sistemului. Acest „Fără context”
proprietatea CFDG a fost omisă în mod deliberat în EisenScript, pur și simplu pentru pragmatică
motive: unele structuri ar fi dificil de creat fără a avea vreo modalitate de a face
schimba regulile după un anumit număr de recursiuni.
"startrule" afirmație:
în CFDG regulile de pornire sunt specificate în mod explicit. În EisenScript, o versiune mai generică
se folosește abordarea: instrucțiunile care pot fi utilizate într-o definiție de regulă pot fi și ele
folosit la nivelul superior, deci pentru a specifica o regulă de pornire, trebuie doar să scrieți
numele regulii.
Terminare criterii:
în CFDG recursiunea se termină automat când obiectele produse sunt prea mici
a fi vizibil. Aceasta este o soluție foarte elegantă, dar nu este ușor de realizat într-un
lume dinamică 3D, în care utilizatorul se poate mișca și mări cu camera. Mai multe opțiuni
există în Structure Synth pentru a termina redarea.
Transformare Ordin:
în transformările CFDG (la care CFDG se referă ca ajustări) în paranteze sunt
nu se aplică în ordinea apariției, iar dacă transformări multiple ale aceluiași
sunt aplicate, doar ultima este efectiv realizată. Pentru transformări în
parantezele drepte în CFDG, ordinea, pe de altă parte, este semnificativă. În Structură
Synth ordinea transformării este întotdeauna semnificativă: transformările sunt aplicate
pornind de la cea din dreapta.
EXEMPLU
Mai jos este un eșantion EisenScript:
/*
Eșantion Torus.
*/
setați adâncimea maximă 100
r1
36 * { x -2 ry 10 } r1
regula 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
}
regula r2 {
caseta { s 0.9 0.1 1.1 hue 10 } // un comentariu
}
regula r2 w 2 {
{ hue 113 sat 19 a 23 s 0.1 0.9 1.1 } caseta
}
Utilizați structura-synth online folosind serviciile onworks.net
