primitivas

Description

Primitivas são objetos que você pode renderizar. Não há muito mais coisas numa cena do fluxus, exceto luzes, uma camera e muitas primitivas.

(build-cube)

Returns número-de-id-da-primitiva

Um simples cubo, mapeamento de textura por face.

Example

 (define mynewcube (build-cube))

(build-polygons número-de-vértices tipo-de-número)

Returns número-de-id-primitiva

Cónstroi uma primitiva de polígono cru com tamanho de vértices (tudo é inicialmente tido como zero). Tipo é um número que referencia a forma as quais os vértices são interpretados para construir os poligonos, e podem ser os seguintes: 0=TRISTRIP, 1=QUADS, 2=TRILIST, 3=TRIFAN, 4=POLYGON.

Example

 (define mynewshape (build-polygons 100 'triangle-strip))

(build-sphere número-de-cortes-horizontais número-de-cortes-verticais)

Returns número-id-primitiva

Uma esfera com a resolução especificada, a textura mapeada no estilo normal "world map".

Example

 (define mynewshape (build-sphere 10 10))

(build-torus número-raio-interior número-raio-exterior número-cortes número-fatias)

Returns número-id-primitiva

Um torus com a resolução especificada, controle o tamanho e a grossura da "rosquinha" com o raio inferior e exterior.

Example

 (define mynewshape (build-torus 0.5 1 12 12))

(build-plane)

Returns número-id-primitiva

Um único plano quadrado, mapeado de 0->1 em ambas as dimensões.

Example

 (define mynewshape (build-plane))

(build-seg-plane número-de-vértices-x número-de-vértices-y)

Returns número-id-primitiva

Um plano poligonal tesselado, mapeado de 0->1 em ambas dimensões.

Example

 (define mynewshape (build-plane))

(build-cylinder h-segmentos r-segmentos)

Returns número-id-primitiva

Um cilindro coberto, textura mapeada em volta, e mal mapeada em volta do fim.

Example

 (define mynewshape (build-cylinder 10 10))

(build-ribbon numpoints-número)

Returns número-id-primitiva

Cónstroi uma linha consistindo de numpoints pontos. A geometria aponta para a câmera constantemente e a textura é mapeada de forma que se alonga na linha do início ao fim. Você usa as funções pdata para editar as posições e largura das linhas. Se usado iluminado, as normais são falseadas para aproximar uma seção circular cruzada. Adicionalmente, se renderização sólida for limpa com (hint-none) e (hint-wire) ativado, uma rápida linha constante vai ser desenhada - largura específicada pelo comando (line-width).

Example

 (define mynewshape (build-ribbon 10))

(build-text string-texto)

Returns número-id-primitiva

Constrói uma sequencia de planos, mapeados de forma que uma textura de fonte possa ser usada para visualização. Pode vir a ser útil para coisas mais abstratas. A fonte é assumida como não proporcional - tem um exemplo de fonte acompanhando o fluxus. Ok, so this isn't a very good font texture :)

Example

 (texture (load-texture "font.png"))
 (define mynewshape (build-text "hello"))

(build-nurbs-sphere h-segmentos r-segmentos)

Returns número-id-primitiva

Constrói uma esfera nurbs tesselada, mapead da mesma forma que a esfera poligonal.

Example

 (define mynewshape (build-nurbs-sphere 10 10))

(build-nurbs-plane h-segmento r-segmento)

Returns número-id-primitiva

Constrói um plano nurbs tesselado, mapeado na direção uv.

Example

 (define mynewshape (build-nurbs-plane 10 10))

(build-particles número-contagem)

Returns número-id-primitiva

Cónstroi uma primitiva de partículas contendo num pontos, tudo inicialmente aplicado à origem. Você usa as funções pdata para editar as posições, cores e tamanhos. Partículas vêm em dois tipos, sprites apontando pra câmera, que são o padrão, podem ser texturizadas e escaladas individualmente; e pontuais (quando hint-points está aplicado), que não podem ser texturizadas mas são muito mais rápidas de renderizar, já que elas são pontos gl suportados pelo hardware. Por defeito essas partículas pontuais são quadradas, ligue hint-anti-alias para faze-las circulares.

Example

 (define mynewshape (build-particles 100))

(build-locator)

Returns número-id-primitiva

Um locator é uma primitiva vazia, útil para parentesco (quando você não quer ter o objeto pai visivel). Essa primitiva só pode ser visualizada com (hint-origin) para mostrar sua origem de transformação local.

Example

 (define mynewshape (build-locator))

(load-primitive)

Returns número-id-primitiva

Example

 (define mynewshape (load-primitive "octopus.obj"))

(clear-geometry-cache)

Returns número-id-primitiva

Example

 (clear-geometry-cache)

(save-primitive)

Returns número-id-primitiva

Example

 (with-primitive (build-sphere 10 10)
     (save-primitive "mymesh.obj"))

(build-pixels número-largura número-altura)

Returns número-id-primitiva

Faz uma nova primitiva pixel. Uma primitiva pixel é usada pra fazer texturas procedurais, que podem então ser aplicadas em outras primitivas. Por essa razão, primitivas pixel não vão ser renderizadas muito, mas você pode renderizar elas para visualizar a texturas em um plano.

Example

 (define mynewshape (build-pixels 100 100))
 (with-primitive mynewshape
     (pdata-map!
         (lambda (c)
             (rndvec))
         "c")
     (pixels-upload)) ; call pixels upload to see the results

(pixels-upload)

Returns void

Traz os dados da textura, você precisa chamar isto quando você finalizou escrever ao pixelprim, e enquanto ele está "grabbed".

Example

 (define mynewshape (build-pixels 100 100))
 (with-primitive mynewshape
     (pdata-map!
         (lambda (c)
             (rndvec))
         "c")
     (pixels-upload)) ; call pixels upload to see the results

(pixels->texture número-id-pixelprim)

Returns número-id-textura

Retorna uma textura que você pode usar exatamente igual uma que foi carregada normalmente.

Example

 (define mypixels (build-pixels 100 100))
 (with-primitive mypixels
     (pdata-map!
         (lambda (c)
             (rndvec))
         "c")
     (pixels-upload))

 (with-state
     (texture (pixels->texture mypixels))
     (build-torus 1 2 10 10))

(build-blobby número-influencias vecsubdvision vecfronteira)

Returns número-id-primitiva

Primitivas blobby no fluxus são uma representação de superfície implicita de alto nível que é definida usando influências no espaço em 3 dimensões. Estas influências são então somadas, e um valor particular é "malheado" (usando o algorítmo dos cubos marchando) para formar uma superfície macia. Estas influências podem ser animadas, e a superfície macia mexe e deforma para adaptar, dando a primitiva seu nome blobby. build-blobby retorna uma nova primitiva blobby. número-influências é o número de "blobs", Subdivisão permite a você controlar a resolução da superfície em cada dimensão, enquanto vecfronteira ajusta a área fronteriça da primitiva em espaço de objeto local. A malha não vai ser calculada fora desta área limite. Influências de cores e posições precisam ser ajustadas usando pdata-set.

Example

 (clear)
 (define b (build-blobby 5 (vector 30 30 30) (vector 1 1 1)))
 
 (with-primitive b
     (shinyness 100)
     (specular (vector 1 1 1))
     (hint-vertcols)
     (pdata-set "p" 0 (vector 0.75 0.25 0.5))
     (pdata-set "c" 0 (vector 0.01 0 0))
     (pdata-set "s" 0 0.01)
     (pdata-set "p" 1 (vector 0.25 0.75 0.5))
     (pdata-set "c" 1 (vector 0 0.01 0))
     (pdata-set "s" 1 0.01)
     (pdata-set "p" 2 (vector 0.75 0.75 0.5))
     (pdata-set "c" 2 (vector 0 0 0.01))
     (pdata-set "s" 2 0.01)
     (pdata-set "p" 3 (vector 0.25 0.25 0.5))
     (pdata-set "c" 3 (vector 0.01 0.01 0))
     (pdata-set "s" 3 0.01)
     (pdata-set "p" 4 (vector 0.5 0.5 0.5))
     (pdata-set "c" 4 (vector 0.01 0.01 0.01))
     (pdata-set "s" 4 0.025))

(blobby->poly número-id-blobbyprimitiva)

Returns número-id-primitivapoly

Converte a malha de uma primitiva blobby em uma primitiva poligonal de lista de triângulos.

Example

 (clear)
 (define b (build-blobby 5 (vector 30 30 30) (vector 1 1 1)))
 
 (with-primitive b
     (shinyness 100)
     (specular (vector 1 1 1))
     (hint-vertcols)
     (pdata-set "p" 0 (vector 0.75 0.25 0.5))
     (pdata-set "c" 0 (vector 0.01 0 0))
     (pdata-set "s" 0 0.01)
     (pdata-set "p" 1 (vector 0.25 0.75 0.5))
     (pdata-set "c" 1 (vector 0 0.01 0))
     (pdata-set "s" 1 0.01)
     (pdata-set "p" 2 (vector 0.75 0.75 0.5))
     (pdata-set "c" 2 (vector 0 0 0.01))
     (pdata-set "s" 2 0.01)
     (pdata-set "p" 3 (vector 0.25 0.25 0.5))
     (pdata-set "c" 3 (vector 0.01 0.01 0))
     (pdata-set "s" 3 0.01)
     (pdata-set "p" 4 (vector 0.5 0.5 0.5))
     (pdata-set "c" 4 (vector 0.01 0.01 0.01))
     (pdata-set "s" 4 0.025))
 
 (define p (with-state
     (translate (vector 1 0 0))
     (blobby->poly b)))

(draw-instance número-id-primitiva)

Returns void

Copia um modo retido da primitiva e desenha ela no estado corrente como um no modo imediato.

Example

 (define mynewshape (build-cube))
 (colour (vector 1 0 0))
 (draw-instance mynewshape) ; draws a copy of mynewshape

(draw-cube)

Returns void

Desenha um cubo no estado imediato corrente.

Example

 (define (render)
     (draw-cube))
 (every-frame (render))

(draw-plane)

Returns void

Desenha um plano no estado corrente em modo imediato

Example

 (define (render)
     (draw-plane))
 (every-frame (render))

(draw-sphere)

Returns void

Desenha uma esfera no estado corrente em modo imediato.

Example

 (define (render)
     (draw-sphere))
 (every-frame (render))

(draw-cylinder)

Returns void

Desenha um cilindro no estado corrente em modo imediato.

Example

 (define (render)
     (draw-cylinder))
 (every-frame (render))

(draw-torus)

Returns void

Desenha um torus no estado imediato corrente.

Example

 (define (render)
     (draw-torus))
 (every-frame (render))

(destroy número-id-primitive)

Returns void

Deleta uma primitiva construída do renderizador.

Example

 (define mynewshape (build-sphere 10 10))
 (destroy mynewshape)

(poly-set-index lista-indexada)

Returns void

Troca a primitiva por modo indexado,e usa a lista como valores de index para essa primitiva.

Example

 (clear)
 ; lets build our own cube primitive...
 (define p (build-polygons 8 'quad-list))
 
 (with-primitive p
     ; setup the vertex data
     (pdata-set "p" 0 (vector -1 -1 -1))
     (pdata-set "p" 1 (vector  1 -1 -1))
     (pdata-set "p" 2 (vector  1 -1  1))
     (pdata-set "p" 3 (vector -1 -1  1))
     (pdata-set "p" 4 (vector -1  1 -1))
     (pdata-set "p" 5 (vector  1  1 -1))
     (pdata-set "p" 6 (vector  1  1  1))
     (pdata-set "p" 7 (vector -1  1  1))
     (pdata-set "c" 0 (vector  0  0  0))
     (pdata-set "c" 1 (vector  0  0  1))
     (pdata-set "c" 2 (vector  0  1  0))
     (pdata-set "c" 3 (vector  0  1  1))
     (pdata-set "c" 4 (vector  1  0  0))
     (pdata-set "c" 5 (vector  1  0  1))
     (pdata-set "c" 6 (vector  1  1  0))
     (pdata-set "c" 7 (vector  1  1  1))
     
     (hint-wire)
     (hint-unlit)
     (hint-vertcols)
     
     ; connect the verts together into faces
     (poly-set-index (list 7 6 5 4  5 6 2 1 
             4 5 1 0  1 2 3 0
             3 7 4 0  6 7 3 2)))

(poly-convert-to-indexed)

Returns void

Converte o atual poligono primitivo que está "grabbed" de arrays de vértices crus para arrays indexadas. Isto remove vértices duplicados do polígono, fazendo a array de pdata menor, o que aumenta a velocidade do processo.

Example

 (define mynewshape (build-sphere 10 10))
 (grab mynewshape)
 (poly-convert-to-indexed)
 (ungrab)

(build-copy número-primitiva-fonte)

Returns número-id-primitiva

Retorna uma cópia da primitiva

Example

 (define mynewshape (build-sphere 10 10))
 (define myothernewshape (build-copy mynewshape))

(make-pfunc string-nome)

Returns número-pfuncid

Faz uma nova primitiva funcional. Pfuncs variam de propósito geral até operações complexas e especializadas que você pode rodar em primitivas. Todas as pfuncs dividem a mesma interface para controlar e ajustar - pfunc-set! Todos os tipos e argumentos pfunc são como os seguintes: arithmetic Para aplicar aritmética geral para qualquer array pdata. operator string : um dos add sub mul div src string : nome pdata array other string : nome pdata array (opcional) constant float : valor constante (opcional) dst string : nome pdata array genskinweights Gera pesos de skinning - adiciona float pdata chamada "s1" -> "sn" aonde n é o número de nós no esqueleto - 1 skeleton-root primid-number : a raiz da posebind do esqueleto para skinning sharpness float : um controle de quão afiado o vinco vai ser quando "skineado". skinweights->vertcols Uma utilidade para visualizar pesos de skin para debugar. sem argumentos. skinning Skin uma primitiva - deforma ela para seguir os movimentos de um esqueleto. Primitivas que a gente quer usar isto deve conter extra pdata - cópias das posições iniciais das posições dos vértices chamadas "pref" e o mesmo para normais, se as normais estão sendo skineadas , chamada "nref". skeleton-root primid-number : a primitiva raiz do esqueleto animado bindpose-root primid-number : a raiz primitiva da pose bind do esqueleto skin-normals number : se devemos usar skin nas normais como nas posições

Example

 (define mypfunc (make-pfunc 'arithmetic))

(pfunc-set! número-id-pfunc lista-argumento)

Returns void

Ajusta argumentos na função primitiva. Veja a documentação de make-pfunc para todos os argumentos.

Example

 (define mypfunc (make-pfunc 'arithmetic))
 (pfunc-set! mypfunc (list 'operator "add"
                           'src "p"
                           'const 0.4
                           'dst "p"))

(pfunc-run número-id)

Returns void

Roda uma função primitiva na primitiva atualmente pega.

Example

 (define mypfunc (make-pfunc 'arithmetic))

(geo/line-intersect número-id)

Returns void

Roda uma função primitiva na primitiva atualmente pega.

Example

 (clear)
 (define s (with-state
         (build-torus 1 2 10 10)))
 
 (define l (with-state
         (hint-none)
         (hint-unlit)
         (hint-wire)
         (build-line 2)))
 
 (define (check a b)
     (with-primitive s
         (for-each
             (lambda (intersection)                    
                 (with-state ; draw a sphere at the intersection point
                     (translate (cdr (assoc "p" intersection)))
                     (colour (vector 0 1 0))
                     (scale (vector 0.3 0.3 0.3))
                     (draw-sphere)))
         (geo/line-intersect a b))))
 
 (every-frame
     (with-primitive l
         (pdata-set "p" 0 (vector 0 -5 0))
         (pdata-set "p" 1 (vector (* 5 (sin (time))) 5 0))
         (check (pdata-ref "p" 0) (pdata-ref "p" 1))))