Jde o zásobníkový jazyk a může velmi vzdáleně připomínat Postscript. Všechny příkazy jsou jako by v obrácené polské notaci (postfixové formě). To znamená, že nejprve je výčet argumentů a až po nich následuje funkce (operátor).
fce : argumenty fce_id ; argumenty : seznam | fce | proměnná | číslo | vektor | řetězec ; seznam : '[' příkaz ']' ;
číslo
double
vektor
ve tvaru (x y z)
např.: (1.2 0 -15)
.
proměnná
$p, $q, $t, $e, $1, $2, ... $9 vestavěné proměnné, bližší popis viz níže.
řetězec
něco v uvozovkách např: "fce2"
.
Jak je vidět, syntaxe je opravdu jednoduchá.
Číslo, vektor, řetězec anebo proměnná uloží svou hodnotu na zásobník,
fceN
vezme posledních N položek zásobníku a výsledek opět uloží
na zásobník. Mnemotechnika názvu funkcí je taková, že poslední znak názvu
vyjadřuje árnost funkce.
add2, sub2
sčítání, odčítání. Příklad: 1 3 add2
.
smul2, div2
násobení, dělení vektoru skalárem.
Příklad (1 2 3) 4 div2
.
norm1, abs1
normalizace, velikost vektoru.
(1 0 1) (0 1 0) add1 2 div2 norm1 abs1
sečte (1 0 1)+(0 1 0)
, výsledek vydělí dvěma, to celé znormalizuje
a velikost tohoto vektoru bude výsledek.
číslo je chápáno jako vektor s ostatními složkami nulovými nebo nedefinovanými.
Takže 1 (0 1 1) add1
má stejný význam jako (1 0 0) (0 1 1) add2
.
a b t umer3
vážený průměr bodu a
a b
tj. t * b + (1 - t ) * a
a pa d pd t spline5
bod určený řídícími body a
a b
vektory pa
a pd
v čase t
.
a pa d pd t vspline5
tečna v tomto bodě.
[ tělo_fce ] "mojefceN" def2
definuje N-ární funkci mojefceN
.
K argumentům funkce lze přistupovat pomocí proměnných $0, $1, $2, ... $9
.
Proměnné se číslují podle hloubky v zásobníku.
[ $0 1 add2 ] "divny_inc1" def2
definuje funkci my_inc1
, která přičte k argumentu 1.
5 my_inc1
vrátí tedy 6.
[ $2 $1 add2 $0 sub3 ] "divny_prumer3" def2
definuje funkci my_prumer3
, který sečte dva vektory a podělí číslem.
Tedy:
(6 3 3) (6 0 0) 3 divny_prumer3
vrátí (4 1 1)
.
"id" p0 p1 r v ro vl try7
id
název trysky,
p0
pozice trysky,
p1
směr,
r
poloměr,
v
rychlost vytékání,
vl
vlastnost trysky (pro budoucí využití)
"id" p0 p1 rgb rad sve5
id
název,
p0
pozice,
p1
směr,
rgb
barva světla,
rad
kužel.
"id" eye lookat up kam3
id
název,
eye
pozice kamery,
lookat
kam kouká,
up
kde je ``nahoře''.
"id" vec "dfn2"
umožňuje měnit nějaký parametr scény.
výhodné je přidefinovat si stručnější funkci:
[ "hlavnitryska" (0 0 0) (0 1 0) .01 $0 0.1 0 try7 ] "hlavnitryska1" def2
TT čas1
posune čas na TT
, čas se musí posouvat pouze vpřed.
[ tělo intervalu ] LEN int2
tělo intervalu se provede vždy, když se bude chtít zjistit
vzhled scény v časovém intervalu <TT, TT + LEN)
. S výhodou lze použít
vestavěné proměnné $t
, $p
, $q
.
TT end1
čas konce.
$t
čas od začátku intervalu;
$e
délka intervalu
$p
normalizovaný čas ( $t / $e )
$q
( 1 - $p )
kncm1
počet kapek na centimetr krychlový.