Next Previous Contents

3.2 Popis jazyka A

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).

Syntaxe

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á.

Sémantika

Čí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.

Vestavěné aritmetické 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.

Příklad

(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.

Poznámka

čí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ě.

Definování vlastních funkcí

[ 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.

Příklady

[ $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).

Funkce pro sázení objektů scény

"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.

Poznámka

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

Časové funkce

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.

Vestavěné proměnné

$t

čas od začátku intervalu;

$e

délka intervalu

$p

normalizovaný čas ( $t / $e )

$q

( 1 - $p )

Funkce pro vnitřní nastavení

kncm1

počet kapek na centimetr krychlový.


Next Previous Contents