Traduo usando a verso 1.1.1.1 do cvs em ingls.
Tutorial: Os Formatos Geomtricos de Arquivo OOGL 
		(e do Geomview conseqntemente)

OOGL  a abreviatura de Object Oriented Graphics Library (Biblioteca Grfica Orientada a Objetos.  Um objeto OOGL 
chamado um Geom. Existe um formato de arquivo texto  para cada tipo de Geom. Voc
pode chamar um arquivo texto em qualquer progama que usa o formato OOGL. Geomview  um
visualizador interativo de objetos tridimensionais construdo sobre o topo do OOGL. (Geomview executa sobre
as palntaformas Silicon Graphics, NextStep, e X-Windows.) Existem
notas do Geomview entre colchtes ao longo deste guia dizendo a
voc o que fazer no Geomview para ver do que estamos falando. Posteriormente
notas assumem que voc tenha ambos know how para fazer e tenha realizado o que as notas anteriores
disseram para voc fazer. Todos os arquivos referenciados nesse documento esto no
diretrio de exemplos de arquivos OOGL que acompanham o Geomview.

A seo Os formatos de arquivo OOGL do manual do Geomview  uma referncia
completa para a sintaxe dos formatos de arquivo. Esse tutorial  uma tentativa
de levar voc mais gentilmente ao mundo dos formatos de arquivos OOGL.

----------------------------------------------------------------------
----------------------------------------------------------------------

				QUAD

Iniciamos um um objeto muito simples: um quadrado. Especificamente, o quadrado
unitrio no plano xy em z=0.
----------------------------------------------------------------------
"square.quad":

QUAD
-1 -1 0 
1 -1 0
1 1 0
-1 1 0
----------------------------------------------------------------------
O cabealho "QUAD" identifica o tipo de arquivo.  (Voc pode tambmusar o
cabealho "POLY" para este tipo por razZes histricas.)  Um arquivo QUAD  uma
lista de 4*n vertices onde n  o nmero de quadrilteros. Esse
arquivo contm somente um quadriltero.  Voc tambm pode usar esse formato
para especificar tringulos: apenas use um quadriltero degenerado onde dois
dos quatro vrtices so identicos.  Os vrtices nesse arquivo so
simples: apenas as coordenadas x,y, e z do ponto.

[GEOMVIEW: Digite "geomview square.quad" de uma janela de shell sobre um
Silicon Graphics Iris. Gire o quadrado em torno de si mesmo com o boto esquerdo do mouse
aps geomview T-lo carregado. Sinta-se livre para brincar com geomview por um tempo se
a imaginao atingir voc durante esse tutorial.  ]

O arquivo seguinte tem vrtices mais complexos por incluirem uma cor com as coordenadas do ponto. 
----------------------------------------------------------------------
"csquare.quad":

CQUAD
-1 -1 0		1 0 0 1
1 -1 0		0 1 0 1
1 1 0		0 1 0 1
-1 1 0		1 0 0 1
----------------------------------------------------------------------

Esses foram os mesmos pontos do quadrado anterior, mas com dois cantos vermelhos e
dois cantos verdes. O cabealho  agora "CQUAD" para indicar que seus
vrtices possuem informaes de cores alm das informaes de ponto.
Cores so especificadas pelas qudruplas (r,g,b,a) de nmeros em ponto flutuante
entre 0 e 1. Qualquer cor que pode ser mostrada na tela de um computador
pode ser codificada por alguma combinao de vermelho (r), verde (g) e azul (b). A quarta
componente, alfa, representa a opacidade: 0  transparente e 1 
opaco. As plantaformas X-Window, NextStep, e some SGI ignoram a informao 
alfa inteiramente, mas um instantneo Renderman ir usar a informao
alfa se a transparncia estiver habilitada. Algumas plantaformas SGI utilizam a
informao alfa, mas a figura  garantidamente incorreta.


[geomview: Apague o objeto atual pressionando o boto Delete.  Para
chamar csquare.quad, pressione File/Open/segunda linha do navegador de diretrios 
e localize o "csquare.quad" na lista dos arquivos (pressione o boto OK
quando tiver terminado) dentro da caixa que aparece.

Voc est provavelmente surpreso porque esse quadrado est todo com uma cor somente.  O modo de tonalidade de cor 
padro  o tipo plano, onde cada polgono ou face poligonal  da mesma
cor. Os outros dois modos de tonalidade de cor, constante e liso, iro ambos
mostrar faces multicoloridas onde as cores so lisamente interpoladas
entre os vrtices. Tonalidade de cor constante ignora todas as informaes de iluminao,
enquanto tonalidade de cor lisa interpola iluminao e tambm colorao entre
os vrtices.

Para mudar o modo de sombreamento, primeiro chame o painel de aparncia clicando
sobre a linha Aparncia no navegador principal de painis.  Agora alterne de
modo em modo clicando em diferentes linhas no navegador de @emph{Shading}.
]


 hora de ir na direo de coisas maiores e melhores. 

"dodec.quad":

QUAD
0 0 0.794654 0 0.491123 0.794654 0.356822 0.491123 0.794654 0.467086 0.151765 0.794654
0 0 0.794654 -0.467086 0.151765 0.794654 -0.356822 0.491123 0.794654 4.89153e-09 0.491123 0.794654
0 0 0.794654 -0.288675 -0.397327 0.794654 -0.57735 -0.187593 0.794654 -0.467086 0.151766 0.794654
0 0 0.794654 0.288675 -0.397327 0.794654 4.36694e-09 -0.607062 0.794654 -0.288675 -0.397327 0.794654
0 0 0.794654 0.467086 0.151766 0.794654 0.57735 -0.187592 0.794654 0.288675 -0.397327 0.794654
0 0.710761 0.35538 0 0.491123 0.794654 -0.356822 0.491123 0.794654 -0.467086 0.642889 0.491123
	.
	.
	.
 < 55 lines of numbers deleted>


Agora pegamos um objeto mais interessante: um dodecaedro.  Uma vez que
dodecaedro tem faces de 5 lados, cada uma de suas 12 faces  atualmente feita
de 5 quadrilteros de um total de 20 quadrilteros nesse objeto do tipo Quad.

[geomview: 
Apague o quadrado e chame o arquivo "dodec.quad". Uma vez que os 5
quadrilteros que formam cada face todos se ajustam perfeitamente uns aos outros, o fato de que
existe realmente muitos deles em cada face  somente aparente quando as
bordas so desenhadas. Para habilitar o desenho das bordas, aperte o boto "Edges" no
painel de aparncia.
]


				OFF

Existe uma maneira muito mais eficiente de representar um dodecaedro.

"dodec.off":

OFF
20 12 30
	1.214124 0.000000 1.589309
	0.375185 1.154701 1.589309
	-0.982247 0.713644 1.589309
	-0.982247 -0.713644 1.589309
	0.375185 -1.154701 1.589309
	1.964494 0.000000 0.375185
	0.607062 1.868345 0.375185
	-1.589309 1.154701 0.375185
	-1.589309 -1.154701 0.375185
	0.607062 -1.868345 0.375185
	1.589309 1.154701 -0.375185
	-0.607062 1.868345 -0.375185
	-1.964494 0.000000 -0.375185
	-0.607062 -1.868345 -0.375185
	1.589309 -1.154701 -0.375185
	0.982247 0.713644 -1.589309
	-0.375185 1.154701 -1.589309
	-1.214124 0.000000 -1.589309
	-0.375185 -1.154701 -1.589309
	0.982247 -0.713644 -1.589309
	5 0 1 2 3 4
	5 0 5 10 6 1
	5 1 6 11 7 2
	5 2 7 12 8 3
	5 3 8 13 9 4
	5 4 9 14 5 0
	5 15 10 5 14 19
	5 16 11 6 10 15
	5 17 12 7 11 16
	5 18 13 8 12 17
	5 19 14 9 13 18
	5 19 18 17 16 15

O cabealho "OFF" nos diz que o arquivo dodec.off  um arquivo do tipo "polylist". A segunda linha no
arquivo nos diz que existem 20 vrtices, 12 faces, e 30 arestas.
(As bibliotecas OOGL atualmente no utilizam os valores de arestas, de forma que voc
pode apenas usar 0 se acontecer de no saber o nmero de arestas.)  As prximas 20 seguintes
linhas fornecem uma lista de vrtices. TAs ltimas 12 linhas especificam as faces:
o primeiro numero  o nmero de vrtices naquela face. Uma vez que nosso
poliedro  regular, todas as faces possuem o mesmo nmero de
vrtices (nesse caso, 5).  Os nmeros restantes na linha so
indices dentro da lista de vrtices acima.

Juntamente com o fato de loge mais compacto, o formato de arquivo do tipo "Polylist" incorpora
informao de conectividade no Geom (Objeto OOGL).  OOGL no tem formas de conhecer
se quaisquer dois quadrilteros em um bojeto Quad esto conectados.  Mas
com uma "Polylist", OOGL pode interpolar retas normais ao longo das faces conectadas.
As retas normais de um objeto so usadas para calcular a informao de tonalidade de cor.
Interpolated normals make an object look smooth instead of faceted.
Isso  muitas vezes desejvel se voc estiver tentando aproximar uma superfcie
curva por meio da quebra da mesma em peas pequenas.

[geomview: 
V adiante e chame "dodec.off" sem deletar o oddec.quad.  Agora
voc tem dois Geoms no seu mundo.  A maioria das aes aplicam-se aos
objetos atualmente selecionados. Quando voc inicia o geomview, os objetos
atualmente selecionados  o mundo todo. Voc pode independentemente controlar qualquer
objeto no mundo selecionando esse objeto como alvo e suas aes.
Duplo clicando o boto direito do mouse quando o mouse est sobre um
objeto faz com que ele seja selecionado: duplo clicando o boto direito do mouse sobre o espao vazio
seleciona o mundo completo. Voc pode tambm selecionar objetos clicando sobre a
linha apropriada no navegador de objetos.

Os dois dodecaedros esto provavelmente sobrepostos.  Selecione um deles como
seu alvo, clique sobre a linha "Translate" no navegador de movimentos, e
mova o objeto selecionado afastando-se do centro do mundo com o boto esquerdo
do mouse.  (Para retornar ao modo "Rotate", clique na linha apropriada no
navegador de movimento.)
 
Agora selecione o mundo completo novamente e desenhe as normais pressionando o
boto "Normals" no painel de aparncia. Alterne entre os modos de sombreamento
"Flat" e "Smooth" (clicando no navegador de tonalidades) e note
que a "Polylist" modifica-se mas o "Quad" no se modifica.  

Algumas vezes usando o mouse para clicar no navegador de linhas e botes 
incmodo. Os caracteres colchtes mostram nos painis de controle os
atalhos de teclado que reproduzem o efeito de usar o mouse para
clicar sobre aquela linha ou buto. Por exemplo, "an" (o "a" representa
"appearance") muda o desenho de normais e "t" uda o movimento para
translao.  Como tecla de atalho adicional, voc pode usar o prefixo de um
objeto ("g" ou "c" seguido de um nmero, como mostrado nos partesis no
navegador de objetos) antes da maioria dos comandos para simultneamente selecionar um objeto
e fazer alguma ao para esse objeto. Pr exemplo, "g0r" permite a voc imediatamente
rotacionar o mundo.

]


Vamos comparar duas formas de se colorir uma "Polylist".

facecube.off:

# off file with per face cor
OFF
8 6 12
     1.0 1.0 1.0 
     1.0 1.0 -1.0 
     1.0 -1.0 1.0 
     1.0 -1.0 -1.0 
     -1.0 1.0 1.0 
     -1.0 1.0 -1.0 
     -1.0 -1.0 1.0 
     -1.0 -1.0 -1.0 
     4 0 2 3 1  .05 .8 .1 .75
     4 4 5 7 6  .2 .05 .8 .75
     4 0 4 6 2  .9 .9 .02 .75
     4 1 3 7 5  .0 .7 .4 .75
     4 0 1 5 4  .1 .4 .7 .75
     4 2 6 7 3  .7 .7 0 .75

vertcube.off:

# off file with per vertex cores
COFF
8 6 12
     1.0 1.0 1.0 	.05 .8 .1 .75
     1.0 1.0 -1.0	.2 .05 .8 .75 
     1.0 -1.0 1.0	.9 .9 .02 .75 
     1.0 -1.0 -1.0 	.0 .7 .4 .75
     -1.0 1.0 1.0 	.1 .4 .7 .75
     -1.0 1.0 -1.0 	.7 .7 0 .75
     -1.0 -1.0 1.0 	0. 0. 0. .75
     -1.0 -1.0 -1.0 	1. 1. 1. .75	
     4 0 2 3 1  
     4 4 5 7 6  
     4 0 4 6 2  
     4 1 3 7 5  
     4 0 1 5 4  
     4 2 6 7 3  

Tudo seguindo o caractere "#"  um comentrio para humanos ler e 
ignorado por OOGL. O cabealho para uma "Polylist" plana  opcional, mas
se voc tiver qualquer coisa ao lado de pontos em um vrtice voc precisar fazer um cabealho
apropriado.  O objeto  um cubo unitrio, qu tem 8 vrtices, 6 faces,
e 12 arestas.  O primeiro colorao por face e o segundo tem
colorao pro vrtice.

Um ponto sutil: o cabealho para vertcube.off  "COFF" como voc pode
esperar mas o cabealho para facecube.off  apenas "OFF" por que o
cabealho refere-se somente estrutura dos vrtices, no ao arquvo
como um todo.

[geomview: 
Apague tudo selecionando o mundo como alvo e clicando o boto
delete. Agora chae "facecube.off" e "vertcube.off". Translacione um
deles para adiante de centro de forma que voc possa ver o que voc est fazendo.
Alterne ambas as "Polylists" entre os modos de tonalidade "Constant",
"Flat", e "Smooth".

Tonalidade  realizada conforme a fonte de luz que voc controla.
Para brincar com luzes, abra o painel "Light" clicando na linha
"Light" no navegador de "Inspect". Quando voc pressionar o boto "Show Lights",
voc ir ver raios luminosos que voc pode arrastar ao redor para mover as luzes.
Voc tambm pode adicionar "add", apagar "delete", modificar a intensidade da, e modificar a
cor das luzes.
]


				MESH

Os vrtices de um arquivo de Malha(Mesh) so conectados em uma grade retangular.

tent.mesh:
CMESH
3 3
0 0 0  1 0 0 1	   1 0 1  0 1 0 1	    2 0 0  0 0 1 1
0 1 0  1 0 0 1	   1 1 1  0 1 0 1	    2 1 0  0 0 1 1
0 2 0  1 0 0 1	   1 2 1  0 1 0 1	    2 2 0  0 0 1 1

O cabealho "CMESH" nos diz que esse  um arquivo de Malha e cada vrtice
contm ambos ponto e informao de cor.  A segunda linha significa que
ambas as dimenses u e v da malha so 3, ento existiro 3*3 =
9 vrtices. Cada vrtice que no est sobre uma aresta externa est conectado a
seus 4 vizinhos por uma aresta. Em "tent.mesh", somente o
ponto (1,1,1)  um ponto interno. Os 9 vrtices, quando chamados (u,v),
so especificados na ordem crescente de v, apenas como um array em C:

(0,0)---(1,0)---(2,0)   
  |	  |	  |
(0,1)---(1,1)---(2,1)
  |	  |	  |
(0,2}---(1,2)---(2,2)

[geomview:
Apague tudo e chame "tent.mesh". Entre no modo de tonalidade "Smooth" (Inspect/Appearence/Shading) para
ver cada vrtice com sua prpia cor de forma que seja bvio como os pontos no
arquivo correspondem com a imagem no visualizador.
]

Se voc desejar a malha seja fechada ao longo das ou (ou ambas) arestas 
u ou v, insira ou um "u" ou um "v" no cabealho apenas antes de
"MESH".
	
"wraptent.mesh" 
CuMESH
3 3
0 0 0  1 0 0 1	   1 0 1  0 1 0 1	    2 0 0  0 0 1 1
0 1 0  1 0 0 1	   1 1 1  0 1 0 1	    2 1 0  0 0 1 1
0 2 0  1 0 0 1	   1 2 1  0 1 0 1	    2 2 0  0 0 1 1

[geomview: 
Chame "wraptent.mesh" e compare as duas malhas, transladando-as
separadamente se necessrio.
]

Existe uma forma extremamente eficiente de descrever uma malha quando as coordenadas
x e y coincidem com as coordenadas u e v de todo ponto.

"ztent.mesh":
ZMESH
3 3
0 1 0
0 1 0
0 1 0

"ztent.mesh"  exatamente a mesma aparncia que "tent.mesh", embora seus
vrtices no tenham quaisquer cores. O cabealho "ZMESH" significa que somente
as coordenadas do eixo z de cada ponto  especificada e as coordenadas
x e y de cada ponto so escolhidas para serem iguais  sua posio (u,v) na
grade.

[geomview:
Chame "ztent.mesh" para verificar que esse arquivo realmente tem a mesma aparncia que "tent.mesh"
]



				VECT

Um vetor  uma coleo de "polylines", que so linhas com um ou mais
vrtices. Aqui est um arquivo especificando um "X" e o eixo x em vermelho, um "Y"
e o eixo y em verde, e um "Z" e o eixo z em azul.

"xyz.vect":
VECT
8 19 3
2 2 2 2 2 3 2 4 
1 0 0 1 0 0 1 0

0 0 0  1 0 0
1 -.05 .05   1  .05 .25
1  .05 .05   1 -.05 .25

0 0 0  0 1 0
-.05 1 .25   0  1   .15
 .05 1 .25   0  1   .15   0  1  .05

0 0 0  0 0 1
-.05 .25 1  .05 .25 1   -.05 .05 1   .05  .05  1

1 0 0 1
0 1 0 1
0 .6 1 1

O cabealho  sempre "VECT": nenhuma letra pode ser pregada na frente.
A segunda linha significa que existem 8 "polylines", que possuem um total
de 19 vrtices e 3 cores. No existe indexao dentro de uma lista de
vrtices como uma "polylist": todo vrtice simples deve ser especificado
separadamente. A terceira linha lista o nmero de vrtices em cada
"polyline". Em "xyz.vect", somente "polylines" com mais que 2 vrtices
so a parte superior do "Y", que tem 3, e o "Z", que tem 4.
A quarta linha lista o nmero de cores em cada "polyline".  Quando uma
"polyline" no possui cores essa "polyline"herda a cor previamente escolhida.  A seguir
vem os 19 vrtices: somente pontos so permitidos. Finalmente, as 3 cores
so fornecidas nas ltimas trs linhas.

[geomview: 
Apague tudo, chame e olhe "xyz.vect". Faa a mesma coisa para
todos os exemplos restantes.
]

				BEZ

Para aqueles que j entenderam como criar ajustes em superfcie
paramtrica, a sintaxe do ajuste da superfcie de Bezier  descrito pgina de
manual da OOGL. A arte de construir superfcies paramtricas no  facilmente
explicvel: dessa forma, superfcies paramtricas esto dentro da abrangncia deste tutorial
discut-las.


"Lists" e "Insts" so Geoms complexos que podem ser usados para criar uma
rvore hierrquica de objetos. 

				LIST

Uma "List"  apenas uma coleo de outros Geoms.

"ref.list":
LIST
< xyz.vect
< dodec.quad
{ = QUAD -1 -1 0   1 -1 0  1 1 0  -1 1 0}


O cabealho  sempre exatamente "LIST". Os primeiros dois subgeoms referem-se a
outros arquivos, usando a sintaxe " < nomearquivo ". Omitimos as
chaves opcionais.  O terceiro  um objeto literal,
ou in-line. Embora essa sintaxe em particular possa ainda trabalhar se esquecermos
as chaves e o sinal de igual, sintaxe muito similar no
pode ento seguimos a regra "quando tiver dvida, use as chaves".

[geomview:
Geomview procura por nomes de arquivos no diretrio atual, o camino de nomes na
varivel de ambiente GEOMDATA, e no mesmo diretrio que o arquivo
que est atualmente sendo lido pelo geomview. 
]

				INST

Um "Inst" uma ou mais transformaes 4x4 aplicada a outro Geom.  Essas
matrizes podem representar todas as transformaes em 3D tais como rotao,
translao, homotetia, reduo e perspectiva.  Usamos matrizes 4x4
em lugar de matrizes 3x3 de forma que podemos usar coordenadas homogneas e
concatenar todas as transformaes sem tratar translaes como
casos especiais que requerem adies em lugar de multiplicaes.  Matrizes
4x4 podem tambm serem usadas para operaes tais como rotaes em 4D
ou transformaes projetivas hiperblicas. Um livro texto de lgebra linear
ou um livro texto de computao grfica so bons lugares para iniciar seus estudos se voc no est familiarizado com
essas idias.

"ref.inst":
INST
geom { < ref.list }
transforms { = 
TLIST
 1 0 0 0
 0 1 0 0
 0 0 1 0
 2 0 0 1

 1 0 0 0
 0 1 0 0
 0 0 1 0
 0 2 0 1

 1 0 0 0
 0 1 0 0
 0 0 1 0
 0 0 2 1

 1 0 0 0
 0 1 0 0
 0 0 1 0
 0 0 0 1
}

O cabealho  sempre exatamente "INST". O valor seguindo a palavra chave
"geom"  uma referncia de nome de arquivo "ref.list", que  a "List" que
mostramos acima.  Isso tambm pode ser um  Geom in-line ou um manipulador. Cercamos
o valor com chaves para evitar ambiguidade.

O valor da palavra chave "transforms"  uma "TList" in-line. Isso tambm
pode ser uma referncia a um nome de arquivo ou um manpulador. (Veja a seo Os Formatos
de Arquivo do OOGL do manual do Geomview para especificidades.) Uma "TList"  atualmente um
Geom completametne fugidio, mas ns no temos mesmo que chamar um arquivo como "foo.tlist" dentro
do visualizador porque "TLists" so apenas uma coleo de transformaes sem
subgeom associado, de forma que no h nada para ver.

Uma transformao  exatamente 16 nmeros. Os primeiros trs so translaes:
2 unidade nas direes x, y e z, respectivamente. O ltimo  apenas
a identidade. O comprimeto da "TList"  o nmero de instanciaes
da unidade: nesse caso, 4.

Se no pudermos usar instanciao, teremos que calcular 4
Geoms inteiramente novos, uma vez que os atuais pontos no espao de um objeto so
diferentes se voc mov-lo. Uma vez que a unidade de um "Inst" pode ser outro
"Inst", voc pode construir uma hierarqua complexa. Por exemplo, para construi um
sistema solar voc s precisa gerar uma esfera. Tdos os planetes pode ser
instanciaes de homotetias e translaes da que simples Geom.


"warp.inst":
INST
transform {
		1 0 0 0
		0 9 0 0
		0 0 3 0
		0 0 0 1
}
geom { < dodec.off }

Esse "Inst" tem uma transformao simples em lugar de uma lista deles. Dessa forma
usamos a palavra chave "transform" em lugar da palavra chave "transforms". Um "transform" no
 um Geom, de forma que no existe cabealho antes dos 16. Podemos tambm
ter um manipulador aqui.  (Manipuladores esto documentados na seo Formatos de Arquivo
do OOGL do manual do Geomview.) Finalmente, temos "dodec.off" como nossa
unidade.  A ordem do geom e das "transform/transforms" 
irrelevante.


Postscripts:

OOGL:

Esse tutorial no documenta arquivos binrios ou aparncias de objetos.
Veja a seo Formatos de Arquivo do OOGL do manual do Geomview para detalhes. 

Espaos em branco em arquivos OOGL ocorrem para facilitar a vida dos leitores humanos.
"ZMESH 3 3 0 1 0 0 1 0 0 1 0"  um arquivo OOGL vlido.  A nica
excesso  que no pode haver um fim de linha entre o ltimo ndice de
vrtice para uma face tipo "OFF" e os 4 nmeros em ponto flutuante representativos de cor.

Geomview: 

Quando um Geom  chamado, ele automaticamente normalizado ajustar dentro de um
cubo unitrio centrado em torno da origem. O ponto de visualizao padro da cmera 
em {0,0,-3} olhando na direo da orge. Para ver a posio e o tamanho
inalterado de um objeto, seleciona a linah "None" no navegador "Normalization"
Em "Inspect/Appearence". Em geral no importa o que o intervalo de
coordenadas  enquanto o arquivo inteiro for consistente: {0,1},
{-1,1}, {0,100}, {-1000,-500}, {17,36} so todos intervalos vlidos.


