O sufixo convencional para um arquivo INST
é .inst.
Não existe formato INST BINARY.
Um INST
aplica uma transformação 4x4 (ou (N+1)x(N+1) no contexto de
ND-viewing) a outro objeto OOGL. Um arquivo do tipo INST
inicia-se com
INST
seguido de as seções mostradas adiante que podem vir em qualquer ordem:
geom oogl-object
especifica o objeto OOGL a ser instanciado. Veja Referencias, para
a sintaxe de um oogl-object. palavra chave unit
é um
sinônimo para geom
.
transform ["{"] transformação 4x4
["}"]
especifica uma matriz de transformação simples. Ou a matriz pode aparecer literalmente como 16 números, ou a matriz pode aparecer como uma referência a um objeto "transform", i.e.
"<" arquivo-contendo-matriz-4x4
ou
":" símbolo-representando-transformação-de-objeto
Outra forma de especificar a transformação é
transforms objeto-oogl
O objeto-oogl deve ser um objeto TLIST
(lista de
transformações), ou uma LIST
cujos membros dessa lista são objetos
TLIST
mais recentes. Com efeito, a palavra chave transforms
toma uma
coleção de matrizes 4x4 e replica o objeto geom
, fazendo
uma cópia para cada matriz 4x4.
Se nem a palavra chave transform
nem a palavra chave transforms
aparecerem, ne-nhuma
transformação é aplicada (atualmente a identidade é aplicada). Você pode
usar isso para, e.g., empacotar uma aparência em torno de um objeto externo
fornecido, através de uma LIST de membros simples pode-se fazer isso mais eficientemente.
Veja Matrizes de transformacao, para o formato de matriz.
A cópia de um objeto geométrico simples por meio de um objeto TLIST
(veja ‘transforms’ acima) pode ser útil para transformar coordenadas de
textura através de outra lista de transformações; essa lista pode ser
especificada por
txtransforms objeto-TLIST
O número de transoformações de textura deve coincidir com o número de transformações
geométricas. O objeto SPHERE
(Veja Sphere Objects) utiliza essa técnica para gerar um esfera completamente texturizada fora
de alguma fração de uma esfera (usualmente um octante).
Uma transformação (N+1)-dimensional pode ser especificada por
ntransform ["{"] N+1 N+1 (N+1)x(N+1) floats
["}"]
A linha acima fornece uma matriz de transformação N+1-dimensional. Ou a matriz pode aparecer literalmente como (N+1)x(N+1) números, ou pode existir uma referência a um objeto ‘ntransform’, i.e.
"<" arquivo-contendo-matriz-(N+1)x(N+1)
ou
":" símbolo-representando-objeto-ntransform
Veja Matrizes de transformacao ND, para o formato de matriz.
Mais dois campos INST são aceitos: location
e origin
.
Note que location
bem como origin
são ignorados se esse
objeto INST
realiza uma ntransform
. Também, se a visualização ND está
ativada (comando ND-axes
, veja GCL) então objetos INST
com origin
diferente de local
não irão ser desenhados, embora o
material location
possa trabalhar (ou não).
location [global ou camera ou ndc ou screen ou local]
Normalmente um INST especifica uma posição relativa a seu objeto pai;
o campo location
permite colocar um objeto em qualquer lugar.
location global
anexa o objeto ao ambiente do sistema de coordenadas global
(também conhecido como "universe") – o mesmo dos objetos mundo do Geomview,
das geometrias alienígenas, e câmeras são colocados.
location camera
coloca o pai do objeto como sendo uma câmera.
(Dessa forma se houverem multiplas visualizações, essas visualizações podem aparecer em uma diferente
posição espacial em cada visualização.) O centro de visão da camera
está em volta da parte negativa do seu eixo z; X positivo está à direita e adiante, Y positivo está acima e adiante.
Normalmente as unidades do espaço da câmera são as mesmas das coordenadas globais.
Quando uma câmera é colocada de volta à sua posição inicial, a orígem global está localizada em (0,0,-3.0).
location ndc
coloca os parentes do objeto no cubo unitário
normalizado no qual a projeção da câmera (perspectiva ou ortográfica)
mapeia o objeto mundo visível. X, Y, e Z estão no intervalo de -1 a +1,
com Z = -1 estando mais próximo e Z = +1 adiante do plano de corte, e X e Y
nas direções à direita e adiante e acima e adiante respectivamente.
Dessa forma alguma coisa como
INST transform 1 0 0 0 0 1 0 0 0 0 1 0 -.9 -.9 -.999 1 location ndc geom < label.vect
cola label.vect
dentro do canto infeiror esquerdo de cada janela,
e em frente de tudo mais que estiver próximo, assumindo o conteúdo
label.vect
como localizado no quadrante positivo do plano XY.
É tentado usar -1 em lugar de como a componente Z da
posição, mas o -1 pode colocar o objeto apenas nas proximidades em lugar de muito perto do
plano de corte e tornar o objeto (parcialmente) invisível, devido a algum erro de cálculo com números em ponto flutuante.
location screen
coloca o objeto objeto em coordenadas de tela.
O intervalo de Z é ainda de -1 a +1 como para coordenadas ndc;
X e Y são medidos em pixels, e a posição de (0,0) localiza-se no canto
inferior esquerdo da janela, avançado para a direita e adiante e para cima e adiante.
location local
é o padrão; o objeto está posicionado relativametne
a seus genitores.
origin [global ou camera ou ndc ou screen ou local] x y z
O campo origin
reposiciona o conteúdo da INST de forma que
o local da orígem seja o ponto especificado do sistema de coordenadas fornecido.
A menos que location
seja especificado, essa opção não muda a orientação, somente a escolha da
orígem. Ambas as opções location
e origin
podem ser usadas juntas.
Então por exemplo
{ INST location screen origin ndc 0 0 -.99 geom { < xyz.vect } transform { 100 0 0 0 0 100 0 0 0 0 -.009 0 0 0 0 1 } }
coloca a orígem de xyz.vect no centro da janela, apenas transformando o plano de corte mais próximo. O comprimento da unidade das arestas X e Y são ajustados proporcionalmente para ter o comprimento de apenas 100 unidades de tela – pixels – , independentemente do tamanho da janela.