#### 4.1.10 Aparências

Objetos geométricos podem ter informações de aparência associada, especificando tonalidade, brilho, cor, visualização wire-frame vs. shaded-surface, e assim por diante. Aparências são erdadas através de hierarquías de objetos, e.g. anexando uma aparência a uma lista (`LIST`) significa que a aparência é aplicada a todos os membros de `LIST`.

Algumas propriedades relacionada a aparência são relegadas a subestruturas tais como "material", "lighting" e "texture". Seja cuidadoso para notar quais propriedade pertencem a qual estrutura. Qualquer objeto geométrico pode ser precedido por uma definição de aparência como no sguinte exemplo:

         {
            appearance { +edge }
            LIST { < "arquivo1" } { QUAD 1 0 0  0 0 1  0 1 0  1 0 0 }
         }

Aparências são também objetos OOGL no seu próprio direito e pode ser fornecido nomes simbólicos e referência a elas. Veja (Referencias) e em Objetos de aparência.

Texture Mapping
  Existe uma seção separada com relação a definição de texturas: (Mapeamento de Textura).
Transparency
  Objetos de renderização translúcida não são suportados por todos os desenhadores que funcionam no Geomview. O renderizador OpenGL tem suporte limitado para isso: objetos de nível mais alto (i.e. aqueles que aparecem no navegador de objetos do painel principal (veja O Painel Principal) são renderizados corretamente por meio de alpha-blending). Também, os instantâneos do RenderMan irão incluir valores de opacidade.

Aqui está um exemplo de estrutura de aparência incluindo valores para todos atributos. A ordem dos atributos não é importante. Como usual, espaços em branco ssão irrelevates. Atributos Booleanos podem ser precedidos por "+" ou "-" para torná-los habilitados ou desabilitados; "+" é assumido se somente o nome do atributo aparecer. Outros valores esperados de atributo.

Um "*" prefixado a um atributo, e.g. "*+edge" ou "*linewidth 2" ou "material { *diffuse 1 1 .25 }", seleciona a situação atual para sobrescrever ("override") para aquele atributo.

         appearance {
           +face               # (Faz) desenho de faces dos polígonos.  Habili-
                               # tado por padrão.
           -edge               # (Não faz) desenho de arestas de polígonos.
           +vect               # (Faz) desenho de vetores (VECTs).  Habilitado
                               # por padrão.

           transparent screendoor
                               # (Habilita) transparência. Habilitação de
                               # transparência.
                               # não (necessariamente) resulta em cores corretas
                               # no Geomview, mas os valores de alfa são usados
                               # em instantâneos RenderMan.
                               # As palavras chave permitidas são ``screendoor''
                               # (mascarando pixels de saída por meio de um
                               # modelo de ponteamento), ``blending'' para
                               # alpha-blending ( harmonização de alfa)
                               # com BSP-tree (árvore BSP) particionando o
                               # espaço e ordenando com precisão
                               # (lento) e ``naive'' para harmonização de
                               # alfa sem mesmo ordenar com precisão, não
                               # para falar sobre particionamento de espaço.
                               # Omitindo a palavra chave o padrão será
                               # harmonização de alfa com árvore
                               # particionando o espaço e ordenando com
                               # precisão.
           -normal             # (Faz) desenho de vetores normais a uma
                               # superfície.

           normscale 1         # ... com comprimento 1.0 em coordenadas do
                               # objeto.

           +evert              # faz a inversão de normais de polígono onde
                               # necessário de forma que sempre tenha
                               # câmera naquela face

           +texturing          # (Habilita) mapeamento de textura
           +linear             # (Habilita) média linear de elementos de textura
                               # mais fechados

           +mipmap             # (Habilita) mapeamento mip de textura
           +mipinterp          # (Habilita) mapeamento mip linear

           -backcull           # (Não faz) descarte da orientação de faces
                               # no sentido anti-horário

           -concave            # (Não faz) presunção e manuseio de polí-
                               # gonos côncavos

           -shadelines	      # (Não faz) linhas de tonalidade como se elas esti-
                               # vessem iluminando cilindros
                               # Esses quatro (mipinterp, backcull, concave,
                               # shadelines) são somente efetivos onde o
                               # sistema gráfico suportá-los, a saber em GL e
                               # Open GL.

           -keepcolor	      # Normalmente, quando informação de cor N-D posi-
                               # cional está habilitada como
                               # com o comando do geomview (ND-color ...), todas
                               # as cores de objetos são afetadas.  Mas, objetos
                               # com o atributo "+keepcolor" são imunes a infor-
                               # mações de cor N-D.

           shading smooth      # ou ``shading constant'' ou ``shading flat'' ou
                               # ou ``shading csmooth'' ou ``shading vcflat''.
                               # smooth = tonalidade de Gouraud, flat = facetado,
                               # csmooth = linearmente interpolado mas não
                               # iluminado, vcflat = tonalidade monótona, mas
                               # cores linearmente interpoladas.

           linewidth 1         # linhas, pontos, e arestas são da largura de
                               # 1 pixel.

           patchdice 10 10     # subdivide retalhos de Bezier esmiuçadamente em
                               # u e v

           material {         # Aqui está uma definição material;
                               # pode também ser lido de um arquivo como em
                               #  ``material < arquivo.mat''

               ka  1.0         # coeficiente de reflexão ambiente.
               ambient .3 .5 .3 # cor do ambiente (em componentes de vermelho,
                               # verde, azul). A contribuição ambiente para a to-
                               # nalidade é o produto de ka, a cor do ambiente,
                               # pela cor da luz ambiente.

               kd  0.8         # coeficiente de reflexão difusa.
               diffuse .9 1 .4 # cor difusa.
                                 # (No modo ``shading constant'' (tonalidade
                                 # constante), a superfície
                                 # é colorida com a cor difusa.)

               ks 1.0          # coeficiente de reflexão especular.
               specular 1 1 1  # cor especular (destacada).
               shininess  25   # expoente especular; grandes valores fornecem
                               # destaques falsos.

               backdiffuse .7 .5 0 # cor da face de trás para superfícies com
                               # dois lados. Se definido, esse campo determina
                               # a cor difusa para o lado de trás de uma super-
                               # fície. É implementada através de tonalidade
                               # via software, e por tonalidade via hardware
                               # sob sistemas GL que suportam iluminação de
                               # dois lados, e sob Open GL.

               alpha   1.0     # opacidade; 0 = transparente (invisível),
                               # 1 = opaco. Ignorado quando a transparência
                               # estiver desabilitada.

               edgecolor   1 1 0  # cor de linha & aresta

               normalcolor 0 0 0  # cor para vetores normais a uma superfície
           }

           lighting {         # Modelo de iluminação

               ambient  .3 .3 .3  # luz ambiente

               replacelights   # ``Use somente as seguintes luzes para
                               # iluminar os objetos sob essa
                               # aparência.''
                               # Sem "replacelights" (substituição de luzes),
                               # quaisquer luzes listadas são adicionadas
                               # a esses na cena.

                               # Agora uma coleção exemplo de luzes:
               light {
                   color  1 .7 .6      # cor da luz
                   position  1 0 .5 0  # posição da luz [distant light]
                                       # fornecida em coordenadas homogêneas.
                                       # Com a quarta componente = 0,
                                       # isso significa uma luz vindo da
                                       # direção (1,0,.5).
               }

               light {                        # Outra luz.
                   color 1 1 1
                   position  0 0 .5 1  # luz na posição finita ...
                   location camera     # especificada em coordenadas de câmera.
                                       # (Uma vez que a câmera olha adiante -Z,
                                       # esse exemplo coloca a luz
                                       # .5 unidade atrás do olho.)
                   # Possível palavra chave de localização ("location"):
                   #  global   posição da luz global em coordenadas de objeto mundo
                   #             (bem, universo). Esse é o padrão se nenhuma
                   #             localização for especificada.
                   #  camera   posição da câmera em coordenadas do sistemade
                   #             câmera
                   #  local    posição local em coordenadas do sistema onde
                   #                   a aparência foi definida
               }
           }                   # fim do modelo de iluminação
           texture {
                 clamp st               # ou ``s'' ou ``t'' ou ``none''
                 file lump.tiff         # arquivo fornecendo imagem de mapa de
                                        # textura
                 alphafile mask.pgm.Z   # arquivo fornecendo imagem de máscara
                                        # de transparência
                 apply blend            # ou ``modulate'' ou ``decal''
                 transform  1 0 0 0     # superfície (s,t,0,1) * tfm -> coor-
                            0 1 0 0     # denadas de textura
                            0 0 1 0
                           .5 0 0 1

                 background 1 0 0 1     # relevante para ``apply blend''
           }
         }                     # fim de aparência

Existem regras para herança de atributos de aparência quando muitas aparência são impostas em diferentes níveis na hierarquía.

Por exemplo, Geomview instala uma aparência de parada de segurança que fornece valores padrão para a maioria dos parâmetros; seu painel de controle instala outras aparências que fornecem novos valores para uns poucos atributos; a geometria fornecida pelo usuário pode também conter aparências.

A regra geral é que a aparência dos filhos (aquelas fechadas para as primitivas geométricas) vencem. Adicionalmente, controles de aparência com situação atual em sobrescrever ("override") (e.g. `*+face ou material { *diffuse 1 1 0 }`) vencem sobre as outras que estiverem sem o atributo de sobrescrever.

Os controles de aparência do Geomview usam o recurso de sobrescrever "override" de forma a ser efetivo mesmo se objetos fornecidos pelo usuário contiverem suas próprias escolhas de aparência. Todavia, Se um objeto fornecido pelo usuário contiver um campo de aparência com o recurso de sobrescrever ativado, esse campo de aparência será imune aos controles do Geomview.