scheme-utils

Description

Comandos do fluxus de alto nível escritos em fluxus

(detach-parent)

Returns void

Remove o pai da primitiva atual, e ajusta as transformações para que a primitiva não mova. Use (parent 1) para evitar este ajuste.

Example

 ; builds and animates a random heirarchical structure,
 ; click on the objects to detach them from their parents
 (define (build-heir depth)
     (with-state
         (let ((p (with-state
                         (translate (vector 2 0 0))
                         (scale 0.9)
                         (build-cube))))
             (when (> depth 0)
                 (parent p)
                 (for ((i (in-range 0 5)))
                     (when (zero? (random 3))
                         (rotate (vector 0 0 (* 45 (crndf))))
                         (build-heir (- depth 1))))))))

 (define (animate-heir children depth)
     (for-each
         (lambda (child)
             (with-primitive child
                 (rotate (vector 0 0 (sin (+ depth (time)))))
                 (animate-heir (get-children) (+ depth 1))))
         children))

 (define (animate)
     (animate-heir (get-children) 0)
     (when (mouse-button 1)
         (let ((s (select (mouse-x) (mouse-y) 2)))
             (when (not (zero? s))
                 (with-primitive s
                     (detach-parent))))))

 (clear)
 (build-heir 5)
 (every-frame (animate))

(with-state expressão ...)

Returns resultado da última expressão

Encapsula mudanças locais, e remove a necessidade de push e pop.

Example

 ; state hierachy, by nesting with-state:
 (with-state
    (hint-vertcols)
    (colour (vector 0 0 1))
    (with-state
        (translate (vector 1 0 0))
        (build-sphere 10 10))
     (build-torus 1 2 30 30))

 ; making primitives:
 (define my-torus (with-state
    (hint-vertcols)
    (colour (vector 0 0 1))
    (build-torus 1 2 30 30)))

(with-primitive primitiva expressão ...)

Returns resultado da última expressão

Encapsula mudanças de estado das primitivas, e remove a necessidade de grab e ungrab.

Example

 (define my-torus (with-state
    (colour (vector 0 0 1))
    (build-torus 1 2 30 30)))

 ; change the torus colour:
 (with-primitive my-torus
    (colour (vector 0 1 0)))

(with-pixels-renderer primitiva-pixel expressão ...)

Returns resultado da última expressão

Permite que você renderize em uma primitiva pixel.

Example


(with-ffgl pluginid-ffgl expressão ...)

Returns resultado da última expressão

Permite que você trabalhe no plugin FFGL específicado.

Example

 (clear)
 (define plugin (ffgl-load "FFGLTile.dylib" 256 256))

 (with-ffgl plugin
   (for ([i (ffgl-get-info)])
        (printf "~a~n" i)))

(pdata-map! procedimento nome-pdata-leitura/escrita nome-pdata-leitura ...)

Returns void

Uma estrutura de controle de alto nível para simplificar a passagem sobre uma array de pdata para deformação de primitivas. Deve ser mais fácil e menos sujeito a erros do que fazer o loop manualmente. Escreve na primeira array pdata.

Example

 (clear)
 (define my-torus (build-torus 1 2 30 30))

 (with-primitive my-torus
   (pdata-map!
      (lambda (position)
          (vadd position (vector (flxrnd) 0 0))) ; jitter the vertex in x
      "p")) ; read/write the position pdata array

 (with-primitive my-torus
   (pdata-map!
      (lambda (position normal)
          (vadd position normal)) ; add the normal to the position (expand the object)
      "p" "n")) ; read/write the position pdata array, read the normals array

(pdata-index-map! procedimento nome-pdata-leitura/escrita nome-pdata-leitura ...)

Returns void

Uma estrutura de controle de alto nível para simplificar a passagem sobre uma array de pdata para deformação de primitivas. Mesmo que pdata-map! exceto que pdata-index-map! fornece o índice do elemento pdata atual como o primeiro argumento ao "procedimento".

Example

 (clear)
 (define my-torus (build-torus 1 2 30 30))

 (with-primitive my-torus
   (pdata-index-map!
      (lambda (index position)
          (vadd position (vector (gh index) 0 0))) ; jitter the vertex in x
      "p")) ; read/write the position pdata array

(pdata-fold procedimento valor-inicial nome-pdata-leitura ...)

Returns resultado do procedimento de dobragem sobre a array pdata

Uma estrutura de controle de alto nível para fazer cálculos em arrays pdata. Roda o procedimento sobre cada elemento pdata acumulando o resultado. Deve ser mais fácil e menos sujeito a erros que percorrer manualmente.

Example

 (define my-torus (build-torus 1 2 30 30))

 ; find the centre of the primitive by averaging
 ; the points position's together
 (let ((centre
        (with-primitive my-torus
                        (vdiv (pdata-fold
                               vadd
                               (vector 0 0 0)
                               "p") (pdata-size)))))

   (display centre)(newline))

(pdata-index-fold procedimento valor-inicial nome-pdata-leitura ...)

Returns resultado do procedimento de dobragem sobre a array pdata

Igual a pdata-fold exceto que passa o índice do elemento pdata atual como o primeiro parâmetro de "procedimento".

Example

 (define my-torus (build-torus 1 2 30 30))

 ; can't think of a good example for this yet...
 (let ((something
        (with-primitive my-torus
                        (vdiv (pdata-index-fold
                               (lambda (index position ret)
                                   (vadd ret (vmul position index)))
                               (vector 0 0 0)
                               "p") (pdata-size)))))

   (display something)(newline))

(vmul vetor número)

Returns vetor resultante

Multiplica um vetor por um número.

Example

 (vmul (vector 1 2 3) 2)
 (vmul (vector 1 2 3 4 5) 3)

(vdiv vetor número)

Returns vetor resultante

Divide um vetor por um número

Example

 (vdiv (vector 1 2 3) 2)
 (vdiv (vector 1 2 3 4 5) 3)

(detach-parent)

Returns void

Remove o pai da primitiva atual, e ajusta as transformações para que a primitiva não mova. Use (parent 1) para evitar este ajuste.

Example

 ; builds and animates a random heirarchical structure,
 ; click on the objects to detach them from their parents
 (define (build-heir depth)
     (with-state
         (let ((p (with-state
                         (translate (vector 2 0 0))
                         (scale 0.9)
                         (build-cube))))
             (when (> depth 0)
                 (parent p)
                 (for ((i (in-range 0 5)))
                     (when (zero? (random 3))
                         (rotate (vector 0 0 (* 45 (crndf))))
                         (build-heir (- depth 1))))))))

 (define (animate-heir children depth)
     (for-each
         (lambda (child)
             (with-primitive child
                 (rotate (vector 0 0 (sin (+ depth (time)))))
                 (animate-heir (get-children) (+ depth 1))))
         children))

 (define (animate)
     (animate-heir (get-children) 0)
     (when (mouse-button 1)
         (let ((s (select (mouse-x) (mouse-y) 2)))
             (when (not (zero? s))
                 (with-primitive s
                     (detach-parent))))))

 (clear)
 (build-heir 5)
 (every-frame (animate))

(with-state expressão ...)

Returns resultado da última expressão

Encapsula mudanças locais, e remove a necessidade de push e pop.

Example

 ; state hierachy, by nesting with-state:
 (with-state
    (hint-vertcols)
    (colour (vector 0 0 1))
    (with-state
        (translate (vector 1 0 0))
        (build-sphere 10 10))
     (build-torus 1 2 30 30))

 ; making primitives:
 (define my-torus (with-state
    (hint-vertcols)
    (colour (vector 0 0 1))
    (build-torus 1 2 30 30)))

(with-primitive primitiva expressão ...)

Returns resultado da última expressão

Encapsula mudanças de estado das primitivas, e remove a necessidade de grab e ungrab.

Example

 (define my-torus (with-state
    (colour (vector 0 0 1))
    (build-torus 1 2 30 30)))

 ; change the torus colour:
 (with-primitive my-torus
    (colour (vector 0 1 0)))

(with-pixels-renderer primitiva-pixel expressão ...)

Returns resultado da última expressão

Permite que você renderize em uma primitiva pixel.

Example


(with-ffgl pluginid-ffgl expressão ...)

Returns resultado da última expressão

Permite que você trabalhe no plugin FFGL específicado.

Example

 (clear)
 (define plugin (ffgl-load "FFGLTile.dylib" 256 256))

 (with-ffgl plugin
   (for ([i (ffgl-get-info)])
        (printf "~a~n" i)))

(pdata-map! procedimento nome-pdata-leitura/escrita nome-pdata-leitura ...)

Returns void

Uma estrutura de controle de alto nível para simplificar a passagem sobre uma array de pdata para deformação de primitivas. Deve ser mais fácil e menos sujeito a erros do que fazer o loop manualmente. Escreve na primeira array pdata.

Example

 (clear)
 (define my-torus (build-torus 1 2 30 30))

 (with-primitive my-torus
   (pdata-map!
      (lambda (position)
          (vadd position (vector (flxrnd) 0 0))) ; jitter the vertex in x
      "p")) ; read/write the position pdata array

 (with-primitive my-torus
   (pdata-map!
      (lambda (position normal)
          (vadd position normal)) ; add the normal to the position (expand the object)
      "p" "n")) ; read/write the position pdata array, read the normals array

(pdata-index-map! procedimento nome-pdata-leitura/escrita nome-pdata-leitura ...)

Returns void

Uma estrutura de controle de alto nível para simplificar a passagem sobre uma array de pdata para deformação de primitivas. Mesmo que pdata-map! exceto que pdata-index-map! fornece o índice do elemento pdata atual como o primeiro argumento ao "procedimento".

Example

 (clear)
 (define my-torus (build-torus 1 2 30 30))

 (with-primitive my-torus
   (pdata-index-map!
      (lambda (index position)
          (vadd position (vector (gh index) 0 0))) ; jitter the vertex in x
      "p")) ; read/write the position pdata array

(pdata-fold procedimento valor-inicial nome-pdata-leitura ...)

Returns resultado do procedimento de dobragem sobre a array pdata

Uma estrutura de controle de alto nível para fazer cálculos em arrays pdata. Roda o procedimento sobre cada elemento pdata acumulando o resultado. Deve ser mais fácil e menos sujeito a erros que percorrer manualmente.

Example

 (define my-torus (build-torus 1 2 30 30))

 ; find the centre of the primitive by averaging
 ; the points position's together
 (let ((centre
        (with-primitive my-torus
                        (vdiv (pdata-fold
                               vadd
                               (vector 0 0 0)
                               "p") (pdata-size)))))

   (display centre)(newline))

(pdata-index-fold procedimento valor-inicial nome-pdata-leitura ...)

Returns resultado do procedimento de dobragem sobre a array pdata

Igual a pdata-fold exceto que passa o índice do elemento pdata atual como o primeiro parâmetro de "procedimento".

Example

 (define my-torus (build-torus 1 2 30 30))

 ; can't think of a good example for this yet...
 (let ((something
        (with-primitive my-torus
                        (vdiv (pdata-index-fold
                               (lambda (index position ret)
                                   (vadd ret (vmul position index)))
                               (vector 0 0 0)
                               "p") (pdata-size)))))

   (display something)(newline))

(vmul vetor número)

Returns vetor resultante

Multiplica um vetor por um número.

Example

 (vmul (vector 1 2 3) 2)
 (vmul (vector 1 2 3 4 5) 3)

(vdiv vetor número)

Returns vetor resultante

Divide um vetor por um número

Example

 (vdiv (vector 1 2 3) 2)
 (vdiv (vector 1 2 3 4 5) 3)