VRML2.0. Tutorial. Marcos Carrard
|
|
|
- Elias Bastos Macedo
- 10 Há anos
- Visualizações:
Transcrição
1 UNIJUÍ Universidade Regional do Noroeste do Estado do Rio Grande do Sul DeTec Departamento de Tecnologia Bacharelado em Informática Tutorial VRML2.0 Marcos Carrard Ijuí (RS), 2000/2001
2 Apresentação Este texto apresenta um apostila ou tutorial para o uso da linguagem VRML Virtual Reality Modeling Language. Conforme será visto, está é uma linguagem de uso muito frequente e amplo quando da descrição de mundos e ambientes para realidade virtual através de uma rede de computadores de velocidade relativamente baixa, como a internet. Não é o objetivo deste material se caracterizar como tendo um conteúdo novo e inédito. Pelo contrário, como o próprio nome diz, ele é uma apostila ou tutorial e, portanto, o seu conteúdo foi retirado de algumas publicações e páginas na internet, especialmente o livro do autor Andrea Ames, David Nadeau e John Moreland ([ANM96). Esta é uma publicação bastante completa e recomendada a todos que desejam conhecer profundamente o VRML. Esta apostila traz o seu conteúdo e uma boa parte dos seus exemplos na sequência, forma e conteúdo apresentados por este livro. Qualquer dúvida, correção, sugestão ou acréscimo de conteúdo para este material é muito bem vinda e pode ser enviada através do endereço [email protected] ou através da página 2
3 Sumário Apresentação Sumário 1 Aspectos Iniciais 1.1 Introdução 1.2 Sistema de Coordenadas 1.3 Arquivo VRML 1.4 Descrevendo Figuras 1.5 Eventos e Rotas 2 Construção das Figuras 2.1 Nodo Shape 2.2 Nodo Appearance 2.3 Nodo Material 2.4 Primitivos Geométricos 2.5 Agrupando Figuras 3 Inserindo Texto 3.1 Introdução 3.2 Nodo Text 3.3 Nodo FontStyle 4 Transformando Figuras 4.1 Introdução 4.2 Nodo Transform 4.3 Translação Vetores em 3D Transformação de translação 4.4 Rotação 4.5 Escala 5 Animando o Posicionamento, Orientação e Escala das Figuras 5.1 Introdução 5.2 Processo de Animação 5.3 Nodo TimeSensor 5.4 Nodo PositionInterpolator 5.5 Nodo OrientationInterpolator 3
4 5.6 Exemplos 6 Interagindo com os Objetos 6.1 Introdução 6.2 Nodo TouchSensor 6.3 Nodo PlaneSensor 6.4 Nodo SphereSensor 6.5 Nodo CylinderSensor 6.6 Exemplos 7 Controlando a Aparência das Figuras 7.1 Introdução Agrupando Nodos 8.1 Introdução Incluindo Arquivos 9.1 Introdução Construindo com Pontos, Linhas e Faces 10.1 Introdução Grids de Elevação 11.1 Introdução Figuras de Extrusão 12.1 Introdução Construção de Cores 13.1 Introdução Mapeamento de Textura 14.1 Introdução Luz e Sombra 15.1 Introdução Adicionando Fundo e Fumaça 16.1 Introdução Adicionando Som 17.1 Introdução Controle de Detalhes 18.1 Introdução Definindo Pontos de Vista 19.1 Introdução
5 20 Adicionando Âncoras e Informações ao Mundo Virtual 20.1 Introdução Criando Scripts 21.1 Introdução Criando Novos Tipos de Dados 22.1 Introdução 22.2 Anexo I Tabela de Cores do Modelo RGB Bibliografia 5
6 1 Aspectos Iniciais 1.1 Introdução VRML é a abreviação para Virtual Reality Modeling Language ou Linguagem para Modelagem em Realidade Virtual. Seu objetivo é a descrição de objetos e mundos tridimensionais interativos através da World Wide Web na internet. Esta linguagem é indente de plataforma e permite a criação de ambiente virtuais por onde se pode passear, visualizar objetos e interagir com eles. VRML foi apresentada pela primeira vez em 1994 durante a conferência sobre WWW com o propósito de atingir os objetivos acima sem necessitar de uma rede de alta velocidades para dar suporte as atividades. Nesta ocasião ela foi apresentada como um subconjunto de um formato de arquivos ASCII do software Open Inventor da Silicon Graphics. Esta versão, conhecida como VRML 1.0, trabalha principalmente com a geometria 3D dos objetos que são elaborados em polígonos e primitivos como cones, esferas, cilindros e esferas. Ela suporta ainda algumas transformações com estes objetos e permite o ajuste da complexidade dos objetos dependendo da distância do observador do ambiente. A versão atual da linguagem, denominada de Moving Worlds VRML 2.0 agrega todas as definições existentes na versão anterior e amplia as possibilidades de representação e interação neste mundo e com outros mundos virtuais. Nelas os objetos podem mover-se e reagir a eventos originários do usuário ou de alguma outra forma de controle. Além disto, esta versão permite o uso de objetos multimídia nos ambientes, assim é possível integrar sons e filmes nas cenas. Conforme [Kir97 as características do VRML 2.0 podem ser agrupadas em quatro áreas principais: melhoria dos mundos estáticos, interação, animação e comportamento baseado em scripts, além da prototipação de novos objetos. A linguagem VRML não é reconhecido de forma padronizada pelos navegadores da HTML como o Netscape e o Internet Explorer. Desta forma, é necessário configurar o navegador para que ele compreenda o conteúdo do arquivo que está recebendo. Para isto é 6
7 necessário um navegador VRML que deverá, tipicamente, ser adicionado ao navegador HTML na forma de plug-in. Plug-in nada mais são do que programas que trabalham de forma associada ao navegador HTML para que este entenda arquivos de tipos diferenciados. Sugere-se que antes de continuar na leitura deste tutorial, o leitor adquira um navegador VRML (estão disponíveis na internet de forma gratuita) para poder avaliar os exemplos propostos. Todos eles forma escritos e testados utilizando o software Cosmo Player 2.1 e o navegador HTML Nestcape Sistema de Coordenadas A linguagem VRML utiliza o sistema de coordenadas cartesiano para a representação espacial, ou seja, um sistema baseado em 3 eixos de deslocamento vetorial. Veja a figura 1.1 para a descrição desta representação. Figura 1.1 Sistema de coordenadas cartesiano Ainda sobre esta questão, existem duas convenções que são relevantes na definição do mundo virtual e na sua possibilidade de conexão com outros mundos. A primeira delas é que é adotado a regra da mão direita para definição dos eixos do sistema e seu sentido de crescimento. Nesta regra, toma-se a mão direita e aponta-se os dedos polegar, indicador e médio de forma que fiquem com 90 graus entre si, aproximadamente (veja a figura 1.2). Nesta disposição, o dedo polegar representa o eixo X, o indicador o eixo Y e o dedo médio, o eixo Z, crescendo no sentido que os dedos apontam. Além disso, a definição original do mundo virtual, utilizada em casos default, coloca o observador da cena no sentido do eixo +Z. Figura1.2 Regradamãodireita. 7
8 A segunda convenção adotada, não pela linguagem mas pelos seus usuários, é o uso da unidade de medidas metros para o sistema de coordenadas. A razão desta convenção é permitir facilmente a integração de mundos virtuais escritos por usuários diferentes sem que ocorram problemas de proporção nas figuras. 1.3 Arquivo VRML Os mundos virtuais são descritos através de um arquivo texto com extensão.wrl que pode ser criado com qualquer editor de programas fontes. É importante notar que não pode ser utilizado um editor de textos comum, como o Word, e sim um editor de programas fontes, como o Notepad do Windows. Nesta seção vamos discutir alguns aspectos básicos e introdutórios a respeito do conteúdo destes arquivos. Para tanto será utilizado o arquivo do exemplo 1.1. #VRML V2.0 utf8 # Primeiro exemplo Group{ children[ # Desenha o cilindro da base Shape{ appearance DEF Azul Appearance{ material Material{ diffusecolor geometry Cylinder{ height 2.0 radius 2.0, # Desenha o cone da cobertura Transform{ translation children Shape{ appearance USE Azul geometry Cone{ height 2.0 bottomradius 2.5 Exemplo 1.1: Primeiro arquivo VRML 8
9 a) Cabeçalho VRML é: onde: O cabeçalho está presente em todos os arquivos VRML e é obrigatório. Seu formato #VRML V2.0 utf8 VRML ÿ indica que o arquivo que segue é a descrição de um ambiente virtual; V2.0 ÿ identifica a versão ou especificação 2.0 da linguagem VRML; utf8 ÿ identifica um arquivo que utiliza o conjunto de caracteres UTF-8; Para a descrição de um arquivo fonte utilizando a versão 1.0 da linguagem VRML, também há um cabeçalho, com o mesmo sentido na composição das suas partes, mas descrito diferentemente: #VRML V1.0 ascii b) Comentários Após o cabeçalho do arquivo VRML, toda e qualquer sequência de caracteres que iniciar ou contiver o caracter #, é tratada como comentário e é ignorada pelo navegador. Por exemplo: # Desenha o cilindro da base c) Nodos O arquivo VRML é formado por nodos (nodes) que descrevem as figuras contidas nele e as suas propriedade no mundo virtual. O nodo é a estrutura sintática básica de composição deste tipo de arquivo e, tipicamente, contém: - o tipo de nodo (obrigatório); - um par de chaves (obrigatório); - um conjunto de campos e seus atributos (opcional); Exemplo: Cylinder { height 2.0 radius 2.0 Neste exemplo, Cylinder é o tipo do nodo e height e radius dois campos com seus valores que especificam a altura e diâmetro do cilindro a ser desenhado. 9
10 d) Tipo de valores Existe um conjunto pré-definido de tipos de dados ou valores que são aceitos como atributo dos campos de um nodo. É importante ressaltar que a não presença de um destes campos no nodo implica no uso de um valor default, mas sempre dentro das especificações da linguagem. A tabela a seguir apresenta os tipos de dados possíveis na linguagem VRML. Nesta tabela os tipos obedecem a um padronização de nomenclatura, iniciando-se sempre com SF ou MF: - SF: Single value types indica um único valor para o tipo a ser utilizado no dado; - MF: Multiple value types indica o uso de múltiplos valores para o dado deste tipo; Tipo de Valor SFBool SFColor MFColor SFFloat MFFloat SFImage SFInt32 MFInt32 SFNode MFNode SFRotation MFRotation SFString MFString SFTime SFVec2f MFVec2f SFVec3f MFVec3f Descrição Descreve um valor booleano: verdadeiro (TRUE) ou falso (FALSE) Grupo de três valores reais descrevendo as componente vermelho (red), verde (green) e azul (blue) do modelo de cores RGB Descreve valores reais ou de ponto flutuante. Uma lista de valores descrevendo as cores de uma imagem digital Valores inteiros de 32 bits Identifica um dado do tipo node VRML (nodo) Descreve um grupo de quatro valores reais onde os três primeiros identificam um eixo o sistema de representação e o último um ângulo medido em radianos. Estes valores definem uma transformação geométrica de rotação. Descreve uma lista de caracteres, que devem estar obrigatoriamente entre aspas, caracterizando uma string. Descreve um valor real para a medida absoluta de tempo, em segundos, contados a partir da 00:00hs do dia 01/01/1970. Dois valores reais descrevendo um ponto ou vetor bidimensional no plano cartesiano. Três valores reais descrevendo um ponto ou vetor tridimensional no espaço cartesiano. 10
11 Os tipos de dados descritos acima irão aparecer na descrição formal dos campos dos nodos que a linguagem VRML comporta a serem vistos mais tarde. Por exemplo, a descrição formal do campo height do nodo Cylinder é: height 2.0 # SFFloat Esta descrição indica que o campo height tem um calor default de 2.0 e este dado é do tipo SFFloat, portanto, admitindo somente valores reais na sua descrição. e) Nomes de nodos Todos os nodos no ambiente virtual podem ser nominados. Os nomes podem ser compostas de qualquer sequência de letras, números e underscore. Os nomes compostos diferenciam letras maiúsculas e minúsculas (case sensitives) e não podem iniciar com um número. A definição de um nome para um nodo VRML tem a função de identificá-lo para novo uso posterior. Para fazer este uso, o nodo deve ser definido previamente com a seguinte definição: DEF nome_do_nodo tipo_do_nodo {... Exemplo: DEF Meu_Cilindro Cylinder{ height 2.0 radius 2.0 Após a definição do nodo ele pode ser utilizado sempre que se fizer necessário. Para esta utilização, o nome definido ao nodo deve aparecer precedido pela palavra chave USE: Exemplo: geometry USE Meu_Cilindro USE nome_do_nodo 1.4 Descrevendo Figuras A construção do ambiente virtual é realizada com figuras (shapes) descritas pelos nodos e por seus atributos. Desta maneira, a figura VRML tem uma forma ou geometria (geometry) que define a sua estrutura tridimensional. Além disto, esta figura tem sua aparência baseada no material com o qual é feita (material) e na textura da sua superfície (texture). Assim, geometry e appearance são os campos do nodo Shape: 11
12 Exemplo: Shape { Appearance DEF Azul Appearance { material Material { diffusecolor geometry Cylinder { height 2.0 radius 2.0 # Campo da aparência # da figura # Definição da sua # forma 3D A linguagem VRML suporta vários tipos de primitivos geométricos para as figuras de forma pré-definida, como caixas, cilindros, cones e esferas. Além disto existem várias figuras geométricas avançadas como figuras de extrusão e grids de elevação. Com base nestes tipos, a linguagem VRML permite que as figuras sejam agrupadas e reagrupadas sempre que necessário para formar figuras mais complexas. O agrupamento das figuras se dá através do nodo Group. O nodo que agrupa outras figuras e nodos é chamado de pai (parent) e as figuras que fazem parte de um grupo são chamadas de filhos (children). Neste contexto, nãohá limite para o número de filhos existentes em um grupo. 1.5 Eventos e Rotas A linguagem VRML permite a criação de mundos dinâmicos. Para fazer isto, os arquivos VRML devem prever instruções para a construção do mundo. Estas instruções descrevem como conectar nodos para atuação conjunta ou condicionada. Por exemplo, abrir uma porta quando o mouse clica em um certo objeto ou acender uma lâmpada nas mesmas condições. Estes eventos são mecanismos de troca de mensagens entre os objetos e envolvem: - um par de nodos para atuar conjuntamente; - uma rota de comunicação entre os dois nodos envolvidos; Uma vez a rota tendo sido definida entre os dois nodos, o primeiro deles pode enviar mensagens ao segundo. Esta mensagens, chamada de event (evento) contém valores que forçarão o nodo receptor a reagir. Existe inclusive a possibilidade de agrupar vários nodos criando um circuito de comunicação. Cada tipo de nodo apresenta acionadores (jacks) de entrada e saída com os quais as mensagens atuam. Por exemplo, o nodo que cria uma luz (lâmpada) tem um acionador de entrada que pode ligá-la ou desligá-la (on/off). Acionando-o, através do envio de uma mensagem, é possível ligar e desligar esta luz a distância. 12
13 É importante salientar que nodos podem ter vários acionadores para interação entre nodos do circuito. Por outro lado, estes acionadores são de entrada (input) e saída (output). Os acionadores de entrada são chamados de eventin e ou acionadores de saída são chamados de eventout. Também é importante notar que estes acionadores tem um tipo de dado definido para receber ou enviar através dele. Neste contexto, o circuito necessita descrever uma rota (route) de um acionador eventout de um dado nodo para um acionador eventin de outro nodo. O circuito permanecerá inativo até que um evento seja enviado entre os nodos. A reação do segundo nodo depende: - do tipo de nodo que está recebendo o evento; - do acionador de entrada que foi ativado; - do valor contido no evento; - da atividade do nodo no momento do recebimento da mensagem; 13
14 2 Construção das Figuras 2.1 Nodo Shape O nodo Shape é utilizado na linguagem VRML para descrever as figuras presentes no ambiente virtual através da sua estrutura tridimensional, definido sua forma geométrica e sua aparência neste mundo. Sua sintaxe é: Shape { appearance NULL # SFNode geometry NULL # SFNode O valor do campo geometry define a forma tridimensional do objeto. Normalmente ele define uma das primitivas geométrica: Box, Cone, Cylinder ou Sphere. O valor default do campo, indicado como nulo, caracteriza a ausência de forma para um objeto. O valor do campo geometry pode ser alterado através de um evento enviado ao campo eventin set_geometry. A respostas, após a alteração da forma do objeto, se dará através do campo eventout geometry_changed. O campo appearance define a aparência do objeto descrito naquele nodo. Este campo tipicamente inclui o nodo Appearance que, quando nulo, define um objeto com aparência esbranquiçada. O valor do campo appearance pode ser mudado com um evento para o campo evenin set_appearance e a resposta da mudança da aparência do objeto será enviada através do campo eventout appearance_changed. 2.2 Nodo Appearance Conforme mencionado, este nodo tem a função de descrever a aparência do objeto a ele associado. Sua sintaxe é: 14
15 Appearance { material NULL # SFNode texture NULL # SFNode texturetransform NULL # SFNode O campo material define os atributos de aparência do material que compõem a figura. O valor NULL define um material sem aparência. A este campo sempre está associado um outro nodo VRML que traz as propriedades do material. O campo texture define uma textura a ser aplicada sobre o objeto e texturetransform indica as transformações que esta textura sofrerá durante o processo de mapeamento. Veja o capítulo 14 para maiores informações. 2.3 Nodo Material Este nodo indica as propriedades da simulação física do material que comporá o objeto em questão. Sua sintaxe é: Material { ambienteintensity 0.2 # SFFloat diffusecolor # SFColor emissivecolor # SFColor shininess 0.2 # SFFloat specularcolor # SFColor transparency 0.0 # SFFLoat A função de cada um destes campos será descrita detalhadamente no capítulo 7 deste material. Em linhas gerais são: - ambienteintensity: intensidade de luz ambiente; - diffusecolor: cor difusa do objeto (cor aparente do mesmo); - emissivecolor: cor emitida pelo objeto; - shininess: coeficiente de brilho daquele objeto; - specularcolor: coeficiente de reflexão especular da luz para o objeto; - transparency: índice de transparência do objeto. 2.4 Primitivos Geométricos A linguagem VRML traz alguns primitivos geométricos pré-definidos que são utilizados para a composição das figuras presentes nos mundos virtuais. Estes primitivos são: caixa, cone, cilindro e esfera. É importante notar que estes primitivos são, por definição da linguagem, sempre ocos, ou seja, a parte interna dos mesmos é vazia. 15
16 a) Nodo Box Este primitivo define uma caixa (prisma regular de quatro lados) e sua sintaxe é: Box { size # SFVec3f O campo size define o tamanho da caixa a ser criada no sentido de cada um dos eixos do sistema. O primeiro valor define o tamanho no sentido do eixo X, o segundo do eixo Y e o terceiro, do eixo Z. Esta caixa será sempre criada de forma centralizada na origem do sistema de coordenadas, ou seja, no ponto (0,0,0). O exemplo 2.1 apresenta o código necessário para a criação de uma caixa com os valores default, ou seja, quadrada com 2m de lado. O exemplo 2.2, por sua vez, apresenta umacaixacom1mnosentidodoeixox,3mnosentidodoeixoye5mnosentidodoeixo Z. #VRML V2.0 utf8 Shape{ appearance Appearance{ material Material { geometry Box{ Exemplo 2.1: Criação de uma caixa default. #VRML V2.0 utf8 Shape{ appearance Appearance{ material Material { geometry Box{ size Exemplo 2.2: Definição de uma caixa de 1x3x5 metros. b) Nodo Cone Este nodo define uma figura geométrica com a forma de um cone. Sua sintaxe é: 16
17 Cone { bottomradius 1.0 # SFFloat height 2.0 # SFFloat side TRUE # SFBool bottom TRUE # SFBool O cone a ser criado no mundo virtual estará com a sua base centrada na origem do sistema, no ponto (0,0,0), e seu ápice será projetado no sentido positivo do eixo Y. Os campos presentes no nodo tem a seguinte função: - bottomradius: define o raio da base do cone. Seu valor deve ser sempre maior do zero; - height: define a altura do cone no sentido positivo do eixo Y. Também deve ter valor maior do que zero; - side: campo booleano, verdadeiro ou falso, que define se o lado do cone (paredes alterais) serão ou não desenhadas no mundo virtual; - bottom: tem natureza idêntica ao campo side, masdefineseabasedo cone será apresentada ou não no mundo virtual. O exemplo 2.3 apresenta a criação de um cone com os valores default e o exemplo 2.4 um cone com 3.5m de raio na base e 1.5m de altura. #VRML V2.0 utf8 Shape{ appearance Appearance{ material Material { geometry Cone { Exemplo 2.3: Um cone com os valores default. #VRML V2.0 utf8 Shape{ appearance Appearance{ material Material { geometry Cone { bottomradius 3.5 height 1.5 Exemplo 2.4: Um cone com 3.5m de base e 1.5m de altura. 17
18 c) Nodo Cylinder Este primitivo define um cilindro no mundo virtual e sua sintaxe é: Cylinder { radius 1.0 # SFFloat height 2.0 # SFFloat side TRUE # SFBool top TRUE # SFBool bottom TRUE # SFBool O cilindro a ser criado estará localizado ao longo do eixo Y do sistema. Seu raio é a distância entre este eixo e a borda do cilindro e sua altura é centralizada na origem, ou seja, um cilindro de 2m de altura terá 1m acima do eixo X e 1m abaixo deste mesmo eixo. Os campos presentes e sua função são: - radius: define o raio do cilindro. Deve ter um valor maior do que zero; - height: define a altura do cilindro no sentido do eixo Y e seu valor também deve ser maior do que zero; - side, top e bottom: são campos booleanos que definem se os lados, topo e base do cilindro, respectivamente, serão ou não apresentados no mundo virtual durante o desenho do primitivo. Os exemplos 2.5 e 2.6 apresentam dois cilindros. O primeiro deles é criado com os valores default para os campos e o segundo com 4m de raio e 1m de altura. Já o exemplo 2.7 mostra um cilindro onde somente será desenhado o lado do mesmo, ficando a base e o topo sem serem vistos. #VRML V2.0 utf8 Shape{ appearance Appearance{ material Material { geometry Cylinder { Exemplo 2.5: Um cilindro com valores default. 18
19 #VRML V2.0 utf8 Shape{ appearance Appearance{ material Material { geometry Cylinder { radius 4.0 height 1.0 Exemplo 2.6: Define um cilindro de 1m de altura e 4m de raio. #VRML V2.0 utf8 Shape{ appearance Appearance{ material Material { geometry Cylinder { radius 4.0 height 1.0 top FALSE bottom FALSE side TRUE Exemplo 2.7: Apresenta um cilindro sem a base e o topo (cano). d) Nodo Sphere Este primitivo define uma figura geométrica com a forma de uma esfera. Sua sintaxe é: Sphere { radius 1.0 # SFFloat Esta esfera tem um raio definido pelo campo radius e seu valor devem sempre ser maior do que zero. A esfera será, assim como as demais figuras, criada centrada no ponto (0,0,0), ou seja, na origem do sistema. Os exemplo 2.8 e 2.9 apresentam duas esferas. A primeira criada com o valor default do raio (1m) e a segunda com 3.5m de raio. 19
20 #VRML V2.0 utf8 Shape{ appearance Appearance{ material Material { geometry Sphere { Exemplo 2.8: Uma esfera de 1m de raio. #VRML V2.0 utf8 Shape{ appearance Appearance{ material Material { geometry Sphere { radius 3.5 Exemplo 2.9: Apresenta uma esfera de 3.5m de raio. 2.5 Agrupando Figuras As figuras criadas no mundo virtual podem ser agrupadas para formar novos e mais complexos nodos que, por sua vez, podem vir a ser agrupados para criar novas figuras. Para esta função a linguagem VRML define um nodo denominado de Group. Sua sintaxe é: Group { # MFNode bboxcenter # SFVec3f bboxsize # SFVec3f addchildren # eventin MFNode removechildren # eventout MFNode O valor do campo children especifica a lista de nodos filhos que serão incluídos neste grupo. Seus componentes são nodos Shape ou outros nodos Group. Os campos bboxcenter e bboxsize especificam o centro e o tamanho (no sentido de cada eixo) de uma caixa suficientemente grande para envolver todo o grupo. Os valores default listados acima indicam que o navegados VRML deve calcular automaticamente esta caixa, se necessário. Veja o capítulo XX para mais informações. 20
21 Os campos addchildren e removechildren são para tratar os eventos de adição e remoção de um filho ou nodo do grupo em questão. O exemplo 2.10 apresenta um agrupamento de três figuras geométricas do tipo box, apresentando o sentido de deslocamento dos eixos do sistema de coordenadas. O exemplo 2.11 mostra o agrupamento de vários tipos de figuras com o intuito de espelhar como podem ser compostos objetos mais complexos a partir de figuras mais simples. #VRML V2.0 utf8 Group{ children[ Shape{ appearance DEF Branco Appearance{ material Material { geometry Box{ size , Shape{ appearance USE Branco geometry Box{ size , Shape{ appearance USE Branco geometry Box{ size Exemplo 2.10: Exemplo do agrupamento de três caixas. 21
22 #VRML V2.0 utf8 Group{ children[ Shape{ appearance DEF Branco Appearance{ material Material { geometry Box{ size , Shape{ appearance USE Branco geometry Sphere{ radius 7.0, Shape{ appearance USE Branco geometry Cylinder{ radius 12.5 height 0.5, Shape{ appearance USE Branco geometry Cylinder{ radius 4.0 height 20.0, Shape{ appearance USE Branco geometry Cylinder{ radius 3.0 height 30.0, Shape{ appearance USE Branco geometry Cylinder{ radius 1.0 height 60.0 Exemplo 2.11: Exemplo do agrupamento de várias figuras geométricas. 22
23 3 Inserindo Texto 3.1 Introdução A apresentação de textos em VRML é especificada em dois nodos. O primeiro deles é destinado à apresentação geométrica do texto (nodo Text) e o segundo destinado às propriedades deste texto (nodo FontStyle). O nodo Text permite o controle do texto a ser impresso, seu tamanho em linhas ou colunas e o tamanho de cada uma delas, além do tipo de fonte a ser utilizado. O nodo FontStyle faz o controle da aparência do texto a ser apresentado, definindo a família de fontes, o estilo, tamanho, espaçamento e justificação, entre outras características. A linguagem VRML faz uso do conjunto de caracteres utf8 e, portanto, somente aqueles caracteres presentes neste padrão serão possíveis de serem utilizados no nodo Text. Este padrão é definido na especificação ISSO : Nodo Text O nodo Text, conforme mencionado, define a geometria do texto e pode ser utilizado como valor para o campo geometry do nodo Shape. Sua sintaxe é: Text { string [ # MFString length [ # MFFloat maxextent 0.0 # SFFloat fontstyle NULL # SFNode O valor do campo string especifica uma ou mais linhas de texto a serem apresentadas no mundo virtual. Cada uma das linhas deve ser expressa com o uso de aspas duplas. Os vários textos presentes neste campo devem ser separados por vírgulas. O valor deste campo pode ser modificado através do campo eventin set_string. Quando este evento é recebido o campo string é modificado para o novo valor e uma mensagem é enviada pelo 23
24 campo eventout string_changed. O texto criado será localizado sobre o plano XY do sistema de coordenadas (Z=0) e será descrito no sentido crescente do eixo X, ou seja, se olharmos de algum ponto positivo sob o eixo Z, o texto iniciar-se-á na origem e será escrito para a sua direito, como em qualquer outro local. O campo length especifica o comprimento desejado para cada linha do texto, segundo a medida padrão do sistema VRML. Uma vez especificada uma medida, as linhas são comprimidas ou expandidas, através da mudança do tamanho do caracter ou do espaçamento, para atingirem o tamanho desejado. O valor default de 0.0 especifica que o texto deve ser apresentado de maneira natural, sem preocupação com compressão ou expansão. Este campo admite vários valores, sendo que cada um deles tem validade para uma das linhas do texto, na ordem que aparecerem, ou seja, o primeiro valor para a primeira linha, o segundo valor para a segunda linhas, e assim por diante. Se o número de valores presentes for inferior ao número de linhas, aquelas que excederem este número (as últimas) serão apresentadas como se o seu comprimento default. Finalmente, o valor deste campo pode ser alterado através de um campo eventin set_length e, o resultado, retorna através do campo evnetout length_changed. O campo maxextent define o comprimento máximo possível admissível ao texto, para qualquer linha ou coluna. As linhas que atingirem um comprimento maior do que o especificado neste campo são comprimidas até que atinjam o limite. Este tamanho é medido horizontalmente para textos horizontais e verticalmente para textos verticais. A este campo está associado outro campo eventin chamado de set_maxextent que redefine o comprimento máximo. A resposta a este evento é dada no campo eventout maxextent_changed. O campo fontstyle define as características que serão utilizadas para apresentar o texto presente no nodo, ou seja, para definir a sua aparência. Normalmente este campo tem como valor um nodo FontStyle a ser visto a seguir. Na ausência deste campo, o valor default de NULL, instrui o navegador a apresentar um texto no sentido esquerda para a direita no caso de texto horizontal e de cima para baixo no caso de texto vertical, justificado pela esquerda e utilizando o tipo de fonte serif. Este campo pode ser alterado através do campo eventin set_fontsytle e a resposta se dará pelo campo eventout fontstyle_changed. Observe o exemplo 3.1 para a criação de um texto simples, utilizando os valores default dos campos, exceto a string. #VRML V2.0 utf8 Shape { appearance Appearance { material Material { geometry Text { string "Programando em VRML" Exemplo 3.1: Descrevendo um texto simples. 24
25 É possível também a criação de múltiplos campos textos que serão distribuídos em linhas no ambiente virtual. Veja isto no exemplo 3.2. #VRML V2.0 utf8 Shape { appearance Appearance { material Material { geometry Text { string [ "Programando", "em VRML" Exemplo 3.2: Distribuindo o texto em linhas. No exemplo 3.3 o texto mostrado no primeiro exemplo é comprimido para que tenha comprimento igual a 5 unidades. Caso tenhamos um texto disposto em linhas, isto pode ser feito com a determinação de vários valores para o campo length. Vejaistono exemplo 3.4. #VRML V2.0 utf8 Shape { appearance Appearance { material Material { geometry Text { string "Programando em VRML" length 5.0 Exemplo 3.3: Definindo o comprimento do texto. #VRML V2.0 utf8 Shape { appearance Appearance { material Material { geometry Text { string [ "Programando", "em VRML" length [ 4.0, 3.0 Exemplo 3.4: Definindo o comprimento de cada linha do texto. Finalmente, no exemplo 3.5, é caracterizada a opção de determinar o comprimento máximo admissível ao texto. Neste exemplo, qualquer valor para o campo length que for maior do que aquele explicitado para o comprimento máximo será ignorado. 25
26 #VRML V2.0 utf8 Shape { appearance Appearance { material Material { geometry Text { string "Programando em VRML" maxextent 5.0 Exemplo 3.5: Definindo o comprimento máximo de um texto. 3.3 Nodo FontStyle O nodo FontStyle controla a aparência de um texto criado pelo nodo Text. O nodo FontStyle pode ser utilizado como valor para o campo fontstyle deste último citado. Sua sintaxe é: FontStyle { family SERIF # SFString style PLAIN # SFString size 1.0 # SFFloat spacing 1.0 # SFFloat justify BEGIN # SFString horizontal TRUE # SFBool lefttoright TRUE # SFBool toptobottom TRUE # SFBool language # SFString O campo family especifica a família de fontes que a linguagem VRML irá adotar para apresentar aquele texto. O valor default para o campo é a família serif e todas estão listadas na seguinte tabela: Nome da Família SERIF SANS TYPEWRITER Descrição Fonte de tamanho variável, semelhante ao tipo Times Roman Fonte de tamanho variável, semelhante ao tipo Helvetica Fonte de tamanho fixo, semelhante ao tipo Courier O campo style define qual será o estilo de apresentação do texto proposto. O seu valor é um dos presentes na seguinte tabela, sendo o estilo plain o default: 26
27 Nome do Estilo PLAIN BOLD ITALIC BOLDITALIC Descrição Texto normal, sem estilo especial Texto apresentado em negrito Texto apresentado em itálico Texto apresentado em negrito e itálico ao mesmo tempo O campo size especifica a altura dos caracteres com valor medido em unidades do sistema de coordenadas utilizado no ambiente VRML. A altura default dos caracteres é de 1 unidade (metro). O valor do campo spacing determina o espaçamento vertical entre as linhas que compõem o texto em um texto horizontal. No case de um texto vertical, ele determina o espaçamento entre as colunas do texto. O campo horizontal especifica se o texto será apresentado no sentido horizontal (TRUE) ou vertical (FALSE). Todo o texto tem uma direção principal e uma direção secundária. A direção principal, para um texto horizontal, é ao longo do eixo X, e a secundária, ao longo do eixo Y. Para um texto vertical, a direção principal é ao longo do eixo Y e a secundária, ao longo do eixo X. Os campos lefttoright e toptobottom são utilizados em conjunto com o campo horizontal para controlar a disposição horizontal ou vertical do texto. Para um texto horizontal, o campo lefttoright especifica como os caracteres consecutivos serão dispostos ao longo da direção principal, da esquerda para a direita (TRUE), no sentido positivo do eixo X, ou da direita para a esquerda (FALSE), no sentido negativo do eixo X. Ainda no caso de textos horizontais, o campo toptobottom especifica como as linhas de texto serão dispostas, se de cima para baixo (TRUE),no sentido negativo do eixo Y, ou de baixo para cima, no sentido positivo do eixo Y. Quando o texto for vertical, o uso dos campos lefttoright e toptobottom é análogo, mas opera invertendo as direções principal e secundária do texto. O campo toptobottom determina se os caracteres serão dispostos de cima para baixo (TRUE) ou de baixo para cima (FALSE). Já o campo lefttoright determina a disposição das colunas do texto, se elas serão colocadas da esquerda para a direita (TRUE) ou da direita para a esquerda (FALSE). O campo justify especifica como o bloco de texto será disposto em relação aos eixos X e Y do sistema de coordenadas. Este campo pode receber dois valores de justificação, sendo o primeiro deles considerado como principal e o segundo como secundário. O valor principal controla a disposição do texto ao longo da direção principal do texto e o secundário faz o mesmo em relação a direção secundária do texto. Os valores possíveis para este campo vem da seguinte tabela e o seu efeito depende dos campos lefttoright e toptobottom: 27
28 Nome da Justificação FIRST BEGIN MIDDLE END Valor do campo lefttoright TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE Descrição Colocaoladoesquerdodoblocodetextono eixo Y Coloca o lado direito do bloco de texto no eixo Y Colocaoladoesquerdodoblocodetextono eixo Y Coloca o lado direito do bloco de texto no eixo Y ColocaomeiodoblocodetextonoeixoY Coloca o meio do bloco de texto no eixo Y Coloca o lado direito do bloco de texto no eixo Y Coloca o lado esquerdo do bloco de texto no eixo Y Nome da Justificação FIRST BEGIN MIDDLE END Valor do campo toptobottom TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE Descrição ColocaotopodotextonoeixoX Coloca a base do texto no eixo X ColocaotopodotextonoeixoX Coloca a base do texto no eixo X Coloca o meio do texto no eixo X Coloca o meio do texto no eixo X Coloca o lado direito do bloco de texto no eixo X Coloca o lado esquerdo do bloco de texto no eixo X O campo language especifica o contexto de linguagem a ser utilizado para apresentação do bloco de texto. Os valores válidos para este campo são baseados no local de apresentação do texto e respeitam padrões internacionais. Os valores válidos vem da seguinte tabela: 28
29 Valor do campo Descrição Linguagem Território ar Arábico de Alemão Alemanha de_de Alemão Suíça de_ch Alemão en Inglês en_us Inglês Estados Unidos en_gb Inglês Inglaterra hi Hindú jp Japonês ru Russo sa Sanscrito sw Swahili zh Chinês zh_tw Chinês Taiwan zh_cn Chinês China O exemplo 3.6 apresenta a disposição de um texto controlando a família dos caracteres e o estilo de apresentação. Já o exemplo 3.7 controla o tamanho dos caracteres a serem apresentados segundo aquele estilo de fonte. O exemplo 3.8 mostra como pode ser realizado o controle do espaçamento entre as linhas de um texto e o exemplo 3.9, apresenta um texto composto de duas partes a serem apresentadas com estilos de fonte diferentes. #VRML V2.0 utf8 Shape { appearance Appearance { material Material { geometry Text { string "Programando em VRML" fontstyle FontStyle { family "SERIF" style "BOLD" Exemplo 3.6: Controlando a família e estilo do texto. O exemplo 3.10 dispõem um texto utilizando o campo de justificativa e o exemplo 3.11 apresenta como é possível definir e utilizar posteriormente um estilo de fonte. 29
30 #VRML V2.0 utf8 Shape { appearance Appearance { material Material { geometry Text { string "Programando em VRML" fontstyle FontStyle { size 0.5 Exemplo 3.7: Controlando a altura dos caracteres do texto. #VRML V2.0 utf8 Shape { appearance Appearance { material Material { geometry Text { string [ "Programando", "em VRML" fontstyle FontStyle { spacing 0.5 Exemplo 3.8: Controlando o espaçamento entre linhas de um texto. 30
31 #VRML V2.0 utf8 Group { Shape { appearance DEF Branco Appearance { material Material { geometry Text { string "Programando" fontstyle FontStyle { family "SERIF" style "ITALIC" justify "END" size 1.0, Shape { appearance USE Branco geometry Text { string "em VRML" fontstyle FontStyle { family "SANS" style "BOLD" justify "BEGIN" size 1.0 Exemplo 3.9: Apresentando um texto com várias estilos de fonte. 31
32 #VRML V2.0 utf8 Group { Shape { appearance DEF Branco Appearance { material Material { geometry Text { string [ "Acima", "Abaixo" fontstyle FontStyle { justify "MIDDLE", Shape { appearance USE Branco geometry Box { size Exemplo 3.10: Controlando a justificação do texto. 32
33 #VRML V2.0 utf8 Group { Shape { appearance DEF Branco Appearance { material Material { geometry Text { string [ "Programando", "em VRML" fontstyle DEF Meu_Estilo FontStyle { size 3.0 family "TYPEWRITER" justify "MIDDLE", Shape { appearance USE Branco geometry Text { string [ " ", " " fontstyle USE Meu_Estilo Exemplo 3.11: Definindo e reutilizando estilos de fonte. 33
34 4 Transformando Figuras 4.1 Introdução Como pode ser observado nas seções anteriores esta, os figuras primitivas básicas e os textos são criados em locais pré-definidos do sistema de coordenadas. Por exemplo, uma esfera é criada, originalmente, centrada na origem do sistema, no ponto (0,0,0). Por outro lado, na quase totalidade dos casos, a necessidade de localização destas figuras geométricas não está situada nestes pontos pré-definidos. Neste caso, apresenta-se a necessidade de levar a figura para a posição desejada, ou seja, de fazermos uma translação. O mesmo raciocínio pode ser feito para o tamanho e para a orientação da figura. Quando acontece a mesma situação, na qual a geometria não nos satisfaz, pode ser aplicada uma transformação de escala ou uma rotação para resolver o problema. 4.2 Nodo Transform Em qualquer um dos casos citados acima, quando se faz necessário alterar geometricamente a figura a ser colocada no ambiente tridimensional, deve ser aplicado a ela um nodo Transform: Transform { # MFNode translation # SFVec3f rotation # SFRotation scale # SFVec3f scaleorientation # SFRotation bboxcenter # SFVec3f bboxsize # SFVec3f center # SFVec3f addchildren # EventIn MFNode removechildren # EventIn MFNode 34
35 Neste nodo, o campo children defini as figuras que sofrerão as transformações a serem definidas. Os valores admissíveis para este campo são componentes dos nodos Shape e Group. Os campos translation, rotation e scale definem as transformações de translação, rotação e escala, respectivamente. O campo scaleorientation também está envolvido com o processo de escala, assim como o campo center participa do processo de rotação. Os campos bboccenter e bboxsize definem a localização e o tamanho de um caixa suficientemente grande para envolver toda a figura transformada. Os valores default listados no nodo indicam que esta caixa deverá ser calculada automaticamente pelo navegador se for necessário. A necessidade e aplicação desta caixa será discutida mais adiante. Finalmente, os campos eventin addchildren e removechildren acrescentam um novo nodo para a lista de figuras a serem transformadas e removem um nodo previamente existente nesta lista. Estes campos também serão trabalhados oportunamente. 4.3 Translação Vetores em 3D A realização de uma operação de translação é baseada na definição de um vetor tridimensional. Considerando dois pontos no espaço, um vetor é um segmento de reta orientado que tem origem em um destes pontos e destino no outro. Em especial, vamos considerar aqueles vetores que tem origem no ponto (0,0,0), ou seja, na origem do sistema de coordenadas. Todo o vetor é definido por três componentes: direção, sentido e comprimento. A noção de direção é idêntica aquela dada para uma reta, ou seja, é o ângulo pelo qual esta reta corta os eixos do sistema. Como o vetor é um segmento de reta, ele possuí uma dada direção. A componente sentido informa, dados os dois pontos que definem este segmento, qual será a origem e qual será o destino do vetor. Finalmente, a componente direção estabelece a distância existente entre estes dois ponto. Note que a definição de um vetor é independente da localização deste vetor. Na verdade existe um número infinito de vetores que possuem a mesma direção, sentido e comprimento e, portanto, são iguais. Em especial perceba que o vetor que tem origem no ponto (0,0,0) é idêntico aos demais Operação de Translação Transladar um objeto, em qualquer circunstância significa modificar a sua posição no espaço, trocando-o de local. Se fizermos uma analogia com o mundo real, sempre que trocamos algum objeto de local, ou seja, fizemos uma translação, implicitamente definimos 35
36 esta operação como tendo uma direção, um sentido de deslocamento e uma distância. Como estes elementos são exatamente aqueles que definem geometricamente um vetor, este elemento tem papel fundamental na definição desta operação. Retornando ao nodo Transform, o campo translation é o que caracteriza a existência de uma translação a ser aplicada ao conjunto de objetos listados no campo children e também como são os parâmetros desta operação. Note que ele é sucedido por três valores reais (um campo do tipo SFVec3f) onde deve ser colocado o vetor de translação. A definição deste vetor pode ser realizada tomando-se como origem do mesmo o ponto (0,0,0) e o destino como um ponto qualquer (Px, Py, Pz). São justamente os valores deste ponto que devem ser listados como valores do campo translation. Por exemplo, se os valores listados forem (-3.0,2.0,2.5), a figura será translada na direção, sentido e comprimento deste vetor, ou seja, 3.0 unidades no sentido negativo do eixo X, 2.0 unidades no sentido positivo do eixo Y e 2.5 unidades no sentido positivo do eixo Z. #VRML V2.0 utf8 Transform { translation Shape { appearance Appearance { material Material { geometry Cylinder { Exemplo 4.1: Deslocando um cilindro no sentido positivo de X. Quando deseja-se fazer um deslocamento preservando um ou mais eixos do sistema, basta colocar o valor zero (0.0) no seu respectivo campo. Por exemplo, o vetor (2.0, 0.0, 0.0) faz com que a figura a ser translada não altere as suas coordenadas em Y e Z, apenas deslocando o valor da coordenada X e duas unidades. #VRML V2.0 utf8 Transform { translation Shape { appearance Appearance { material Material { geometry Cylinder { Exemplo 4.2: Deslocando o cilindro em X. 36
37 Os exemplos 4.1 e 4.2 fazem com que a figura de um cilindro seja transladada duas unidades na direção do eixo X. O primeiro exemplo o faz no sentido de X positivo e o segundo, em X negativo. O exemplo 4.3 desloca a mesma figura duas unidades em Y positivo e o exemplo 4.4 faz isto em Z positivo. #VRML V2.0 utf8 Transform { translation Shape { appearance Appearance { material Material { geometry Cylinder { Exemplo 4.3: Transladando no sentido de Y positivo. #VRML V2.0 utf8 Transform { translation Shape { appearance Appearance { material Material { geometry Cylinder { Exemplo 4.4: Transladando em +Z. Existe ainda a possibilidade de estabelecermos deslocamentos em múltiplos eixos. É o que acontece no exemplo 4.5 onde a figura é deslocada 2 unidades em X positivo, 1 em Y positivo e 2 em Z negativo. #VRML V2.0 utf8 Transform { translation Shape { appearance Appearance { material Material { geometry Cylinder { Exemplo 4.5: Transladando em múltiplas direções combinadas. 37
38 #VRML V2.0 utf8 Group { # Chao Shape { appearance DEF Branco Appearance { material Material { geometry Box { size , # Coluna da esquerda Transform { translation children Shape { appearance USE Branco geometry Cylinder { radius 0.3 height 6.0, # Coluna da direita Transform { translation children Shape { appearance USE Branco geometry Cylinder { radius 0.3 height 6.0, # Cobertura Transform { translation children Shape { appearance USE Branco geometry Box { size Exemplo 4.6: Deslocamentos múltiplos de várias figuras. 38
39 Uma vez compreendido o processo de múltiplas translações, é possível compor figuras mais complexas através de vários deslocamentos realizados em figuras diferentes. O exemplo 4.6 define duas colunas (cilindros), desloca-as para os lados esquerdo e direito do observador e para cima (+Y), criando a base para uma espécie de pórtico. Feito isto, o exemplo cria uma caixa que será utilizada na cobertura do pórtico e a coloca na parte de cima das colunas. No exemplo 4.7 é criada a mesma figura do exemplo 4.6 e feita uma segunda cópia da mesma que, por sua vez, é deslocada duas unidades no sentido negativo do eixo Z. #VRML V2.0 utf8 Group { # Chao Shape { appearance DEF Branco Appearance { material Material { geometry Box { size , # Coluna da esquerda DEF ColunaE Transform { translation children Shape { appearance USE Branco geometry Cylinder { radius 0.3 height 6.0, # Coluna da direita DEF ColunaD Transform { translation children Shape { appearance USE Branco geometry Cylinder { radius 0.3 height 6.0, # Cobertura DEF Cobertura Transform { translation
40 , children Shape { appearance USE Branco geometry Box { size # Segundo objeto Transform { translation USE ColunaE USE ColunaD USE Cobertura Exemplo 4.7: Faz uma cópia da figura do exemplo anterior e coloca-a em outra posição. 4.4 Rotação A operação de rotação é definida no campo rotation do nodo Transform. Este campo estabelece quatro valores reais. Os três primeiros deles representam um eixo imaginário no sistema de coordenadas em torno do qual a figura irá girar. O quarto e último parâmetro representa o ângulo de rotação. A definição de um eixo dentro do sistema de coordenadas no qual acontecerá a rotação é necessária em razão desta operação acontecer sempre em volta de algum segmento. A definição deste eixo segue os mesmos princípios dos vetores utilizados na translação. Aqui, entretanto, o comprimento do vetor não é considerado e sim a sua direção e sentido de crescimento. A rotação irá acontecer em torno deste eixo por um ângulo medido sempre em radianos 1 e é orientada também pela regra da mão direita. Considere que, com a mão direita envolvemos o eixo de rotação, com o polegar apontando no sentido positivo de crescimento do mesmo. Se este ângulo for positivo, a figura irá girar no sentido em que apontam os demais dedos da mão. Se o ângulo for negativo, acontece o contrário. Existe ainda a possibilidade de especificarmos um centro de rotação para a figura através do campo center do nodo Transform. Por definição, o centro de rotação das figuras é a origem do sistema de coordenadas, ou seja, o ponto (0,0,0). Com o uso deste campo você especifica um outro sistema de coordenadas (outro ponto de referência) que servirá de base para a rotação. Isto é necessário quando possuímos figuras articuladas como a junção de braços e pernas, onde o movimento força o giro em torno de um outro ponto que não a origem do sistema. 1 Radianos = ( Graus * )/180 40
41 Os exemplos 4.8, 4.9, 4.10 e 4.11 fazem com que uma caixa seja rotacionada em 0,785 radianos (45 º graus) em torno dos eixos +X, +X, +Y e +Z, respectivamente. No segundo exemplo o ângulo de rotação é negativo e a figura girará no sentido contrário ao do exemplo 4.8. #VRML V2.0 utf8 Transform { rotation Shape { appearance Appearance { material Material { geometry Box { Exemplo 4.8: Girar um caixa por 45 graus em torno do eixo X. #VRML V2.0 utf8 Transform { rotation Shape { appearance Appearance { material Material { geometry Box { Exemplo 4.9: Girar um caixa por 45 graus em torno do eixo X. #VRML V2.0 utf8 Transform { rotation Shape { appearance Appearance { material Material { geometry Box { Exemplo 4.10: Girar a mesma caixa em torno do eixo Y. 41
42 #VRML V2.0 utf8 Transform { rotation Shape { appearance Appearance { material Material { geometry Box { Exemplo 4.11: A caixa irá girar em torno do eixo Z. #VRML V2.0 utf8 Group { DEF Coluna Shape { appearance Appearance { material Material { geometry Cylinder { height 1.0 radius 0.1, Transform { rotation children USE Coluna, Transform { rotation children USE Coluna Exemplo 4.12: Girando vários objetos. Os exemplo 4.12 e 4.13 criam uma figura mais complexa que é formada por primitivos simples (cilindros) rotacionados convenientemente. O exemplo 4.14 toma o pórtico construído no exemplo 4.6 e coloca uma cobertura no mesmo girando duas caixas que formarão o telhado. 42
43 #VRML V2.0 utf8 Group { DEF Coluna1 Shape { appearance Appearance { material Material { geometry Cylinder { height 1.0 radius 0.1, DEF Coluna2 Transform { rotation children USE Coluna1, DEF Coluna3 Transform { rotation children USE Coluna1, Transform { rotation USE Coluna2, USE Coluna3 Exemplo 4.13: Agregando mais objetos ao exemplo #VRML V2.0 utf8 Group { # Chao Shape { appearance DEF Branco Appearance { material Material { geometry Box { size , # Coluna da Esquerda DEF ColunaE Transform { 43
44 , translation children DEF Coluna Shape { appearance USE Branco geometry Cylinder { radius 0.3 height 6.0 # Coluna da Direita DEF ColunaD Transform { translation children USE Coluna, # Cobertura DEF Cobertura Transform { translation children Shape { appearance USE Branco geometry Box { size , # Telhado DEF TelhadoE Transform { translation rotation children DEF Telha Shape { appearance USE Branco geometry Box { size , DEF TelhadoD Transform { translation rotation children USE Telha Exemplo 4.14: Colocando telhado no pórtico do exemplo 4.6. O exemplo 4.15 constrói um abajur estilizado. Note que para formar a articulação de junção das duas partes do braço do abajur é necessário estabelecer um centro de rotação diferente da origem. Neste caso o ponto escolhido é (0.0, 0.15, 0.0). 44
45 #VRML V2.0 utf8 Group { # Base da lampada Shape { appearance DEF Branco Appearance { material Material { geometry Cylinder { radius 0.1 height 0.01, # Braco da lampada Transform { translation rotation center DEF Braco Shape { appearance USE Branco geometry Cylinder { radius 0.01 height 0.3, Transform { translation rotation center children USE Braco Exemplo 4.15: Desenho de um abajur. 4.5 Escala A operação de escala faz com que as dimensões de uma figura sejam ampliadas ou reduzidas conforme a necessidade. Ela é realizada através do campo scale do nodo Transform. Este campo é representado por três valores reais que especificam os fatores de escala para cada um dos eixos do sistema de coordenadas. O primeiro deles nos diz o 45
46 quanto desejamos aumentar ou diminuir a figura no sentido do eixo X; o segundo, em Y; e, o terceiro em Z. Os fatores de escala são valores maiores do que zero (0) necessariamente. Se eles estão no intervalo 0 ; 1 [, acontece uma redução proporcional ao valor. Por exemplo, o valor de 0.5 reduz a figura a metade do seu tamanho original naquele eixo. Se os valores forem maiores do que 1, ocorre uma ampliação desta figura. O valor de 1 para a escala não acarreta em modificações da figura. Se os fatores de escala forem iguais, esta operação acontece de forma uniforme, ou seja, preservando as proporções originais da figura. O mesmo não acontece se estes valores forem diferentes. Em algumas situações não é suficiente ou desejável aplicar a escala tendo como referência os eixos X, Y e Z do sistema de coordenadas. Para estes casos é previsto um outro campo do nodo Transform chamado de scalaorientation, que descreve um novo sistema de coordenadas para aplicação da escala através da rotação do sistema original. Os seus parâmetros são os mesmos e tem a mesma função daqueles utilizados na operação de rotação. Ainda é possível especificar um novo centro de referência para a operação de escala através do campo center. Assim como na rotação, este campo especifica um ponto que é a origem deste novo centro. Observando a aplicação da transformação de escala, nos exemplos 4.16, 4.17, 4.18, 4.19 e 4.20, é apresentada a transformação de uma esfera em um processo de escala não uniforme, ou seja, o resultado final é topologicamente equivalente a uma esfera, mas a sua forma não é idêntica. #VRML V2.0 utf8 Transform { scale Shape { appearance Appearance { material Material { geometry Sphere { Exemplo 4.16: Transformação em escala de uma esfera. 46
47 #VRML V2.0 utf8 Transform { scale Shape { appearance Appearance { material Material { geometry Sphere { Exemplo 4.17: Outra transformação da esfera. #VRML V2.0 utf8 Transform { scale Shape { appearance Appearance { material Material { geometry Sphere { Exemplo 4.18: A esfera ampliada diferenciadamente nos eixos do sistema. #VRML V2.0 utf8 Transform { scale Shape { appearance Appearance { material Material { geometry Sphere { Exemplo 4.19: A esfera reduzia a metade no eixo Z. 47
48 #VRML V2.0 utf8 Transform { scale Shape { appearance Appearance { material Material { geometry Sphere { Exemplo 4.20: A esfera reduzida no eixo Y e ampliada nos demais. #VRML V2.0 utf8 Group { DEF Corpo Transform { scale children Shape { appearance DEF Branco Appearance { material Material { geometry Cylinder { radius 1.0 height 0.025, DEF Fuselagem Transform { scale children Shape { appearance USE Branco geometry Sphere {, Transform { scale USE Corpo USE Fuselagem Exemplo 4.21: Desenho de um avião. 48
49 O exemplo 4.21 desenha um avião estilizado utilizando-se apenas da deformação de figuras básicas como esferas e cilindros. O exemplo 4.22 faz cópias do pórtico utilizado no exemplo 4.14 e reduz estas cópias a metade do tamanho original. Note que os fatores de escala deste exemplo são iguais, portanto a escala é uniforme e o resultado é uma figura com as mesmas proporções da original #VRML V2.0 utf8 Group { # Chao Shape { appearance DEF Branco Appearance { material Material { geometry Box { size , DEF Casa Group { # Coluna da Esquerda DEF ColunaE Transform { translation children DEF Coluna Shape { appearance USE Branco geometry Cylinder { radius 0.3 height 6.0, # Coluna da Direita DEF ColunaD Transform { translation children USE Coluna, # Cobertura DEF Cobertura Transform { translation children Shape { appearance USE Branco geometry Box { size , 49
50 , # Telhado DEF TelhadoE Transform { translation rotation children DEF Telha Shape { appearance USE Branco geometry Box { size , DEF TelhadoD Transform { translation rotation children USE Telha # Faz copias de tamanho diferente Transform { translation scale children USE Casa, Transform { translation scale children USE Casa Exemplo 4.22: Criando duas cópias do pórtico do exemplo A figura do exemplo 4.23 é transformada tendo como base um novo centro de referência no ponto (0,-1,0), o que faz com que a árvore da figura aumente seu tamanho tendo como base o ponto dado e não a origem do sistema. Por último, o exemplo 4.24 apresenta uma transformação de escala definida como uma orientação diferente do usual, o que faz com que a árvore incline para o lado indicado pelo novo eixo de orientação. 50
51 #VRML V2.0 utf8 Group { Shape { appearance DEF Branco Appearance { material Material { geometry Box { size , Transform { translation scale center Shape { appearance USE Branco geometry Cylinder { radius 0.5 height 2.0, Transform { translation children Shape { appearance USE Branco geometry Cone { bottomradius 2.0 height 4.0 Exemplo 4.23: Definição de um novo centro de referência para a escala. 51
52 #VRML V2.0 utf8 Group { Shape { appearance DEF Branco Appearance { material Material { geometry Box { size , Transform { translation scale scaleorientation center Shape { appearance USE Branco geometry Cylinder { radius 0.5 height 2.0, Transform { translation children Shape { appearance USE Branco geometry Cone { bottomradius 2.0 height 4.0 Exemplo 4.24: Definição de um novo eixo de orientação para a escala. 52
53 5 Animando o Posicionamento, Orientação e Escala das Figuras 5.1 Introdução Para adicionar movimento ao mundo virtual, uma das alternativas é animar o posicionamento, orientação e escala de uma cena. Se o sistema de coordenadas desta cena se move, todas as figuras construídas nela também se moverão. Neste contexto, entende-se como animação qualquer modificação da figura que ocorre em um determinado intervalo de tempo. Os dois elementos básicos deste processo são um relógio que controla a animação no tempo e a descrição do que irá e como irá mudar neste intervalo de tempo. A linguagem VRML fornece o nodo TimeSensor para criar o relógio e os nodos PositionInterpolator e OrientationInterpolator para controlar as modificações. Estes últimos tem a função de definir a orientação ou posição correta da figura a partir das informações de tempo obtidas do relógio. O nodo TimeSensor age como um relógio real, contabilizando o tempo a partir do momento da sua inicialização. Sempre que estiver ativo, o tempo corrente é disponibilizado pelo seu campo eventout time. Para fazermos o controle da animação, estes eventos de saída (tempo) devem ser roteados para os nodos que controlam as modificações. Quando trabalha nestas condições, o resultado do nodo TimeSensor é uma unidade de tempo absoluto, medido em segundos, desde a 00:00 hora do dia 1 º de janeiro de Nesta situação, o segundo 0 (zero) aconteceu nesta data, o segundo 1 logo a seguir e assim por diante. Através disto, é possível programar o nodo TimeSensor para agir em datas e horas específicas. Isto acontece quando o tempo específico de início e fim da atuação do nodo é informado aos campos starttime e stoptime. Apesar de fornecer um bom mecanismo de controle, a medida do tempo de forma absoluta nem sempre é conveniente ao trabalho. Muitas vezes, senão a maioria delas, necessita-se apenas animar uma figura num certo intervalo de tempo que independe da data e da hora exata. Este tempo é conhecido como tempo fracional. Nele a animação começa no 53
54 tempo 0 (zero) e termina o tempo 1 (um), podendo ser fracionada neste intervalo como for necessário. Como isto, na maioria das vezes, não o suficiente, é possível ainda colocar este tempo em um loop e repetí-lo tanto quanto seja necessário. 5.2 Processo de Animação Conforme mencionado, o resultado do cômputo do tempo é utilizado nos nodos de interpolação para calcular o valor exato da translação ou rotação a ser informado ao nodo Transform. Este tem a responsabilidade de apresentar a figura, como visto anteriormente. Neste processo, uma descrição da animação deve fornecer a posição ou orientação para cada nova unidade de tempo fracional pertencente ao intervalo listado. De forma mais simples podemos dizer que esta descrição funciona como uma tabela, havendo uma entrada de descrição para cada entrada de tempo existente. Os valores de posicionamento ou orientação calculados para estes tempos são chamados de valores de chave (key values). O interpolador VRML utiliza estes valores de chave e os de tempo para construir um modelo ou rascunho da animação e preenche os valores entre aqueles especificados por conta própria, se necessário. Por exemplo, caso se deseje fazer com que um carro vá da esquerda para a direita, pode-se mencionar apenas os valores 0.0 e 1.0 como tempos fracionais, pois se tratando de uma reta, o interpolador não terá dificuldades em encontrar os valores intermediários necessários. Nesta situação, o tempo fracionário 0.5 terá seus valores calculados pelo interpolador e corresponderá ao meio do caminho. Por outro lado, se desejamos fazer com que o carro faça um curva, será necessário fornecer mais valores no intervalo para que o mesmo descreva esta curva de forma suave. Assim sendo, os nodos PositionInterpolator e OrientationInterpolator utilizam os valores listados de tempo fracional e valores de chave para descrever a animação. Os tempos fracionais são descritos no campo key e os valores chave no campo keyvalue. Ambos os campos podem ter qualquer quantidade de valores, mas sempre na correspondência de um para um. Para finalizar, o interpolador VRML utiliza-se sempre de uma interpolação linear entre dois valores de chave listados, ou seja, o caminho encontrado entre os dois será sempre uma reta. Todos os pontos calculados neste intervalo farão parte deste segmento. Desta forma, para descrever um caminho curvo, vários pontos de interpolação deverão ser descritos, em quantidade tanta quanto for a precisão desejada. Durante a aplicação, quando é necessário fazer uma interpolação de posicionamento, o interpolador calcula os respectivos valores para as coordenadas X, Y e Z dos pontos necessário ao processo. Já para realizar uma animação de rotação, além do eixos de rotação X, Y e Z, é necessário interpolar também o ângulo de rotação. 54
55 O valor computado pelo nodo PositionInterpolator é do tipo SFVec3f e é projetado para ser utilizado como entrada de valores de translações ou coordenadas tridimensionais. O nodo Transform, por exemplo, utiliza um valor deste como definição do campo translation e, por tanto, o interpolador de posições pode controlá-lo. De forma analógica, podemos fazer a mesma relação para o interpolador de orientação, pois o seu resultado é no mesmo formato necessário ao campo rotation. Seguindo esta linha de raciocínio, todo o campo que necessite de um valor SFVec3f como entrada é candidato a ser animado através do interpolador de posicionamento. O mesmo para a orientação. Em especial, este procedimento pode ser adotado para o campo scale do nodo Transform que controla a escala aplicada a um objeto e tem um campo no formato SFVec3f. Através do PositionInterpolator podemos então animar fatores de escala para um dado objeto. 5.3 Nodo TimeSensor O nodo TimeSensor, mencionado nas seções anteriores é o responsável pelo controle do relógio que gera os eventos para a animação. Sua sintaxe é: TimeSensor { enable TRUE # SFBool starttime 0.0 # SFTime stoptime 0.0 # SFTime cycleinterval 1.0 # SFTime loop FALSE # SFBool isactive # eventout SFBool time # eventout SFTime cycletime # eventout SFTime fraction_changed # eventout SFFloat O valor do campo enable especifica se o relógio está ativado ou não. Se o seu valor é TRUE, o relógio está ligado e o restante dos campos do nodo são utilizados para controlar este funcionamento. Se o seu valor é FALSE, o relógio está desligado e nenhuma saída é produzida em intervalos de tempo. Os campos starttime e stoptime especificam os tempos nos quais o relógio deve ser ligado ou desligado, respectivamente. O campo cycleinterval especifica a quantidade de tempo no qual o interpolador deverá levar para ir do tempo fracionário 0.0 para o tempo 1.0. Por exemplo, podemos especificar apenas os dois extremos do intervalo para animar uma figura, mas desejamos ir do primeiro para o último em 30 segundos ou em 10 segundos. Este último será o valor do campo cycleinterval. 55
56 O campo loop especifica se o relógio irá entrar em laço ou não. Quando o seu valor é TRUE o fracionar ao chegar no final do intervalo (1.0) retornar ao valor 0.0 e reinicia o processo. Quando o valor do campo é FALSE, não acontece este retorno. Os campos starttime, stoptime, cycleinterval e loop podem trabalhar de forma conjunta para controlar o resultado de saída do relógio. Uma vez ativado, o relógio permanece em aguardo até que o starttime seja alcançado. Neste momento, o sensor é ativado e inicia a gerar eventos. Se o campo loop é FALSE, então o sensor gera eventos até que o tempo stoptime seja atingido ou um ciclo completo seja completado em starttime + cycleinterval, o que acontecer primeiro. Se o campo loop étrue, entãoo sensor gera eventos continuamente até que o tempo final seja atingido, se acontecer. Com isto podem ser criados loops infinitos. A tabela a seguir apresenta as possíveis combinações entre estes campos e seus efeitos: Valor do Relacionamento entre os Efeito campo loop campos de tempo TRUE stoptime <= starttime Não termina a execução. TRUE starttime < stoptime Executa até atingir o tempo stoptime FALSE stoptime <= starttime e Executa um ciclo e para no cycleinterval tempo starttime+cycleinterval FALSE starttime < (starttime+ Executa um ciclo e para no cycleinterval) <= stoptime tempo starttime+cycleinterval FALSE starttime < stoptime < Executa pelo menos um ciclo e (starttime+cycleinterval) para no tempo stoptime O campo isactive é eventout e retorna um dado booleano TRUE quando o sensor é ativado e inicia a geração de eventos. Um sinal FALSE é enviado por este campo quando o sensor pára a geração de eventos e se torna inativo. O campo time também é eventout e através dele é possível obter o valor do tempo absoluto enquanto o sensor estiver gerando eventos. O campo eventout cycletime informa o valor do tempo absoluto cada vez que o ciclo de tempo é reiniciado. Se o campo loop é FALSE, então a saída do valor é informado apenas na início do primeiro e único ciclo. Finalmente, o campo eventout fraction_chaged informa um valor de tempo fracional, entre 0.0 e 1.0, que é como o sensor progride pelo ciclo. Se o campo loop é FALSE, os valores são informados apenas durante um único ciclo. Caso contrário, os valores são informados repetidamente, a cada novo ciclo. O valor do campo enable pode ser modificado através de um evento roteado para o campo eventin set_enable. A informação enviado no evento é do tipo booleano e ativa (TRUE) ou desativa (FALSE) o relógio. O resultado da operação é informado através de um campo eventout enable_changed. 56
57 De forma semelhante, o valor do campo loop pode ser modificado através de um evento roteado para o campo eventin set_loop. Este evento é igualmente booleano e ativa (TRUE) ou desativa (FALSE) a entrada do relógio em laço. O resultado da operação é informado através do campo eventout loop_changed. Os valores dos campos starttime, stoptime e cycleinterval podem ser modificados por eventos para os campos eventin set_starttime, set_stoptime e set_cycleinterval, respectivamente. Quando a operação é finalizada, o resultado é informado através dos campos eventout startime_changed, stoptime_changed e cycleinterval_changed, respectivamente. Estas operações somente terão efeito se o relógio estiver desativado. Caso contrário, o novo valor informado é ignorado. O nodo TimeSensor não cria nenhuma figura no mundo virtual e não há nenhum efeito visível de sua presença. Ele pode ser utilizado como filho de qualquer grupo de nodos, mas é totalmente independente do sistema de coordenadas utilizado. 5.4 Nodo PositionInterpolator O nodo PositionInterpolator descreve uma série de posições chave disponíveis para o uso no processo de animação. Sua sintaxe é: PositionInterpolator { key [ # MFFloat keyvalue [ # MFVec3f set_fraction # eventin SFFloat value_changed # eventout SFVec3f O campo key especifica uma lista de valores chave, fracionais, tipicamente entre 0.0 e 1.0, tais como aqueles produzidos na saída o nodo TimeSensor. Estes valores podem ser positivos ou negativos, de qualquer tamanho, e devem ser expressos em ordem crescente. O campo keyvalue também é composto de uma lista de valores, cada um deles contendo uma valor para cada coordenada do sistema (X, Y e Z). Os valores desta lista e da primeira, do campo key, são utilizados em conjunto tal que o primeiro valor da primeira lista especifica o tempo para o primeiro valor da segunda lista, de posições. Estas listas, conjuntamente são capazes de especificar qualquer número de tempo e posições, mas ambas devem conter a mesma quantidade de valores. Quando o nodo PositionInterpolator recebe um tempo fracional através do campo set_fraction, ele calcula a nova posição baseada na lista de posições chaves e seus tempos fracionais correspondentes. O resultado é informado através do campo value_changed. Tipicamente os tempos fracionais são informados ao campo set_fraction através de um evento roteado do campo eventout fraction_changed do nodo TimeSensor. Estes tempos 57
58 fracionais também podem ser gerados por outros meios caso venha a ser necessário, mas sempre dentro dos formatos especificados. O nodo PositionInterpolator também não cria nenhuma figura e não tem efeito visível. Ele pode ser incluído como um filho de qualquer grupo, mas é independente do sistema de coordenadas utilizado. 5.5 Nodo OrientationInterpolator O nodo OrientationInterpolator trabalha de forma assemelhada ao nodo de interpolação de posições, mas ele descreve uma série de valores chave de rotações que estão disponíveis para uma animação. Sua sintaxe é: OrientationInterpolator { key [ # MFFloat keyvalue [ # MFRotation set_fraction # eventin SFFloat value_changed # eventout SFRotation Essencialmente, os campos e a função de cada um deles é a mesma que descrita para o nodo PositionInterpolator. A única diferença de maior monta é quanto ao conteúdo do campo keyvalue que agora tem cada uma das entradas composta de quatro valores onde os três primeiros descrevem um eixo de rotação e o quarto o ângulo, da mesma forma que na transformação de rotação. 5.6 Exemplos Para melhorar a compreensão do processo de animação, vamos comentar alguns exemplos. O exemplo 5.1 faz com que uma caixa fique pulando ou saltitando pela tela do navegador. Neste exemplo, o relógio atual em laço infinito e cada interação deste laço tem a duração de 4 segundos, conforme o campo cycleinterval. No campo key do interpolador são estabelecidos os intervalos do tempo fracionário correspondentes as posições estabelecidas no campo keyvalue. Conforme foi mencionado, as demais posições são interpoladas linearmente pelo interpolador. Ao final do exemplo existem duas linhas que definem as rotas nas quais os eventos irão circular. A primeira linha utiliza a saída de tempo fracionário do relógio como entrada para o campo set_fraction do interpolador da caixa. Este por sua vez, ao recalcular o novo valor o envia pelo campo value_changed que é, por sua vez, informado como entrada para a transformação de translação da caixa. 58
59 #VRML V2.0 utf8 Group { # Define a caixa que sera animada DEF Cubo Transform { children Shape { appearance Appearance { material Material { diffusecolor geometry Box { size , # Define o relógio DEF Clock TimeSensor { cycleinterval 5.0 loop TRUE, # Descreve o caminha da animacao DEF CaminhoCubo PositionInterpolator { key [ 0.00, 0.11, 0.17, 0.22, 0.33, 0.44, 0.50, 0.55, 0.66, 0.77, 0.83, 0.88, 0.99 keyvalue [ , , , , , , , , , , , , # Define a rota dos eventos ROUTE Clock.fraction_changed TO CaminhoCubo.set_fraction ROUTE CaminhoCubo.value_changed TO Cubo.set_translation Exemplo 5.1: Animação de um cubo saltando na tela. O exemplo 5.2 trabalha de forma bastante semelhante ao exemplo anterior, mas utiliza o resultado do interpolador de orientação como informação para a definição da nova 59
60 orientação de um cilindro. Na prática, ela faz com que o cilindro gira pela tela sistematicamente. Observe que os valores de chave do campo key do interpolador estão em menor número. Isto é devido ao fato de que, sendo uma rotação, são calculadas posições para todas os ângulos do círculo trigonométrico. #VRML V2.0 utf8 Group { # Cilindro girando DEF Coluna Transform { rotation children Shape { appearance Appearance { material Material { diffusecolor geometry Cylinder { height 1.0 radius 0.2, # Define o relógio DEF Clock TimeSensor { cycleinterval 4.0 loop TRUE, # Descreve o caminho da animacao DEF CaminhoColuna OrientationInterpolator { key [ 0.0, 0.50, 1.0 keyvalue [ , , # Define rotas dos eventos ROUTE Clock.fraction_changed TO CaminhoColuna.set_fraction ROUTE CaminhoColuna.value_changed TO Coluna.set_rotation Exemplo 5.2: Animação de um cilindro girando na tela. 60
61 O exemplo 5.3 faz o uso do interpolador de posicionamento para alimentar a entrada da transformação em escala do nodo que define a esfera. Esta operação, com os valores definidos, faz com que a esfera mostrada aumente de tamanho e, logo em seguida, diminua, de forma a representar que está pulsando na tela. #VRML V2.0 utf8 Group { # Define bola pulsante DEF Bola Transform { children Shape { appearance Appearance { material Material { diffusecolor geometry Sphere {, # Define o relogio DEF Clock TimeSensor { cycleinterval 2.0 loop TRUE, # Descreve o caminho da animacao DEF CaminhoBola PositionInterpolator { key [ 0.0, 0.20, 0.65, 1.0 keyvalue [ , , , # Define rota dos eventos ROUTE Clock.fraction_changed ROUTE CaminhoBola.value_changed TO CaminhoBola.set_fraction TO Bola.set_scale Exemplo 5.3: Uma esfera pulsando na tela. O exemplo 5.4 mostra como pode ser utilizado um único interpolador para manipular várias figuras. Neste caso, este interpolador faz com que três caixa pulem sincronizadamente na tela. Este sincronísmo vem do uso deste único gerador de posições. 61
62 #VRML V2.0 utf8 Group { # Primeiro cubo DEF Cubo1 Transform { children DEF TipoCubo Shape { appearance Appearance { material Material { diffusecolor geometry Box { size , # Segundo cubo Transform { translation children DEF Cubo2 Transform { children USE TipoCubo, # Terceiro cubo Transform { translation children DEF Cubo3 Transform { children USE TipoCubo, # Define o relogio DEF Clock TimeSensor { cycleinterval 4.0 loop TRUE, # Descreve o caminho da animacao DEF CaminhoCubo PositionInterpolator { key [ 0.00, 0.11, 0.17, 0.22, 0.33, 0.44, 0.50, 0.55, 0.66, 0.77, 0.83, 0.88, 0.99 keyvalue [ , , , , , , , , , , , , 62
63 # Define rotas dos eventos ROUTE Clock.fraction_changed ROUTE CaminhoCubo.value_changed ROUTE CaminhoCubo.value_changed ROUTE CaminhoCubo.value_changed TO CaminhoCubo.set_fraction TO Cubo1.set_translation TO Cubo2.set_translation TO Cubo3.set_translation Exemplo 5.4: Uso de vários figuras sendo interpoladas por um único interpolador. O exemplo 5.5, em contraponto ao exemplo anterior, faz o uso de múltiplos interpoladores para controlar diferentes figuras. Isto faz com que as três figuras presentes no texto girem de forma não sincronizada. Finalmente o exemplo 5.6 apresenta o uso de múltiplos relógios para controlar múltiplos interpoladores e múltiplas figuras. Neste exemplo, esta ação faz com que um sistema solar simulado tenha os seus planetas (figuras diferentes) girando em torno do seu sol com órbitas diferentes (interpoladores diferentes) e a velocidades diferentes (relógios diferentes). #VRML V2.0 utf8 Group { # Primeira barra giratória DEF Barra1 Transform { children Shape { appearance DEF CorBarra Appearance { material Material { diffusecolor geometry Box { size , # Segunda barra DEF Barra2 Transform { children Shape { appearance USE CorBarra geometry Box { size , 63
64 # Terceira Barra DEF Barra3 Transform { children Shape { appearance USE CorBarra geometry Box { size , # Define o relogio DEF Clock TimeSensor { cycleinterval 4.0 loop TRUE, # Descreve o caminho da animacao DEF CaminhoBarra1 OrientationInterpolator { key [ 0.0, 0.50, 1.0 keyvalue [ , , , DEF CaminhoBarra2 OrientationInterpolator { key [ 0.0, 0.50, 1.0 keyvalue [ , , , DEF CaminhoBarra3 OrientationInterpolator { key [ 0.0, 0.50, 1.0 keyvalue [ , , # Descreve as rotas dos eventos ROUTE Clock.fraction_changed TO CaminhoBarra1.set_fraction ROUTE Clock.fraction_changed TO CaminhoBarra2.set_fraction ROUTE Clock.fraction_changed TO CaminhoBarra3.set_fraction ROUTE CaminhoBarra1.value_changed TO Barra1.set_rotation ROUTE CaminhoBarra2.value_changed TO Barra2.set_rotation ROUTE CaminhoBarra3.value_changed TO Barra3.set_rotation Exemplo 5.5: Uso de múltiplos interpoladores. 64
65 #VRML V2.0 utf8 Group { # Sistema planetario # Sol Shape { appearance Appearance { material Material { diffusecolor geometry Sphere {, # Planetas DEF Planeta1 Transform { translation center children Shape { appearance DEF CorPlaneta Appearance { material Material { diffusecolor geometry Sphere { radius 0.2, DEF Planeta2 Transform { translation center children Shape { appearance USE CorPlaneta geometry Sphere { radius 0.3, DEF Planeta3 Transform { translation center children Shape { appearance USE CorPlaneta geometry Sphere { radius 0.5, 65
66 # Define um relogio para cada planeta DEF Clock1 TimeSensor { cycleinterval 2.0 loop TRUE DEF Clock2 TimeSensor { cycleinterval 3.5 loop TRUE DEF Clock3 TimeSensor { cycleinterval 5.0 loop TRUE # Descreve os caminhos da animacao. Um para cada planeta DEF CaminhoPlaneta1 OrientationInterpolator { key [ 0.0, 0.50, 1.0 keyvalue [ , , , DEF CaminhoPlaneta2 OrientationInterpolator { key [ 0.0, 0.50, 1.0 keyvalue [ , , , DEF CaminhoPlaneta3 OrientationInterpolator { key [ 0.0, 0.50, 1.0 keyvalue [ , , # Define as rotas dos eventos ROUTE Clock1.fraction_changed TO CaminhoPlaneta1.set_fraction ROUTE Clock2.fraction_changed TO CaminhoPlaneta2.set_fraction ROUTE Clock3.fraction_changed TO CaminhoPlaneta3.set_fraction ROUTE CaminhoPlaneta1.value_changed TO Planeta1.set_rotation ROUTE CaminhoPlaneta2.value_changed TO Planeta2.set_rotation ROUTE CaminhoPlaneta3.value_changed TO Planeta3.set_rotation Exemplo 5.6: Uso de múltiplos relógios com múltiplos interpoladores. 66
67 6 Interagindo com os Objetos 6.1 Introdução O processo descrito no capítulo anterior a este fazia com que os objetos ou figuras do mundo virtual adquirissem a possibilidade movimentar-se por este mundo, tendo uma participação mais dinâmica no mesmo. Por outro lado, esta animação era caracterizada por ser completamente independente do observador ou usuário, pois este não interagia com os objetos. É possível tornar o mundo virtual ainda mais dinâmico. Para isto, o VRML propicia outros recursos de animação que são dependentes da ação do usuário. Em outras palavras, a animação acontece somente quando o usuário executa algum tipo pré-determinado de evento. Este eventos, monitorados pela linguagem, dizem respeito a ação de dispositivos de apontamento ou indicação, como mouse, touchpad, joystick, entre outros. Tipicamente, com estes dispositivos realizamos três tipos de tarefas: movimento, seleção (click) e arrasto (drag). Assim, o VRML fica atento a estas ações e, para cada uma delas, determina a resposta desejada. O princípio básico da animação determinado no capítulo anterior será mantido, ou seja, existirá um interpolador que calculará frações de posicionamento (translação, escala e rotação) que serão repassadas para o objeto em questão na forma de transformações o que modificará sua apresentação. O principal detalhe a ser alterado neste novo processo de animação com a interação do usuário, será que o interpolador ou o relógio, quanto estiver presente, de geração de frações para o interpolador, serão ativados somente quando o usuário executar a ação no objeto. Neste contexto, a linguagem VRML propicia dois de sensores para monitorar a ação do usuário. O primeiro tipo, composto pelo nodo TouchSensor, é um sensor sensível ao toque. A sua função é perceber que o usuário moveu-se, clicou sobre ou arrastou o objeto e avisar sobre isto. O seu aviso consiste de uma informação booleana verdadeira ou falsa caracterizando o tipo de ação e o tempo em que ela ocorreu. O segundo tipo de sensores é formado por aqueles sensíveis ao movimento, como os nodos CylinderSensor, PlaneSensor e SphereSensor. Eles são similares ao sensor de toque, mas também fornecem uma saída 67
68 projetada para o uso no controle de movimento e orientação de figuras. Utilizando-os será possível clicar sobre e movimentar figuras no mundo virtual. É necessário um comentário sobre a conduta dos sensores de movimento. Quando o usuário clica e arrasta uma figura, o sensor produz na sua saída uma série de valores que são tipicamente roteados para um nodo Transform, causando o movimento. Quando o usuário libera o objeto, a produção de valores cessa. Supondo que, logo a seguir, ele torna a clicar sobre o objeto e arrastá-lo, qual será o ponto de partida: o situação atual do objeto ou a sua situação original? As duas condutas são permitidas e existe um campo nestes nodos que as determina. Este campo é chamado de autooffset e, quando verdadeiro (TRUE), o sensor parte a animação da situação atual. Caso seja falso, a geração dos valores partirá da situação inicial do objeto. Finalmente, se um dos sensores for instanciado através do uso das palavras chaves DEF e USE, ele monitorará ações do usuário em qualquer figura que estiver no grupo pai de qualquer uma das instâncias do sensor. 6.2 Nodo TouchSensor O nodo TouchSensor define um sensor capaz de detectar ações do usuário sobre o objeto e produzir a saída correspondente a ação desejada. Sua sintaxe é: TouchSensor{ enabled TRUE # SFBool isactive # eventout SFBool isover # eventout SFBool touchtime # eventout SFTime hitpoint_changed # eventout SFVec3f hitnormal_changed # eventout SFVec3f hittexcoord_changed # eventout SFVec2f O valor do campo enabled defineseosensorestáativadoounão.seovaloré TRUE, o sensor está ativado e gera valores nas saídas. O valor deste campo pode ser alterado através de um campo eventin chamado de set_enabled e a resposta da alteração é apresentada no campo eventout enabled_changed. Quando o usuário move o cursor sobre uma figura que está sendo monitorada pelo nodo TouchSensor, o sensor envia um sinal TRUE através do campo eventout isover. Quando o cursor sai da figura monitorada, o sensor envia um sinal FALSE por este mesmo campo. Sempre que o cursor estiver sobre a figura, o ponto no qual ele está posicionado é fornecido através do campo hitpoint_changed. Neste mesmo ponto de contato, o sensor fornece os valores do vetor normal e das coordenadas da textura que foi mapeada, se houver, através dos campos hitnormal_changed e hit_texcoord_changed, respectivamente. 68
69 Se o usuário clicar o cursor sobre a figura, o sensor produz uma saída através do campo isactive. Quando o botão de seleção for liberado, este campo produz um sinal de FALSE. Os campos de posicionamento na objeto, normal e textura mencionados acima, continuam produzindo os mesmos resultados, mas referentes os ponto da seleção. 6.3 Nodo PlaneSensor O nodo PlaneSensor cria um sensor para detectar as ações do usuários e convertêlas em uma saída adequada para operações de manipulação (transformação) das figuras se elas movem-se a longo de um plano 2D. Sua sintaxe é: PlaneSensor{ enabled TRUE # SFBool autooffset TRUE # SFBool offset # SFVec3f maxposition # SFVec2f minposition # SFVec2f isactive # eventout SFBool translation_changed # eventout SFVec3f trackpoint_changed # eventout SFVec3f O campo enabled deste nodo tem função idêntica aquela descrita para o nodo TouchSensor, inclusive com os mesmos atributos e formas de acesso. O mesmo indicativo vale para o campo isactive, que também é idêntico ao já descrito. Quando o usuário move o cursor sobre o objeto monitorado pelo PlaneSensor existe um ponto de contato localizado em um plano imaginário sobre o qual a figura terá condições de ser animada. Este plano é chamado de track plane e orienta o seu eixo +X para o lado direito da tela de observação e o eixo +Y para o lado de cima da tela. A origem deste plano e, consequentemente, do sistema de coordenadas que ele estabelece estão localizados sobre o objeto. Cada vez que o observador move o objeto com o botão do cursor pressionado ocorre uma mudança da localização do ponto de contato em relação ao plano imaginário. Nesta situação, o novo ponto de contato é fornecido através do campo eventout trackpoint_changed. Os campos autooffset, offset, maxposition e minposition trabalham de forma conjunta para converter o ponto de contato, originalmente no sistema de coordenadas do plano imaginário, para valores de translação (vetores 3D) que serão fornecidos através do campo translation_changed. O valor do campo autooffset (TRUE/FALSE) especifica se o deslocamento deverá ter ou não um offset, ou seja, se ele tomará como referência a posição original do objeto no mundo virtual ou a posição atual do mesmo. Se o seu valor for TRUE, os valores das translações são armazenados no campo offset que será adicionado ao resultado a ser produzido. Se o valor é FALSE, o conteúdo do campo offset é ignorado. 69
70 Os valores do campos maxposition e minposition especificam os limites máximos e mínimos aceitos para as translações nos eixos X e Y do plano imaginário. O campo minposition fornece os valores mínimos para os eixos X e Y, enquanto que maxposition fornece os valores máximos. As condições para uso destes valores são: se o valor mínimo para o eixo for menor que o valor máximo, a translação, em relação ao eixo em questão, estará limitada entre o mínimo e o máximo; se os valores para mínimo e máximo forem iguais, a translação estará limitada a este valor; se o valor mínimo for maior do que o máximo, para um dado eixo, então a translação não sofre qualquer restrição naquele eixo. Os valores dos campos citados acima podem ser alterados através dos campos eventin set_autooffset, set_offset, set_minposition e set_maxposition. Quando os valores dos campos forem alterados, o novo valor é produzido num dos campos a seguir, respectivos aquele onde ocorreu a alteração: autooffset_changed, offset_changed, minposition_changed e maxposition_changed. 6.4 Nodo SphereSensor O nodo VRML SphereSensor cria um sensor capaz de detectar as ações do usuário e, a partir destas, produzir saídas em formato adequado a manipulação de figuras tal como se elas estivessem girando em torno de uma esfera. Sua sintaxe é: SphereSensor { enabled TRUE # SFBool autooffset TRUE # SFBool offset # SFRotation isactive # eventout SFBool rotation_changed # eventout SFRotation trackpoint_changed # eventout SFVec3f Os campos enabled e isactive tem a mesma função e sintaxe que foi apresentada com o nodo TouchSensor e PlaneSensor. O valor do campo autooffset especifica se a rotação calculado deverá ter um valor de rotação base. Caso ele seja TRUE, o valor calculado será adicionado ao valor do campo offset antes de ser fornecido através do campo rotation_changed. Quando o autooffset é FALSE, o valor do campo offset não é utilizado, e a saída é produzida a partir da situação original da figura. Quando o usuário libera o botão do cursos e o campo autooffset é TRUE, o último valor de rotação calculado é armazenado no campo offset para ser utilizado na próxima operação. 70
71 Os valores dos campos autooffset e offset podem ser alterados pelos campos eventin set_autooffset e set_offset, produzindo um aviso correspondente a mudança através dos campos eventout autooffset_changed e offset_changed. Finalmente, o campo trackpoint_changed trabalha conforme já descrito na seção que trata o nodo PlaneSensor. Assim como os demais sensores, o nodo SphereSensor pode ser utilizado como filho de qualquer grupo e monitora as ações em todas as figuras pertencentes a este grupo, inclusive aqueles que se localizam em grupos mais internos àquele onde ele está. Sua saída é, normalmente, roteada para um nodo do tipo Transform de forma a que seja aplicada uma rotação na figura desejada. 6.5 Nodo CylinderSensor O nodo CylinderSensor criar um sensor que atua de forma muito semelhante ao sensor SphereSensor. A principal diferença entre os dois é que rotação produzida na saída será calculada conforme se a figura estivesse girando em torno de um cilindro, ou seja, em torno de um único eixo que, neste caso, é o eixo Y do sistema de coordenadas do grupo pai do sensor. Sua sintaxe é: CylinderSensor{ enabled TRUE # SFBool diskangle # SFFloat autooffset TRUE # SFBool offset 0.0 # SFFloat maxangle -1.0 # SFFloat minangle 0.0 # SFFloat isactive # eventout SFBool rotation_changed # eventout SFRotation trackpoint_changed # eventout SFVec3f Os campos enabled, isactive, rotation_changed e trackpoint são idêntico aqueles utilizados nos sensores das seções anteriores. O mesmo acontece com os campos autooffset e offset, exceto pelo fato que o offset, neste caso, é composto de um único valor que representar o ângulo de rotação aplicado na figura na sua última ação. De qualquer forma, a sua aplicação, juntamente com o autooffset é mantida. Os campos maxangle e minangle trabalham no sentido de terminar limites máximo e mínimo para a rotação a ser aplicada às figuras monitoradas. Caso o valor mínimo seja menor do que o valor máximo, a rotação estará limitada entre estes valores de ângulo. Quando o valor mínimo for maior do que o máximo, não haverá limite para a rotação. Se ambos forem iguais, a rotação da figura ficará limitada a este valor e ela não irá girar. 71
72 O nodo CylinderSensor converte os movimentos do cursos sobre a figura monitorada em rotações em torno do eixo Y do sistema de coordenadas do sensor (definido pelo seu grupo pai), conforme foi dito. Neste movimento são necessários dois tipos de conduta do sensor que dependem da posição do observador sobre a cena. A seleção entre os dois possíveis tipos é feita de acordo com o ângulo existente entre o eixo Y mencionado e uma reta imaginária que parte do cursor e vai ao objeto (linha de observação) que será comparado com o valor do campo diskangle. Quando o ângulo entre a linha e o eixo é menor do que o diskangle, o observador deve estar acima ou abaixo da figura e o sensor converte o movimento circular do cursor em uma rotação de saída. Por outro lado, quando o ângulo entre o eixo e a linha imaginaria é maior do que o diskangle, o observador deve estar orientado na frente ou atras da figura, olhando-a perpendicularmente ao eixo. Nesta situação, o sensor deve converte o movimento do cursor de uma lado para outro em uma rotação de saída. Em ambos os casos, o valor de rotação produzido é fornecido através do campo rotation_changed. Assim, é o valor do campo diskangle que determina ao navegador VRML a partir de que ponto ele deve determinar que o observador se encontra olhando a figura de forma inclinada ou quase perpendicular a ela. Isto faz com que o tipo de movimento do cursos que ele precisa perceber mude. Além dos campos mencionados, o nodo CylinderSensor possui os campos eventin set_autooffset, set_offset, set_minangle e set_maxangle que fazem com que os valores dos campos autooffset, offset, minangle e maxangle, respectivamente, sejam alterados. A resposta desta alteração vem através de um conjunto de campos eventout que são autooffset_changed, offset_changed, minangle_changed e maxangle_changed. As aplicações e possibilidades de utilização do nodo CylinderSensor seguem as mesmas regras e condições mencionadas para o sensor SphereSensor na seção anterior. 6.6 Exemplos Vamos discutir agora alguns exemplos de aplicação dos sensores mencionados neste capítulo. O exemplo 6.1 apresentar uma caixa que começa a girar em torno do seu eixo Y cada vez que o cursor for movimentado para sobre ela. Neste exemplo, o sensor TouchSensor percebe o movimento do cursor e notifica-o através do seus campo isover, com o sinal TRUE. Este campo (e o valor), por sua vez, é roteado para um relógio (TimeSensor) que inicia o seu funcionamento que ativará um interpolador encarregado de calcular as posições das rotações que serão aplicadas na caixa. Quando o cursor deixa a caixa, é enviado ao relógio um sinal FALSE, fazendo com que o movimento pare. Neste exemplo, o sensor atua somente como uma espécie de liga-desliga do movimento da caixa. 72
73 #VRML V2.0 utf8 Group { DEF Cubo Transform { children Shape { appearance Appearance { material Material { geometry Box {, DEF Sensor TouchSensor {, DEF Relogio TimeSensor { enabled FALSE cycleinterval 4.0 loop TRUE, DEF CaminhoCubo OrientationInterpolator { key [ 0.0, 0.5, 1.0 keyvalue [ , , ROUTE Sensor.isOver TO Relogio.set_enabled ROUTE Relogio.fraction_changed TO CaminhoCubo.set_fraction ROUTE CaminhoCubo.value_changed TO Cubo.set_rotation Exemplo 6.1: Fazendo uma caixa girar sempre que o cursor estiver sobre ela. Já o exemplo 6.2 executa uma tarefa semelhante, fazendo a mesma caixa girar. Por outro lado, ela fará isto somente quando o usuário clicar o cursor sobre a mesma. Neste momento, o relógio será ativado pelo prazo de 4 segundo e a caixa, após isto, irá parar a espera de outro clique. Para fazer isto, lança-se mão do campo touchtime do sensor que é utilizado para inicializar o campo starttime do relógio. 73
74 #VRML V2.0 utf8 Group { DEF Cubo Transform { children Shape { appearance Appearance { material Material { geometry Box {, DEF Sensor TouchSensor {, DEF Relogio TimeSensor { cycleinterval 4.0, DEF CaminhoCubo OrientationInterpolator { key [0.0, 0.5, 1.0 keyvalue [ , , ROUTE Sensor.touchTime TO Relogio.set_startTime ROUTE Relogio.fraction_changed TO CaminhoCubo.set_fraction ROUTE CaminhoCubo.value_changed TO Cubo.set_rotation Exemplo 6.2: Fazendo a caixa girar quando houver um clique do cursor. No exemplo 6.3 a caixa é transladada através de um sensor PlaneSensor. Quando ela for clicada e arrastada, irá se movimentar através de um plano alinhado com a tela de observação. Note que não é possível deslocá-la para frente ou para trás, apenas para os lado e para cima/baixo, exatamente onde está o plano mencionado. O exemplo 6.4 é análogo, mas estabelece valore máximo e mínimo para o deslocamento neste plano através dos campos minposition e maxposition do sensor, limitando a translação da caixa. 74
75 #VRML V2.0 utf8 Group { DEF Cubo Transform { children Shape { appearance Appearance { material Material { geometry Box {, DEF Sensor PlaneSensor { ROUTE Sensor.translation_changed TO Cubo.set_translation Exemplo 6.3: Movimentando uma caixa com o PlaneSensor. #VRML V2.0 utf8 Group { DEF Cubo Transform { children Shape { appearance Appearance { material Material { geometry Box {, DEF Sensor PlaneSensor { minposition maxposition ROUTE Sensor.translation_changed TO Cubo.set_translation Exemplo 6.4: Limitando os movimentos da caixa do exemplo 6.3. O exemplo 6.5 faz uso de múltiplos sensores PlaneSensor para fazer com que quatro caixas movimentem-se independentemente. Neste exemplo, o campo offset de cada sensor é utilizado para marcar o valor inicial de localização de cada caixa de forma a fazêlas se movimentarem a primeira vez tendo como base a posição do desenho. 75
76 #VRML V2.0 utf8 Group { Group {, DEF Bloco1 Transform { children Shape { appearance Appearance { material Material { diffusecolor geometry Box {, DEF SensorBloco1 PlaneSensor { offset Group {, DEF Bloco2 Transform { translation children Shape { appearance Appearance { material Material { diffusecolor geometry Box {, DEF SensorBloco2 PlaneSensor { offset Group { DEF Bloco3 Transform { translation children Shape { appearance Appearance { material Material { diffusecolor
77 , geometry Box {, DEF SensorBloco3 PlaneSensor { offset Group { DEF Bloco4 Transform { translation children Shape { appearance Appearance { material Material { diffusecolor geometry Box {, DEF SensorBloco4 PlaneSensor { offset ROUTE SensorBloco1.translation_changed TO Bloco1.set_translation ROUTE SensorBloco2.translation_changed TO Bloco2.set_translation ROUTE SensorBloco3.translation_changed TO Bloco3.set_translation ROUTE SensorBloco4.translation_changed TO Bloco4.set_translation Exemplo 6.5: Movimentado várias caixas com sensores diferentes. Os exemplo 6.6 e 6.7 fazem com uma caixa e um cone girem através de sensores do tipo esfera (SphereSensor) e cilindro (CylinderSensor). O exemplo 6.6 aplica nestas figuras um sensor SphereSensor que faz com que elas girem livremente em torno de uma esfera imaginária que as contém. Já no outro exemplo, com um CylinderSensor, este movimento é limitado fazendo com que as figuras girem em torno de um eixo localizado paralelamente ao eixo Y da tela. 77
78 #VRML V2.0 utf8 Group { Group { DEF Figura1 Transform { children Shape { appearance DEF Branco Appearance { material Material { geometry Box {, DEF SensorFigura1 SphereSensor {, Group { DEF Figura2 Transform { translation children Shape { appearance USE Branco geometry Cone {, DEF SensorFigura2 SphereSensor { ROUTE SensorFigura1.rotation_changed TO Figura1.set_rotation ROUTE SensorFigura2.rotation_changed TO Figura2.set_rotation Figura 6.6: Animando com um sensor do tipo esfera. O exemplo 6.8 aplica em uma caixa dois sensores, de tipo diferentes. O primeiro deles é um sensor de toque (TouchSensor) que detecta o posicionamento do cursor sobre a caixa, fazendo-a girar como no exemplo 6.1. O segundo sensor que atua sobre a caixa é um PlaneSensor que permite que ela seja levada para os lado e para cima/baixo, mesmo enquanto estiver girando. 78
79 #VRML V2.0 utf8 Group { Group { DEF Figura1 Transform { children Shape { appearance DEF Branco Appearance { material Material { geometry Box {, DEF SensorFigura1 CylinderSensor {, Group { DEF Figura2 Transform { translation children Shape { appearance USE Branco geometry Cone {, DEF SensorFigura2 CylinderSensor { ROUTE SensorFigura1.rotation_changed TO Figura1.set_rotation ROUTE SensorFigura2.rotation_changed TO Figura2.set_rotation Figura 6.7: Animando os objetos do exemplo 6.6 com um sensor cilíndrico. 79
80 #VRML V2.0 utf8 Group { DEF Cubo Transform { children Shape { appearance Appearance { material Material { geometry Box {, DEF Arrasto PlaneSensor {, DEF Toque TouchSensor {, DEF Relogio TimeSensor { enabled FALSE cycleinterval 4.0 loop TRUE, DEF CaminhoCubo OrientationInterpolator { key [ 0.0, 0.50, 1.00 keyvalue [ , , ROUTE Toque.isOver TO Relogio.set_enabled ROUTE Relogio.fraction_changed TO CaminhoCubo.set_fraction ROUTE CaminhoCubo.value_changed TO Cubo.set_rotation ROUTE Arrasto.translation_changed TO Cubo.set_translation Figura 6.8: Controlando um mesmo objeto com vários sensores. Finalmente, o exemplo 6.9 apresenta uma luminária composta de elementos articulados e com movimentação plena. Observe que cada um dos elementos desta cena possui o seu próprio sensor e sua própria resposta de movimentação. Estes sensores são esféricos com exceção da base da luminária que se movimenta em um plano. 80
81 #VRML V2.0 utf8 Group { DEF MoveLampada PlaneSensor {, DEF Lampada Transform { # Base da lampada Shape { appearance DEF CorLampada Appearance { material Material { geometry Cylinder { radius 0.1 height 0.01, # Braco Group { DEF MoveBraco1 SphereSensor { offset , DEF Braco1 Transform { translation rotation center DEF BracoLampada Shape { appearance USE CorLampada geometry Cylinder { radius 0.01 height 0.3, # Uniao dos dois bracos Group { DEF MoveBraco2 SphereSensor { offset , DEF Braco2 Transform { translation rotation center # Segundo braco USE BracoLampada # Juncao com quebra-luz Group { DEF MoveQuebraLuz SphereSensor { offset , DEF QuebraLuz Transform { translation rotation
82 center # Quebra-luz Shape { appearance USE CorLampada geometry Cone{ height 0.15 bottomradius 0.12 bottom FALSE, # Lampada Transform { translation children Shape { appearance USE CorLampada geometry Sphere { radius 0.05 ROUTE MoveLampada.translation_changed TO Lampada.set_translation ROUTE MoveBraco1.rotation_changed TO Braco1.set_rotation ROUTE MoveBraco2.rotation_changed TO Braco2.set_rotation ROUTE MoveQuebraLuz.rotation_changed TO QuebraLuz.set_rotation Figura 6.9: Descrição de uma luminária com movimentação ampla. 82
83 7 Controlando a Aparência das Figuras 7.1 Introdução É possível, em VRML, controlar a aparência de qualquer figura especificando atributos que definem o material com o qual ela é feita. Conforme vimos, uma figura é definida pela sua aparência e sua geometria. A aparência da figura utiliza-se dos nodos Appearance e Material. Com eles poderemos fazer estas definições que caracterizarão as figuras apresentadas no mundo virtual. Além destes, existe ainda o nodo Texture que será apresentado mais tarde. Em algumas situações a definição de características físicas aos objetos não é o suficiente e elas necessitam ser variadas em um intervalo de tempo. Para estes casos a solução é dada por interpoladores semelhantes aqueles utilizados no controle da animação dos objetos. A linguagem VRML dispõem de dois interpoladores que atuam em consonância com o controle da aparência dos objetos que são o ColorInterpolator e ScalarInterpolator. O primeiro deles produz valores de cores, segundo o modelo RGB, como resultado, enquanto que o último o faz através de valores escalares. 7.2 Nodo Material O nodo Material é o responsável, como valor do campo material do nodo Appearance, por definir as propriedades que caracterizarão fisicamente o objeto a ele agregado. Sua sintaxe é: Material { diffusecolor # SFColor emissivecolor # SFColor transparency 0.0 # SFFloat ambientintensity 0.2 # SFFloat specularcolor # SFColor shininess 0.2 # SFFloat 83
84 Conforme já foi mencionado, o campo diffusecolor especifica a cor que será atribuida ao objeto em questão. Os valores expressos neste campo estão de acordo com o modelo de representação de cores RGB que define um valor entre 0 (zero) e 1 (um) para cada um das componentes de cores vermelho, verde e azul. No anexo I deste texto encontra-se uma tabela com algumas cores neste modelo e os seus respectivos valores. É possível em VRML fazer com que um objeto simule a existência de uma fonte de luz fazendo-o brilhar como esta, ou seja, simulando a emissão de luz em uma determinada cor. A existência desta emissão de luz e a sua cor são os atributos do campo emissivecolor. Em seu valor default, não há emissão de luz. Os valores colocados a ele também são cores segundo o modelo RGB. Note, entretanto, que não ocorre a produção de luz, nem a iluminação de objetos nas vizinhanças. Apenas é possível fazer com que um dado objeto simule esta característica. O campo transparency especifica o fator de transparência do objetos agregado ao nodo Material. O valor de transparência 0.0 (zero), que é o valor default, define um objeto completamente opaco, enquanto que um valor 1.0 (um) para a transparência irá apresentar um objeto completamente transparente. Os demais graus de transparência são valores encontrados entre estes dois extremos. Por exemplo, para definirmos um objeto 50% transparente, o valor do campo transparency será 0.5, e assim por diante. O valor do campo ambientintensity controla a maneira pela qual o material é afetado pelo nível de luz ambiente existente no mundo virtual. Valores altos fazem com que o material seja altamente afetado por esta luz, enquanto que valores baixos fazem o contrário. De qualquer forma, estes valores devem estar no intervalo 0 (zero) à 1 (um). A luz ambiente é uma forma de modelarmos as quantidades de luz que chegam aos objetos de forma indireta, fazendo com que estes, mesmo que não sendo iluminados por nenhuma funte de luz, sejam vistos. O campo specularcolor define com o material que está sendo definido se comporte em relação a reflexão especular da luz. Ela controla a polidez dos objetos, características acentudas em superfícies que se comportam como espelhos. De forma mais geral, esta reflexão tende a agregar fortemente a cor da luz que a iluminou. Por outro lado, quando a superfície silmular um metal, a tendência é a cor do material (diffusecolor) ganhar importância e contribuir mais fortemente para o resultado final. A cor default para este campo é o preto ( ) que caracteriza um material sem polidez. O contrário acontece com um valor de cor branco ( ). Finalmente, o campo shininess controla o brilho do material. O valor 0.0 (zero) para este campo define um objeto áspero e sem brilho enquanto que valores mais altos tornam o objeto mais brilhante. Não há limite superior para este campo e o valor defaul caracteriza um superfície moderadamente brilhante. Note que este campo necessita trabalhar em conjunto com o campo specularcolor e não podem anular-se mutuamente. Os valores dos campos mencionados acima podem ser alterados através dos campos eventin set_diffusecolor, set_emissivecolor, set_transparency, set_ambientintensity, 84
85 set_specularcolor e set_shininess. Quando os valores são alterados, é produzida um saída através dos respectivos campos eventout: diffusecolor_changed, emissivecolor_changed, transparency_changed, ambientintensity_changed, specularcolor_changed e shininess_changed. Maiores informação sobre conceitos e uso dos elementos dos campos do nodo Material para tratar a aparência de figuras podem ser encontradas em [Car98 ou em vários livros de computação gráfica. 7.3 Nodo ColorInterpolator O nodo ColorInterpolator produz um série de valores de cores a serem utilizados na animação da aparência das figuras. Sua sintaxe é: ColorIntepolator { key [ # MFFloat keyvalue [ # MFColor set_fraction # eventin SFFloat value_changed # eventout SFColor A forma de proceder deste interpolador é análoca aos intepoladores PositionInterpolator e OrientationIntepolator já discutidos no capítulo 5, ou seja, são acionados através de um relógio que produz uma fração de tempo e respondem com um valor em uma dada especificação. Neste caso, a resposta é constituida de uma cor no modelo RGB. 85
86 Anexo I Tabela de Cores do Modelo RGB Nome da Cor Red Green Blue Aquamarine Black Blue Blue violet Brown Cadet blue Coral Cornflower blue Cyan Dark green Dark olive green Dark orchid Dark slate blue Dark slate gray Dark turquoise Dim gray Firebrick Forest green Gold Goldenrod Gray Green Green yellow Indian red Khaki Light blue Light gray Light steel blue Lime green Magenta Maroon Medium aquamarine Medium blue
87 Medium forest green Medium goldenrod Medium orchid Medium sea green Medium slate blue Medium spring green Medium turquoise Medium violet red Midnight blue Navy Orange Orange red Orchid Pale green Pink Plum Red Salmon Sea green Sienna Sky blue Slate blue Spring blue Steel blue Tan Thistle Turquoise Violet Violet red Wheat White Yellow Yellow green
88 Bibliografia [ANM96 Andrea Ames, David Nadeau and John Moreland. VRML 2.0 Sourcebook, 2 nd edition. John Wiley & Sons, [Car98 Marcos Carrard. Cor e Iluminação. Ed. Unijuí, Disponível em (em novembro/2000). [Ipo96 Juliano Ipólito. Tutorial VRML 1.0. Disponível em ~grv/vrml/tutoriais/vrml10/index.html (em agosto/2000). [Ipo97 Juliano Ipólito. Realidade Virtual. Disponível em ~juliano/rv/introducao.html (em agosto/2000). [Jac94 Linda Jacobson. Realidade Virtual em Casa. Berkeley, [Kir97 Cláudio Kirner. Sistemas de Realidade Virtual. Disponível em (em agosto/2000). [RCR97 Bernie Roehl, Justin Couch, Cindy Reed-Ballreich, Tim Rohaly and Geoff Brown. Late Night VRML 2.0 with Java. Ziff-Davis Press,
6. Geometria, Primitivas e Transformações 3D
6. Geometria, Primitivas e Transformações 3D Até agora estudamos e implementamos um conjunto de ferramentas básicas que nos permitem modelar, ou representar objetos bi-dimensionais em um sistema também
VRML Virtual Reality Modeling Language
Roteiro VRML Virtual Reality Modeling Language INTRODUÇÃO AO VRML Baseado em apresentação de Judith Kelner, Alejandro Frery 1. O que é VRML 2. Histórico 3. Objetivos da VRML 4. VRML, Internet e WWW 5.
CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES
CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES 3.1 - IDENTIFICADORES Os objetos que usamos no nosso algoritmo são uma representação simbólica de um valor de dado. Assim, quando executamos a seguinte instrução:
PRINCÍPIOS DE INFORMÁTICA PRÁTICA 08 1. OBJETIVO 2. BASE TEÓRICA. 2.1 Criando Mapas no Excel. 2.2 Utilizando o Mapa
PRINCÍPIOS DE INFORMÁTICA PRÁTICA 08 1. OBJETIVO Aprender a utilizar mapas, colocar filtros em tabelas e a criar tabelas e gráficos dinâmicos no MS-Excel. Esse roteiro foi escrito inicialmente para o Excel
Bem- Vindo ao manual de instruções do ECO Editor de COnteúdo.
Manual de Instruções ECO Editor de Conteúdo Bem- Vindo ao manual de instruções do ECO Editor de COnteúdo. O ECO é um sistema amigável e intui?vo, mas abaixo você pode?rar eventuais dúvidas e aproveitar
Orientação a Objetos
1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou
Departamento de Matemática - UEL - 2010. Ulysses Sodré. http://www.mat.uel.br/matessencial/ Arquivo: minimaxi.tex - Londrina-PR, 29 de Junho de 2010.
Matemática Essencial Extremos de funções reais Departamento de Matemática - UEL - 2010 Conteúdo Ulysses Sodré http://www.mat.uel.br/matessencial/ Arquivo: minimaxi.tex - Londrina-PR, 29 de Junho de 2010.
Sumário. 1 Tutorial: Blogs no Clickideia
1 Tutorial: Blogs no Clickideia Sumário Introdução... 2 Objetivos... 2 Instruções para utilização do Tutorial... 2 Acesso ao Portal e a Home Blog... 3 Página Inicial da área do Blog... 4 Apresentação da
Status. Barra de Título. Barra de Menu. Barra de. Ferramentas Padrão. Caixa de nomes. Barra de. Ferramentas de Formatação. Indicadores de Coluna
O que é uma planilha eletrônica? É um aplicativo que oferece recursos para manipular dados organizados em tabelas. A partir deles pode-se gerar gráficos facilitando a análise e interpretação dos dados
Manual do Usuário. Plano de Corte
Manual do Usuário Plano de Corte Sumário Gigatron Plano de Corte...2 Versão...2 Plano de Corte...2 Edição de Atributos de Peças...3 Atributos de Linhas de Corte...4 Estilos de Entrada e Saída...8 Contorno...8
Fluxo de trabalho do Capture Pro Software: Indexação de código de barras e separação de documentos
Este procedimento corresponde ao fluxo de trabalho de Indexação de código de barras e de separação de documentos no programa de treinamento do Capture Pro Software. As etapas do procedimento encontram-se
O ESPAÇO NULO DE A: RESOLVENDO AX = 0 3.2
3.2 O Espaço Nulo de A: Resolvendo Ax = 0 11 O ESPAÇO NULO DE A: RESOLVENDO AX = 0 3.2 Esta seção trata do espaço de soluções para Ax = 0. A matriz A pode ser quadrada ou retangular. Uma solução imediata
Web Design. Prof. Felippe
Web Design Prof. Felippe 2015 Sobre a disciplina Fornecer ao aluno subsídios para o projeto e desenvolvimento de interfaces de sistemas Web eficientes, amigáveis e intuitivas. Conceitos fundamentais sobre
Tutorial Plone 4. Manutenção de Sites. Universidade Federal de São Carlos Departamento de Sistemas Web Todos os direitos reservados
Tutorial Plone 4 Manutenção de Sites Universidade Federal de São Carlos Departamento de Sistemas Web Todos os direitos reservados Sumário Introdução 1 Como fazer a autenticação do usuário 1.1 Através do
Objetivos. Apresentar as superfícies regradas e superfícies de revolução. Analisar as propriedades que caracterizam as superfícies regradas e
MÓDULO 2 - AULA 13 Aula 13 Superfícies regradas e de revolução Objetivos Apresentar as superfícies regradas e superfícies de revolução. Analisar as propriedades que caracterizam as superfícies regradas
CRIANDO TEMPLATES E LEGENDAS
CRIANDO TEMPLATES E LEGENDAS Este tutorial tem como objetivo instruir passo à passo como criar templates de peças, utilizar os novos recursos de cadastro de propriedade de peças e criação de legenda. 1-
Universidade Federal do Mato Grosso - STI-CAE. Índice
CAPA Universidade Federal do Mato Grosso - STI-CAE Índice 1. Página da área administrativa... 1.1 Botões e campo iniciais... 2. Explicar como funcionam as seções... 2.1. Seções dinâmicos... 2.1.1 Como
Barra de ferramentas padrão. Barra de formatação. Barra de desenho Painel de Tarefas
Microsoft Power Point 2003 No Microsoft PowerPoint 2003, você cria sua apresentação usando apenas um arquivo, ele contém tudo o que você precisa uma estrutura para sua apresentação, os slides, o material
Desenhador de Escadas
Desenhador de Escadas Designsoft Desenhador de Escadas-1 Desenhador de Escadas-2 Desenhador de Escadas O Desenhador de Escadas facilita o desenho e a localização de escadas personalizadas no seu projeto.
Computação Gráfica 3D Studio Max 2008.1 www.damasceno.info Prof.: Luiz Gonzaga Damasceno
4.2.1 Criação de Splines (continuação) Circle Spline Create panel > Shapes > Splines > Object Type > Circle Create menu > Shapes > Circle Use Circle para criar splines circulares fechadas feitas de quatro
AULA 6 - Operações Espaciais
6.1 AULA 6 - Operações Espaciais Essa aula descreve as operações espaciais disponíveis no TerraView. Antes de iniciar sua descrição é necessário importar alguns dados que serão usados nos exemplos. Exercício:
A barra de ferramentas abaixo resume os principais comandos de texto para trabalhar com o AutoCAD:
TRABALHANDO COM TEXTOS Para desenhar textos o AutoCAD possui duas importantes ferramentas. O processo ded inserir o texto no desenho é fácil e as dúvidas costumam surgir na definição do tamanho da letra.
&XUVRGH,QWURGXomRDR (GLWRUGH3ODQLOKDV([FHO
Universidade Federal de Viçosa Departamento de Informática &XUVRGH,QWURGXomRDR (GLWRUGH3ODQLOKDV([FHO Flaviano Aguiar Liziane Santos Soares Jugurta Lisboa Filho (Orientador) PROJETO UNESC@LA Setembro de
Roteiro 2: Conceitos de Tags HTML
Roteiro 2: Conceitos de Tags HTML Objetivos Detalhar conceitos sobre TAGS HTML: elementos, atributos, elemento vazio, links. Implementar páginas de internet com uso da linguagem HTML; Ferramentas Necessárias
PRINCÍPIOS DE INFORMÁTICA PRÁTICA 06 1. OBJETIVO 2. BASE TEÓRICA 3. SEQÜÊNCIA DA AULA. 3.1 Iniciando o PowerPoint
PRINCÍPIOS DE INFORMÁTICA PRÁTICA 06 1. OBJETIVO Apresentar o PowerPoint, que é o software para montar apresentações na forma de slides da Microsoft. Isso será feito seguindo-se uma seqüência mostrando
MANUAL DO ANIMAIL 1.0.0.1142 Terti Software
O Animail é um software para criar campanhas de envio de email (email Marketing). Você pode criar diversas campanhas para públicos diferenciados. Tela Principal do sistema Para melhor apresentar o sistema,
Serviço Técnico de Informática. Curso Básico de PowerPoint
Serviço Técnico de Informática Curso Básico de PowerPoint Instrutor: Tiago Souza e Silva de Moura Maio/2005 O Microsoft PowerPoint No Microsoft PowerPoint, você cria sua apresentação usando apenas um arquivo
SISTEMA DE GERENCIAMENTO DE PROJETOS - REDMINE MANUAL DE USO
SISTEMA DE GERENCIAMENTO DE PROJETOS - REDMINE MANUAL DE USO AGOSTO DE 2013 SUMÁRIO STI/UFF - Sistema de Gerenciamento de Projetos do PDI SUMÁRIO... 2 1 Introdução... 3 1.1 O que é e qual a finalidade
Atividade: matrizes e imagens digitais
Atividade: matrizes e imagens digitais Aluno(a): Turma: Professor(a): Parte 01 MÓDULO: MATRIZES E IMAGENS BINÁRIAS 1 2 3 4 5 6 7 8 Indique, na tabela abaixo, as respostas dos 8 desafios do Jogo dos Índices
SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2
SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2 1.1 Introdução... 2 1.2 Estrutura do IP... 3 1.3 Tipos de IP... 3 1.4 Classes de IP... 4 1.5 Máscara de Sub-Rede... 6 1.6 Atribuindo um IP ao computador... 7 2
Microsoft Word INTRODUÇÃO
INTRODUÇÃO O Word é uma ferramenta utilizada para o processamento e editoração eletrônica de textos. O processamento de textos consiste na possibilidade de executar e criar efeitos sobre um texto qualquer,
Lição 1 - Criação de campos calculados em consultas
1 de 5 21-08-2011 22:15 Lição 1 - Criação de campos calculados em consultas Adição de Colunas com Valores Calculados: Vamos, inicialmente, relembrar, rapidamente alguns conceitos básicos sobre Consultas
PARA A CONSTRUÇÃO DOS GRÁFICOS
1 PARA A CONSTRUÇÃO DOS GRÁFICOS Apresentamos dois materiais feitos por estudantes do Curso de Psicologia da Faculdade de Ciências Humanas e da Saúde para construção de gráficos. As instruções das páginas
Aula 5 Microsoft PowerPoint 2003: Criando uma Apresentação
Universidade de São Paulo/Faculdade de Saúde Pública Curso de Saúde Pública Disciplina: HEP 147 - Informática Aula 5 Microsoft PowerPoint 2003: Criando uma Apresentação 1 Introdução ao Microsoft PowerPoint
Entendendo como funciona o NAT
Entendendo como funciona o NAT Vamos inicialmente entender exatamente qual a função do NAT e em que situações ele é indicado. O NAT surgiu como uma alternativa real para o problema de falta de endereços
Universidade Federal de Santa Maria UFSM Centro de Tecnologia CT. Power Point. Básico
Universidade Federal de Santa Maria UFSM Centro de Tecnologia CT Power Point Básico Santa Maria, julho de 2006 O Power Point é um aplicativo do Microsoft Office direcionado à criação de apresentações.
Superintendência Regional de Ensino de Ubá - MG Núcleo de Tecnologia Educacional NTE/Ubá. LibreOffice Impress Editor de Apresentação
Superintendência Regional de Ensino de Ubá - MG Núcleo de Tecnologia Educacional NTE/Ubá LibreOffice Impress Editor de Apresentação Iniciando o Impress no Linux Educacional 4 1. Clique no botão 'LE' no
A Estação da Evolução
Microsoft Excel 2010, o que é isto? Micorsoft Excel é um programa do tipo planilha eletrônica. As planilhas eletrônicas são utilizadas pelas empresas pra a construção e controle onde a função principal
Manual do Publicador. Wordpress FATEA Sistema de Gerenciamento de Conteúdo Web
Manual do Publicador Wordpress FATEA Sistema de Gerenciamento de Conteúdo Web Sumário Painel de Administração... 3 1 - Inserção de post... 5 2 Publicação de post com notícia na área headline (galeria de
Curso de Computação Gráfica (CG) 2014/2- Unidade 1- Modelagem de objetos. Exercício 1 (individual) - Entrega: quarta 13/08
Curso de Computação Gráfica (CG) 2014/2- Unidade 1- Modelagem de objetos Exercício 1 (individual) - Entrega: quarta 13/08 Escolha um objeto entre os que possivelmente compõem uma clínica médica de exames
Curso técnico: Informática Disciplina: Aplicativos computacionais
01. A tecla de atalho responsável por exibir os slides no modo de "apresentação" (tela inteira), é: a) F2 b) F3 c) F4 d) F5 e) F11 02. O recurso que permite definir efeitos de entrada para cada slide,
Ambiente Virtual de Aprendizagem Moodle
Ambiente Virtual de Aprendizagem Moodle No INSEP, o ambiente virtual de aprendizagem oferecido ao acadêmico é o MOODLE. A utilização dessa ferramenta é fundamental para o sucesso das atividades em EAD,
2 Diagrama de Caso de Uso
Unified Modeling Language (UML) Universidade Federal do Maranhão UFMA Pós Graduação de Engenharia de Eletricidade Grupo de Computação Assunto: Diagrama de Caso de Uso (Use Case) Autoria:Aristófanes Corrêa
Tema UFPel 2.0 WP Institucional Guia de Opções de Personalização
Tema UFPel 2.0 WP Institucional Guia de Opções de Personalização Sumário 1. Configurações Iniciais...2 1.1. Configurando o Menu Personalizado...2 1.2. Configurando os Widgets...3 2. Localize o nome de
TUTORIAL DO ALUNO. Olá, bem vindo à plataforma de cursos a distância da Uniapae!!!
TUTORIAL DO ALUNO Olá, bem vindo à plataforma de cursos a distância da Uniapae!!! O Moodle é a plataforma de ensino a distância utilizada pela Uniapae sendo a unidade de ensino para rápida capacitação
Voltado para novos usuários, este capítulo fornece uma instrução para edição de Leiaute do SILAS e suas funções.
13. Editor de leiautes Voltado para novos usuários, este capítulo fornece uma instrução para edição de Leiaute do SILAS e suas funções. Neste capítulo uma breve explicação será apresentada sobre a organização
FACULDADE LEÃO SAMPAIO CURSO DE GRADUAÇÃO EM ENFERMAGEM IX SEMANA DE ENFERMAGEM. Edital 001/2014
FACULDADE LEÃO SAMPAIO CURSO DE GRADUAÇÃO EM ENFERMAGEM IX SEMANA DE ENFERMAGEM Edital 001/2014 Dispõe sobre normas para inscrição de trabalhos científicos na IX Semana de Enfermagem da Faculdade Leão
TUTORIAL DO ACCESS PASSO A PASSO. I. Criar um Novo Banco de Dados. Passos: 1. Abrir o Access 2. Clicar em Criar um novo arquivo
TUTORIAL DO ACCESS PASSO A PASSO I. Criar um Novo Banco de Dados Passos: 1. Abrir o Access 2. Clicar em Criar um novo arquivo 3. Clicar em Banco de Dados em Branco 4. Escrever um nome na caixa de diálogo
VERSÃO 1 PRELIMINAR - 2010 MÓDULO 3 - PRESENCIAL
MÓDULO 3 - PRESENCIAL CmapTools É um software para autoria de Mapas Conceituais desenvolvido pelo Institute for Human Machine Cognition da University of West Florida1, sob a supervisão do Dr. Alberto J.
Algoritmos com VisuAlg
Algoritmos com VisuAlg Prof Gerson Volney Lagemann Depto Eng de Produção e Sistemas UDESC - CCT Algoritmos com VisuAlg Introdução A linguagem VisuAlg é simples, seu objetivo é disponibilizar um ambiente
AULA 1 Iniciando o uso do TerraView
1.1 AULA 1 Iniciando o uso do TerraView Essa aula apresenta a interface principal do TerraView e sua utilização básica. Todos os arquivos de dados mencionados nesse documento são disponibilizados junto
Sistemas Multimídia Aula 3 VRML
Sistemas Multimídia Aula 3 VRML Diogo Pinheiro Fernandes Pedrosa Universidade Federal Rural do Semiárido Departamento de Ciências Exatas e Naturais Curso de Ciência da Computação Introdução O que é VRML?
Programação Orientada a Objetos com PHP & MySQL Sistema Gerenciador de Banco de Dados: Introdução e configuração de bases de dados com Postgre e MySQL
Programação Orientada a Objetos com PHP & MySQL Sistema Gerenciador de Banco de Dados: Introdução e configuração de bases de dados com Postgre e MySQL Prof. MSc. Hugo Souza Iniciando nossas aulas sobre
Virtual Reality Modeling Language
Virtual Reality Modeling Language Luís Manuel Borges Gouveia Fevereiro de 1998 Objectivo da apresentação: - duzir o 2.0 como linguagem de especificação de cenas 3D Pre-requisitos - conhecimento de princípios
ALBUM DE FOTOGRAFIAS NO POWER POINT
ALBUM DE FOTOGRAFIAS NO POWER POINT O PowerPoint é uma poderosa ferramenta que faz parte do pacote Office da Microsoft. O principal uso desse programa é a criação de apresentação de slides, para mostrar
MANUAL DE NAVEGAÇÃO DO MILLENNIUM BUSINESS
MANUAL DE NAVEGAÇÃO DO MILLENNIUM BUSINESS 1 Conteúdo Apresentação... 3 1 Página Principal do Sistema... 4 2 Telas de busca... 8 3 Teclas de Navegação... 11 4 Tela de Menu de Relatório... 12 5 Telas de
ALUNES MANUAL DO USUÁRIO. Guia rápido Alunes
ALUNES MANUAL DO USUÁRIO Guia rápido Alunes 1 Manual de Instruções Versão 2.0 Alunes Informática 2 Sumário Introdução... 5 Pré-requisitos... 5 Principal/Home... 6 Como editar texto do home... 7 Desvendando
Que imagens têm ou não têm simetria?
O mundo da simetria Que imagens têm ou não têm simetria? Isometrias Isometria: Transformação geométrica que preserva as distâncias; as figuras do plano são transformadas noutras geometricamente iguais.
Manual de Gerenciamento de Conteúdo
Manual de Gerenciamento de Conteúdo 1 Sumário 1) O que é um Gerenciador de Conteúdo...3 2) Como o Site está Estruturado...3 3) Como Gerenciar o Conteúdo do Site...5 3.1) Adicionar Itens no Menu de Navegação...6
Manual SAGe Versão 1.2 (a partir da versão 12.08.01)
Manual SAGe Versão 1.2 (a partir da versão 12.08.01) Submissão de Relatórios Científicos Sumário Introdução... 2 Elaboração do Relatório Científico... 3 Submissão do Relatório Científico... 14 Operação
Na Figura a seguir apresento um exemplo de uma "mini-tabela" de roteamento:
Tutorial de TCP/IP - Parte 6 - Tabelas de Roteamento Por Júlio Cesar Fabris Battisti Introdução Esta é a sexta parte do Tutorial de TCP/IP. Na Parte 1 tratei dos aspectos básicos do protocolo TCP/IP. Na
Cálculo utilizando variáveis do tipo DATA
Cálculo utilizando variáveis do tipo DATA Pré requisitos: Elaboração de questionário Análise de resultados Visões: relatórios multimídia Publicação de questionário na internet O uso de variáveis do tipo
MANUAL DE UTILIZAÇÃO SISTEMA DE CADASTRO INTRANET
MANUAL DE UTILIZAÇÃO SISTEMA DE CADASTRO INTRANET I Sumário 1. Objetivo do Documento... 1 2. Início... 1 3. Cadastro de Pessoa Física... 3 3.1. Preenchimentos Obrigatórios.... 4 3.2. Acesso aos Campos
Programação de Computadores - I. Profª Beatriz Profº Israel
Programação de Computadores - I Profª Beatriz Profº Israel Ambiente de Desenvolvimento Orientação a Objetos É uma técnica de desenvolvimento de softwares que consiste em representar os elementos do mundo
APOSTILA DE EXEMPLO. (Esta é só uma reprodução parcial do conteúdo)
APOSTILA DE EXEMPLO (Esta é só uma reprodução parcial do conteúdo) 1 Índice Aula 1 - Área de trabalho e personalizando o sistema... 3 A área de trabalho... 3 Partes da área de trabalho.... 4 O Menu Iniciar:...
II SEMANA AMBIENTAL DA UNICESUMAR NORMAS PARA ENVIO DOS TRABALHOS
II SEMANA AMBIENTAL DA UNICESUMAR NORMAS PARA ENVIO DOS TRABALHOS Os trabalhos poderão ser inscritos na forma de resumo expandido (mínimo 3 e máximo 5 páginas); Serão aceitos trabalhos que sejam resultados
ANDRÉ APARECIDO DA SILVA APOSTILA BÁSICA SOBRE O POWERPOINT 2007
ANDRÉ APARECIDO DA SILVA APOSTILA BÁSICA SOBRE O POWERPOINT 2007 CURITIBA 2015 2 SUMÁRIO INTRODUÇÃO AO MICROSOFT POWERPOINT 2007... 3 JANELA PRINCIPAL... 3 1 - BOTÃO OFFICE... 4 2 - FERRAMENTAS DE ACESSO
Tutorial Baseado em video do Sr. Rafael Streda.
Tutorial Baseado em video do Sr. Rafael Streda. Tipos de Conexões Veremos nestes exemplos os Tipos de Conexões entre obejtos existentes no Active3D, o objetivo é mostrar de uma forma bem prática a aplicação
Manual do Aluno. O Moodle é um sistema que gerencia ambientes educacionais de aprendizagem que podem ser denominados como:
Manual do Aluno É com muita satisfação que apresentamos o Reunir Unopar. Ambiente Virtual de Aprendizagem Colaborativa que tem por objetivo principal ser um espaço colaborativo de construção do conhecimento
1. Realidade Virtual 1.1 Introdução 1.2 VRML 1.2.1 Histórico VRML 1.0 VRML 2.0 VRML 97 1.2.2 Aplicações
1. Realidade Virtual 1.1 Introdução A Realidade Virtual(RV) vem trazer ao uso do computador um novo paradigma de interface com o usuário. Neste paradigma, o usuário não estará mais em frente ao monitor,
LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À ORGANIZAÇÃO DE COMPUTADORES
LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À ORGANIZAÇÃO DE COMPUTADORES Prof. Dr. Daniel Caetano 2012-1 Objetivos Apresentar o funcionamento do computador Apresentar a função da memória e dos dispositivos
Controle do Arquivo Técnico
Controle do Arquivo Técnico Os documentos existentes de forma física (papel) no escritório devem ser guardados em pastas (normalmente pastas suspensas) localizadas no Arquivo Técnico. Este Arquivo pode
A figura abaixo, à direita, mostra uma apresentação gerada no MS PowerPoint. Uma apresentação desse tipo é útil para:
INTRODUÇÃO AO POWERPOINT 16.1 Objetivo Apresentar o PowerPoint, o software para montar apresentações na forma de slides da Microsoft. Isso será feito obedecendo-se a uma seqüência que demonstre como montar
Introdução aos critérios de consulta. Um critério é semelhante a uma fórmula é uma cadeia de caracteres que pode consistir em
Material retirado do site Office online. Introdução aos critérios de consulta Um critério é semelhante a uma fórmula é uma cadeia de caracteres que pode consistir em referências de campo, operadores e
Trecho retirando do Manual do esocial Versão 1.1
Trecho retirando do Manual do esocial Versão 1.1 A rotina de acesso direto ao XML do S-1000, o usuário pode encontrar na opção de cadastro de Empresas do SIP. Sempre que o usuário localizar a figura ao
Lidar com números e estatísticas não é fácil. Reunir esses números numa apresentação pode ser ainda mais complicado.
, ()! $ Lidar com números e estatísticas não é fácil. Reunir esses números numa apresentação pode ser ainda mais complicado. Uma estratégia muito utilizada para organizar visualmente informações numéricas
NORMAS PARA ELABORAÇÃO DO RESUMO EXPANDIDO PARA O V SEMINÁRIO DE INICIAÇÃO CIENTÍFICA DO CNPq/IEPA INSTRUÇÕES AOS AUTORES
NORMAS PARA ELABORAÇÃO DO RESUMO EXPANDIDO PARA O V SEMINÁRIO DE INICIAÇÃO CIENTÍFICA DO CNPq/IEPA OBJETIVOS INSTRUÇÕES AOS AUTORES O V Seminário de Iniciação Científica do CNPq/IEPA, que está sendo organizada
Manual de Publicaça o no Blog da Aça o TRIBOS nas Trilhas da Cidadania
Manual de Publicaça o no Blog da Aça o TRIBOS nas Trilhas da Cidadania Sumário Objetivos do Blog... 2 Log-in... 3 Esqueci minha senha... 4 Utilizando o Blog... 5 Encontrando seu Blog... 5 Conhecendo o
Banco de Dados BrOffice Base
Banco de Dados BrOffice Base Autor: Alessandro da Silva Almeida Disponível em: www.apostilando.com 27/02/2011 CURSO TÉCNICO EM SERVIÇO PÚBLICO Apostila de Informática Aplicada - Unidade VI Índice Apresentação...
Introdução. Servidor de Tempo (SNTP) com opção de horário de verão automático; 1 Cadastro do novo modelo de equipamento Urano Topmax SS
Urano Indústria de Balanças e Equipamentos Eletrônicos Ltda. Rua Irmão Pedro 709 Vila Rosa Canoas RS Fone: (51) 3462.8700 Fax: (51) 3477.4441 Guia de Novas Funcionalidades Urano Integra 2.3 Data: 15/04/2015
Word 1 - Introdução 1.1 - Principais recursos do word 1.2 - A janela de documento 1.3 - Tela principal
Word 1 - Introdução O Word para Windows ou NT, é um processador de textos cuja finalidade é a de nos ajudar a trabalhar de maneira mais eficiente tanto na elaboração de documentos simples, quanto naqueles
TIPOS DE REFLEXÃO Regular Difusa
Reflexão da luz TIPOS DE REFLEXÃO Regular Difusa LEIS DA REFLEXÃO RI = raio de luz incidente i normal r RR = raio de luz refletido i = ângulo de incidência (é formado entre RI e N) r = ângulo de reflexão
Manual do Painel Administrativo
Manual do Painel Administrativo versão 1.0 Autores César A Miggiolaro Marcos J Lazarin Índice Índice... 2 Figuras... 3 Inicio... 5 Funcionalidades... 7 Analytics... 9 Cidades... 9 Conteúdo... 10 Referência...
Como acessar o novo webmail da Educação? Manual do Usuário. 15/9/2009 Gerencia de Suporte, Redes e Novas Tecnologias Claudia M.S.
Como acessar o novo webmail da Educação? Manual do Usuário 15/9/2009 Gerencia de Suporte, Redes e Novas Tecnologias Claudia M.S. Tomaz IT.002 02 2/14 Como acessar o Webmail da Secretaria de Educação? Para
Gerente de Tecnologia: Ricardo Alexandre F. de Oliveira Marta Cristiane Pires M. Medeiros Mônica Bossa dos Santos Schmid WORD 2007
WORD 2007 PREFEITURA DO MUNICÍPIO DE LONDRINA SECRETARIA MUNICIPAL DE EDUCAÇÃO GERÊNCIA DE TECNOLOGIA Gerente de Tecnologia: Ricardo Alexandre F. de Oliveira Marta Cristiane Pires M. Medeiros Mônica Bossa
ATENÇÃO: * Arquivos com tamanho superior a 500 KB NÃO SERÃO ACEITOS * SOMENTE serão aceitos documentos do formato: PDF
TUTORIAL DE DIGITALIZAÇÃO DIRIGIDO AO USO DO PROCESSO ELETRÔNICO Adaptado do tutorial elaborado pelo colega MAICON FALCÃO, operador de computador da subseção judiciária de Rio Grande. Introdução Este tutorial
Mozart de Melo Alves Júnior
2000 Mozart de Melo Alves Júnior INTRODUÇÃO O Excel 7.0 é um aplicativo de planilha desenvolvido para ser usado dentro do ambiente Windows. As planilhas criadas a partir desta ferramenta poderão ser impressas,
Bem vindo ao ajuda do software QUICKFISH para criação de sites.
Bem vindo ao ajuda do software QUICKFISH para criação de sites. SUMÁRIO 1 Exemplo de site criado no software QUICKFISH...02 2 Salvando Seu Site...03 3 Publicando Seu Site...03 4 Visão inicial do Software
1.2) Na tela seguinte, o primeiro item a ser selecionado é o Unidade Acumuladora1.
MANUAL DA NOVA VERSÃO DE ARQUIVAMENTO DO CPROD Na nova versão de Arquivamento que está sendo implementada no CPROD, antes de realizarmos o Arquivamento do Processo ou Documento em si, temos que criar no
1. Instalei o DutotecCAD normalmente no meu computador mas o ícone de inicialização do DutotecCAD não aparece.
1. Instalei o DutotecCAD normalmente no meu computador mas o ícone de inicialização do DutotecCAD não aparece. Para acessar o programa através do comando na barra de prompt, basta digitar dutoteccad e
Ajuda do Sistema Aquarius.
Ajuda do Sistema Aquarius. Esta ajuda é diferenciada da maioria encontrada nos sistemas de computador do mercado. O objetivo desta ajuda é literalmente ajudar o usuário a entender e conduzir de forma clara
MICROSOFT POWERPOINT
MICROSOFT POWERPOINT CRIAÇÃO DE APRESENTAÇÕES. O QUE É O POWERPOINT? O Microsoft PowerPoint é uma aplicação que permite a criação de slides de ecrã, com cores, imagens, e objectos de outras aplicações,
Este documento foi elaborado sob a licença
1 2 Este documento foi elaborado sob a licença Atribuição - Não Comercial - Sem Trabalhos Derivados Brasil (CC BY-NC-ND 4.0) Sobre este documento, você tem o direito de: Compartilhar - reproduzir, distribuir
Sumário INTRODUÇÃO... 3. 1. Acesso ao Ambiente do Aluno... 4. 2. Ferramentas e Configurações... 5. 2.1 Ver Perfil... 5. 2.2 Modificar Perfil...
Sumário INTRODUÇÃO... 3 1. Acesso ao Ambiente do Aluno... 4 2. Ferramentas e Configurações... 5 2.1 Ver Perfil... 5 2.2 Modificar Perfil... 6 2.3 Alterar Senha... 11 2.4 Mensagens... 11 2.4.1 Mandando
ASSOCIAÇÃO CRISTÃ DE MOÇOS DO RIO GRANDE DO SUL DEPARTAMENTO DE TECNOLOGIA DA INFORMAÇÃO
MANUAL MEDIAWIKI Manual Media Wiki Página 2 Sumário O que é MediaWiki... 4 Acesso ao sistema... 5 Criação do índice principal... 7 Criação de página... 14 Bloqueio/Proteção de página... 17 Manual Media
AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS
UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIAS DA COMPUTAÇÃO BACHARELADO AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS Orientando: Oliver Mário
Personalizações do mysuite
Personalizações do mysuite 1. mysuite... 2 2. Customização de campos... 3 3. Importação de dados... 3 4. Integração de sistemas... 3 5. Personalização do Atendimento Online... 4 5.1. Imagens de online
Passa a passo para construir uma página pessoal - Parte 1
Passa a passo para construir uma página pessoal - Parte 1 Quais ferramentas são necessárias? - Editor de texto básico (sem formatações): use o Bloco de Notas (não use o MS Word e WordPad) - Navegador (browser):
Nome do Processo: Requisição Gera Múltiplos pedidos para Múltiplos Fornecedores
Desenvolvimento BM-1131 Versão 5 Release 17 Autor Sirlene Araújo Processo: Compras Nome do Processo: Requisição Gera Múltiplos pedidos para Múltiplos Fornecedores Motivação Tornar o processo de geração
