# X3D
## O Que é o X3D

X3D é um padrão aberto para distribuir conteúdo 3D. O X3D não é uma API de programação, nem tão pouco um formato de arquivo para troca de geometrias. Combina ambos, geometria e descrições de comportamentos instantâneos num simples arquivo que tem vários formatos de arquivos disponíveis para isso, incluindo o Extensible Markup Language(XML). O X3D surgiu de uma revisão da especificação ISO VRML97, e incorpora os avanços dos recursos disponíveis nos últimos dispositivos gráficos comerciais e também incorpora melhorias na sua arquitetura (X3D,2004). O núcleo da especificação do X3D está continuamente a ser desenvolvido pelo X3D Specification Working Group. O X3D possui diversos níveis de funcionalidades através das várias definições de perfis (profile). Um desses perfis é chamado de Interchange e é dirigido especificamente para ferramentas de criação de conteúdo digital (DCC) como AutoCAD, 3DSMax e Maya por trocar geometrias básicas sem nenhum modelo de execução.

### Como é a especificação do X3D estruturada?

Devido aos novos requisitos de suportar múltiplos formatos de arquivo e linguagem de programação, X3D é na verdade composto de 3 especificações ISO separadas::
1. 19775:200x Uma descrição abstrata de todas as partes funcionais do sistema. Faz referência a uma representação concreta. Isto descreve modelos estruturais e de execução em termos abstratos. Funcionalidades de linguagens de programação externas também são expressadas em termos abstratos como grupos de serviços que podem ser requisitados e providos em um mundo ideal.
2. 19776:200x Um conjunto de descrições de formatos de arquivos e como uma estrutura abstrata de uma especificação é codificada neste arquivos - ambos em formato texto ou binário. Dois formatos de texto são descritos: O clássico VRML (usando o sistema de chaves e colchetes do VRML97) e XML. Existe um trabalho em andamento para um formato binário, porém ele ainda não esta completo.
3. 19777:200x Um conjunto de mapeamentos para várias linguagens de programação para as capacidades de serviços abstratas. Logo que nem todas as linguagens de programação são iguais, esta especificação mapeia as estruturas individuais das linguagens de programação para serviços abstratos definidos pela especificação. Especificações para Java e ECMAScript estão definidas.

## VRML e o X3D?
### Quais as Diferenças?

Existem algumas diferenças entre os dois padrões. O X3D como surgiu do VRML, aproveita o trabalho desenvolvido no VRML e apresenta melhorias em relação ao mesmo. Começaram por alterar as premissas básicas que foram desenvolvidas para promover uma maior flexibilidade. As mudanças começaram pela especificação, que sofreu um completo ajuste e que se dividiu em três especificações separadas:( Conceitos Abstratos; Formato de codificação para arquivos; Acesso a linguagem de programação).
Outras modificações foram implementadas de modo a incluir a maior precisão com a iluminação e modelo de eventos e a troca de certos nomes de campos para criar uma maior consistência. As maiores e mais importantes foram: (Modelo de programação de aplicações revisto e unificado; Vários formatos de codificação, para descrever o mesmo modelo abstrato,incluindo o XML; Arquitetura modular que permite uma variedade de níveis a ser adaptado e suportado por diversos tipos de mercados; A estrutura da especificação expandida).
O X3D só tem uma interface de programação de aplicações([API]), o que difere do VRML que possui uma API de script interna mais uma API externa. O fato de o X3D só ter uma API resolve diversos problemas que existiam no VRML97, o que leva a que X3D tenha uma implementação mais robusta e confiável.
O X3D também suporta vários tipos de codificações de arquivos, incluindo o VRML , o XML e binario comprimido. A codificação XML permite uma integração com serviços Web e arquivos e transferência de dados entre plataformas inter-aplicações(cross-platform inter-application). O formato binário comprimido ainda está em desenvolvimento, e irá maior banda de transmissão de dados. Cada uma das codificações tem as suas vantagens para diferentes aplicações. E todas as codificações suportam todo o conjunto de características de X3D.
O X3D possui uma arquitetura modular para promover uma maior extensibilidade e flexibilidade. A maioria dos domínios de aplicações não necessitam de todos os recursos do X3D, e nem todas as plataformas suportam a totalidade das funcionalidades definidas na especificação. Os recursos do X3D são agrupados em componentes (components) que podem ser suportados pela implementação em uma mistura de capacidades para atingir as necessidades de um mercado ou plataforma em particular. O X3D também introduz o conceito de perfis (profiles) - um conjuto de componentes que normalmente são encontrados em certos domínios de aplicações , plataformas, ou um cenário de uso, por exemplo trocas de geometrias entre ferramentas de modelagem. Diferente do VRML97, onde é requerido um completo suporte das suas funcionalidades para que esteja em conformidade, o X3D permite vários niveis de suporte do padrão para atingir uma variedade de necessidades.

### É Possível Converter VRML em X3D?

Existem várias ferramentas disponíveis para efetuar a conversão de arquivos VRML para X3D. Se o arquivo não contiver scripts, o arquivo pode ser editado manualmente bastando apenas alterar o cabeçalho e inserir a nova declaração PROFILE.Caso o arquivo contenha scripts é necessário utilizar uma ferramenta de conversão, e ter atenção porque com a nova especificação algumas das áreas funcionais foram mudadas para serem mais rigorosas.

### Quais as diferenças funcionais entre o VRML e o X3D

Existem várias diferenças funcionais, como tal não é possível apresentar aqui todas as mudanças que ocorreram. Contudo vão ser apresentadas aqui algumas das mais importantes.
Os arquivos no X3D, são estruturados de forma a definir as capacidades que são necessárias como parte constituinte do cabeçalho. Para isso é necessário definir o perfil(profile) e um componente(component) extra.
Os Externprotos no X3D, definem conteúdo externo ao arquivo X3D. Não podem ser usados para criar mecanismos de extensão para o browser. A forma de criar extensões especificas no browser é através de componentes(component) adaptados.
Os nomes de acesso a campos foram alterados de eventIn, eventOut, field e exposedField, para inputOnly,outputOnly e inputOutput respectivamente.
Os scripts podem ter campos intputOutput(exposedFields) definidos.
Todo conteúdo de leitura é desacoplado. No VRML97 era necessario carregar os scripts antes de se começar a executar, no X3D não é necessario carregar os scripts antes de começar a executar porque, começa a executar o arquivo primeiro e passado um certo período de tempo, os recursos (scripts, texturas, sons, inlines, externprotos)começam a ser carregados.

## Componente e perfil
### O que é um componente (component)?

É a nova forma do X3D definir, extensibilidade e o conjunto de serviços que o conteúdo dos utilizadores necessitam.
Um componente (component) define um específico conjunto de nós. Tipicamente este conjunto de nós tem em comum um conjunto de funcionalidades - por exemplo as estruturas NURBS e as habilidades de texturização. Um componente (component) consiste na definição dos nós e um conjunto de níveis que cada vez mais reúna um maior conjunto de implementações. Um nível simples requer apenas poucos nós e talvez uma seleção de campos a serem suportados, enquanto que níveis maiores requerem todos os níveis mais simples, e nós mais complexos. Por exemplo, o nível 1 de NURBS requer apenas linhas e curvas 2D básicas, enquanto que o nível 4 requer, costura, junção e superfícies de revolução.

### O que é um Perfil (Profile)?

Um perfil (profile) é uma coleção de componentes para um determinado nível de suporte. Um perfil (profile) pode não conter outro perfil, porém necessita de todos os mesmos componentes (components) e níveis como o outro perfil (profile), e ainda mais. Todos os arquivos X3D requerem a definição do perfil (profile) que está a ser utilizado, na qual pode ser suprida com a requisição de componentes adicionais pelo utilizador - ou por níveis maiores que aqueles providos pelo perfil (profile) ou que ainda não foram definidos no perfil (profile).