#### 4.2.5 Arquivos do Tipo OFF

O sufixo convencional para arquivos `OFF` é `.off`.

Sintaxe:

         [ST][C][N][4][n]OFF	# Palavra chave do cabeçalho
         [Ndim]		# Dimensão do espaço dos vértices, presente somente se nOFF
         			# estiver também presente
         NVértices  NFaces  NArestas   # NArestas não é usado nem checado

         x[0]  y[0]  z[0]	# Vértices, possivelmente com normais,
         			# cores, e/ou coordenadas de textura, nessa ordem,
         			# se os prefixo N, C, ST
         			# estiverem presentes.
         			# Se 4OFF, cada vértice possui 4 componentes,
         			# incluindo uma componente final homogênea.
         			# Se nOFF, cada vértice possui Ndim componentes.
         			# Se 4nOFF, cada vértice possui Ndim+1 componentes.
         ...
         x[NVértices-1]  y[NVértices-1]  z[NVértices-1]

             			# Faces
             			# Nv = # vértices na referida face
             			# v[0] ... v[Nv-1]: índices dos vértices
             			#		no intervalo 0..NVértices-1
         Nv  v[0] v[1] ... v[Nv-1]  colorspec
         ...
             			# colorspec colar contínuo v[Nv-1]
             			# até o aparecer um caractere de fim de linha; pode ser de 0 a 4
             			# números
             			# nenhum: padrão
             			# inteiro: índice do mapa de cores
             			# 3 ou 4 inteiros: valores RGB[A] no intervalo 0..255
         			# 3 ou 4 números em ponto flutuante: valores RGB[A] no intervalo 0..1

Arquivos `OFF` (nome para "object file format" formato de arquivo de objeto) representa coleções de polígonos planos com vértices possivelmente compartilhados, um caminho conveniente para descrever poliedros. Os polígonos podem ser côncavos mas não existe suporte para polígonos contendo buracos.

Um arquivo `OFF` pode começar com a palavra chave `OFF`; isso é recomendado mas também é opcional, muitos arquivos existentes precisam dessa palavra chave.

Três inteiros ASCII seguem a palavra chave `OFF`: NVértices, NFaces, e NArestas. Esses são o número de vértices, faces, e arestas, respectivamente. Atualmente o software não utiliza nem verifica NArestas; ele não precisa ser correto mas deve estar presente.

As coordenadas do vértice seguem: dimensão * Nvértices valores em ponto flutuante. Esses valores em ponto flutuante estão implicitamente numerados de 0 a NVértices-1. A dimensão é ou 3 (o padrão) ou 4 (especificado pelo caractere chave `4` diretamente antes da palavra chave `OFF`).

Seguindo esses acima citados estão as descrições das faces, tipicamente escritos com uma linha por face. Cada linha tem a forma

         N  Vert1 Vert2 ... VertN  [cor]

Aqui N é o número de vértices sobre a considerada face, e Vert1 a VertN são índices dentro da lista de vértices (no intervalo 0..NVértices-1).

O modificador opcional cor no final da linha acima pode tomar várias formas. Caracteres de fim de linha são significativos nesse ponto: a descrição cor inicia-se após VertN e termina com o caractere de fim de linha (ou próximo caractere cerquilha # representativo de comentário). Uma cor pode ser:

ausência de caractere
  a cor padrão
um inteiro
  índice dentro "do" mapa de cores; veja abaixo
três ou quatro inteiros
  valores de RGB e possivelmente alfa no intervalo 0..255
três ou quatro números em ponto flutuante
  valores RGB e possivelmente alfa no intervalo 0..1

Para o caso de um inteiro, o mapa de cores é lido diretamente do arquivo `cmap.fmap` em sua forma atual no diretório `data` do Geomview. Algum melhor mecanismo para fornecer um mapa de cor será fornecido provavelmente algum dia.

O significado de "cor padrão" varia. Se nenhuma face do objeto tem uma cor, tudo recebe como herança a cor material padrão do ambiente. Se alguma mas não todas as faces possuem cores, o padrão é cinza (R,G,B,A=.666).

Um formato `[ST][C][N][n]OFF BINARY` é aceito; veja Formato binario. Esse formato assemelha-se ao formato ASCII em quase tudo que você poderia esperar, com inteiros de 32-bit para todos os contadores e índices de vértice e números em ponto flutuante de 32-bit para posições de vértice (e coordenadas de textura ou cores de vértice ou retas normais se algum dos formatos `COFF`/`NOFF`/`CNOFF`/`STCNOFF`/etc. estiver presente).

Exceção: cada um dos índices de face do vértice são seguidos por um inteiro indicando quantas componentes de cor o acompanham. Componentes de cor de face devem ser números em ponto flutuante, não valores inteiros. Dessa forma uma face triangular pouco colorida pode ser representada como

         int int int int int
         3   17   5   9   0

enquanto a mesma face colorida com vermelho pode ser

         int int int int int float float float float
          3  17   5   9   4   1.0   0.0   0.0   1.0