IA369 - Tópicos em Engenharia de Computação VI (Aspectos Implementacionais de Interfaces Gráficas)

 

Profa. : Wu, Shin - Ting

 

Grupo : Jorge Kawamura

Paulo Guilherme Seifer

 

Ref: Monografia - Ambiente 3D

 


Índice

Introdução

Interações 3D

Pontos de controle

Arquitetura

Referências

 


 

Introdução

Esta monografia tenta dar uma visão geral sobre o desenvolvimento do ambiente tridimensional (3D). Sendo o tema de vasto conteúdo e ainda em pesquisa, tentamos dividir alguns tópicos para dar uma visão geral sobre algumas áreas que trabalham no desenvolvimento no ambiente 3D. OS temas foram divididos da seguinte forma :

Todo o texto foi baseado nos artigos referentes aos temas acima, portanto é apresentado um resumo do artigo no qual dentro de cada tópico (artigo) foram inseridos comentários. Caso haja maior interesse nesses artigos eles estão localizados nas referências.

 


Interações 3D

Este tópico tenta mostrar, através do resumo dos três artigos, as diferentes tentativas e técnicas de interação que estão sendo aplicadas e desenvolvidas.

Rockin´ Mouse : Manipulação integral 3D no plano

Hoje existem sistemas gráficos de alta qualidade mas as técnicas de interação para manipulação com estes sistemas sofrem as limitações devido aos dispositivos de entrada existentes (precisão). Para suprir essa deficiência, técnicas de interação com esses sistemas estão sendo desenvolvidas. Algumas dessas técnicas são baseadas em componente de entrada com 3 ou mais graus de liberdade e outras dependem de acoplamentos junto ao mouse com uma variados esquema de de mapeamento de entrada 2D para controle 3D .

O modelo ideal seria aquela que possuísse múltiplos graus de liberdade para aplicações em 3D. Na tentativa de obter um modelo ideal, diversos dispositivos já foram desenvolvidos mas o mouse continua a ser um componente de entrada dominante no mundo 3D. Um dos fatores para isso é que as aplicações em 3D usualmente requerem uma quantidade substancial de interações 2D (seleção de Menu, digitação de texto, etc) e grande parte dos dispositivos 3D existentes não executam tarefas 2D tão eficiente quando comparado com o mouse.

Os projetos de dispositivos de entrada desenvolvidos hoje não adotam somente os critérios de temporização de tarefas, outra propriedades estão sendo incorporadas como :

Essas propriedades tentam melhorar o uso destes dispositivos.

Atualmente o método mais simples para o controle (troca) de movimento nos 3 eixos são as teclas modificadores ( hot keys) ou os botões do mouse. O inconveniente deste processo é a necessidade de lembrar quais teclas / botões são necessários para seleção dos eixos e saber qual a direção para movimentar o cursor. Muitas aplicações comerciais em avaliação estão adotando a idéia do Manipulador Virtual (ou "handle", ou "Controlador", ou "3D widget"). Esta solução, embora não seja apropriada, adota o uso do mouse para seleção em 2D associado com uma transformação particular.

Na busca de novos dispositivos de entrada o Rockin’ Mouse foi desenvolvido através da comparação realizada entre um mouse padrão com as tarefas de interação 3D.

Este dispositivo de entrada possui 4 graus de liberdade. Sua aparência é similar ao mouse exceto na parte inferior, possuindo em sua base uma aparência arredondado. A curva é assimétrica sobre os dois eixos, onde a curvatura do eixo z é maior que o eixo x, isto é devido ao formato do mouse regular. O Rockin’ Mouse possui plano salientado no centro da curva de base que permite que o dispositivo seja fisicamente forçado a controlar somente dois graus de liberdade mesmo percebendo 4, além de dar estabilidade e equilíbrio.

 

Nesta base curvada existe um sensor de posição projetado para permitir a inclinação sobre os eixos x e y. A inclinação é sentida, com isso podemos controlar dois graus de liberdade extras (ambiente 3D). Seu movimento é planar e possui todas as suas funções de um mouse comum.

O protótipo opera numa mesa digitalizadora, onde esta é capaz de perceber a posição no plano x-z da mesa e também os graus de inclinação do sensor sobre os eixos x e z. Um desses sensores sem fio é montado no centro do dispositivo, habilitando a posição planar e angular do dispositivo para sentido quando colocado na mesa. A mesa pode sentir o estado dos botões conectados com um sensor.

Foi realizado uma experiência que consistiu em avaliar e comparar o Rockin’ Mouse com o mouse nas tarefas de posicionamento de objetos em 3D. E verificar também, se o usuário poderia ter a capacidade de controlar movimentos em todas as 3 dimensões simultaneamente e o rendimento no tempo na realização de tarefas

Participaram dessa experiência : 3 usuários com experiência em cenas 3D com o mouse padrão e 11 usuários familiarizados com o mouse mas com experiência limitados no ambiente 3D. Os 14 participantes eram destros.

A tarefa consiste em que o participante move o objeto posicionado em canto para o dentro do objeto localizado diagonalmente no canto oposto, a cena usada está em 3D. Clicando na face frontal do objeto (com botão direito) a caixa era selecionado ativando os eixos x-y. Clicando no lado direito/esquerdo eram selecionados os eixos y-z. Clicando na parte superior/inferior eram selecionados os eixos x-z. Mantendo o botão da esquerda pressionado o mouse efetuava o movimento em 2D do objeto no plano ativo. Movendo o Rockin’ Mouse para direita/esquerda ou frente/trás na mesa o objeto se movia na direção x e direção z respectivamente. Inclinando o mouse no sentido horário / anti-horário movia o objeto para cima / para baixo na direção de y.

Antes dos testes os participantes receberam instruções/treinamento de como operar o dispositivo para cada condição ( aproximadamente 15 minutos de parte prática). E para que o teste não ficasse viciado, a cada teste os testes apareciam em diferentes posições (próximas), portanto a cada teste era necessário um planejamento de ações de movimento. Após a terceiro teste o tempo fica aproximadamente constante pois o aprendizado já foi absorvido.

As tarefas resultaram nas seguintes fases : loop aberto ou fase balística que apanha o objeto nas proximidades do objeto (movimentos em 2D no mouse e movimento 3D para o Rockin’ ) e seguida por um ou mais movimentos de loop-fechado que precisamente posiciona os objetos no alvo. A complexidade em 3D é maior que em 2D nos movimentos e ações.

Apesar da resolução limitada da inclinação, as pessoas foram capazes de completar as tarefas 30% mais rápidas com o Rockin’ mouse.

O custo cognitivo de planejamento é reduzido com a prática. O Rockin’ mouse ainda foi 40% mais rápido que o mouse.

A pessoas foram capazes de controlar 3 dimensões simultaneamente. Com isso o nível de integração foi alcançado apesar de treinamento limitado.

No final os participantes preencheram um questionário e obtivemos o seguinte resultado :

 

É um dispositivo promissor para interações integrais em 3D, no entanto há necessidade de mais trabalho (pesquisa) para : obter maior ganho; melhorar compreensão das capacidades e limitações deste; explorar diferentes controles de mapeamento visuais (navegações de cenas em 3D); novas técnicas de interação a serem desenvolvidas, principalmente para serem usadas em outras tarefas de interação e para diferentes usuários como por exemplo, canhotos.

Fato importante a ser observado, dispositivos semelhantes ao mouse são requisitos para difundir o seu uso.

 

SNAP-DRAGGING em 3 Dimensões

Snap-dragging é uma técnica utilizada inicialmente em objetos 2D mas agora está sendo estendida objetos tridimensionais. Esta técnica utiliza a combinação de três técnicas de interação 3D :

É importante ressaltar que cada técnica pode ser desenvolvida individualmente e a sua combinação acarreta numa redução do número e do grau de complexidade de comandos necessários para posicionar objetos na cena de um modo preciso, isto é, a composição de cenas é obtido em uma vista perspectiva única.

O uso do Snap-Dragging em 3D não requer outros dispositivos de entrada a não ser o mouse e o teclado, portanto essa técnica pode fazer o chaveamento de 2D para 3D ou vice versa de uma maneira rápida e simples. Como dito anteriormente o Snap-Dragging 3D é uma adaptação do Snap-Dragging 2D.

Um dos motivos para utilização dessa técnica nos editores gráficos 3D com manipulação direta é facilitar o posicionamento dos pontos de objetos nos vértices, nas arestas e nas superfícies, isto pode ser feito com a função gravidade onde o cursor é atraído na medida que este é posicionado mais ou menos próximo dos objetos em cena. Como essa técnica trabalha com 3 dimensões existem três funções de gravidade que agem ao mesmo tempo, o usuário que decidirá qual dimensão será usada. Desta forma eliminamos a troca de comandos para obter a função de gravidade desejada.

Grande parte dos sistemas de manipulação direta os objetos podem ser rotacionados (ou transladados) com a ajuda de controles em forma de dials, através da movimentação do mouse sobre o desenho, algoritmos "arcball" e similares. Como essa transformação é atualizada em tempo real, o retorno dos resultados das ações realizadas pelo usuário podem ser verificados também em tempo real, isto significa que o usuário pode manipular o objeto e verificar o que está acontecendo com ele. A edição de objetos em tempo real assemelha-se a construção de um desenho 3D com a ajuda de réguas e compassos que desenham no espaço. Para um maior controle no posicionamento seria necessário aproximações baseadas em restrições, pois a manipulação direta não oferece uma precisão no posicionamento de objetos.

Uma técnica anterior ao snap-dragging é o "skitter and jacks". Esta técnica consiste primeiramente em selecionar o objeto, em seguida indicar o eixo de rotação (através do jack) e entrar com um valor de rotação através de um menu.

O skitter é um objeto análogo à posição do cursor dentro do ambiente 3D, nela colocamos o jack e definimos a posição inicial e final da rotação. Ele assemelha-se a uma tríade de segmentos de linhas perpendiculares entre si, possui a desvantagem de se confundir a cena quando existe em um número excessivo de jacks (um para cada eixo de rotação). No snap-dragging adota-se somente um jack, ou âncora (que define 3 planos alinhados que se cruzam no centro formando um hot point, que são pequenos quadrados branco desenhados nos vértices, há também a definição de três retas de alinhamentos), que trabalha em conjunto com os objetos de alinhamento cujas interseções são calculados automaticamente, obtendo-se uma maior precisão.

Como dito anteriormente, o skitter é análogo ao cursor, portanto todas as funções relativas ao snap-dragging podem ser aplicadas a ela. Com isso podemos classificar a ordem de seleção dos objetos na seguinte seqüência : vértices, arestas, face e plano default paralelo ao plano da tela. Um outro detalhe importante é que o eixo Z do skitter será sempre perpendicular a aresta ou a face enquanto que o eixo X sempre tangenciará a aresta. Em relação ao vértice quem determinará sua posição será as faces e arestas.

Para adicionar objetos de alinhamento, o usuário deve selecionar os objetos da cena selecionados através de comandos do teclado e transformar os vértices do objeto selecionado em hot points. Realizado os passos anteriores um valor deve ser ativado no menu fazendo com que cada hot point construa um objeto de alinhamento de todos os valores ativados.

Dependendo da complexidade dos objetos a serem formados, pode haver uma confusão na tela devido a sobreposição de muitos objetos alinhados. Para melhorar a visualização foram estipulados as seguintes condições : para objetos alinhados são desenhados curva fina de cor cinza, para curvas de interseção são desenhados curvas finas de cor preta e para skitter posicionado numa interseção, objetos alinhados e hot points são desenhados linhas grossas.

Todas as transformações de snap-dragging seguem o skitter portanto são possíveis de executar: Translação (transladando por um vetor através do skitter), rotação sobre um ponto e rotação sobre um eixo (são feitas com uma âncora que serve como centro de rotação, eixo de rotação, centro de escala ou ponto de gravidade). A rotação é determinada sobre a âncora e a posição do skitter inicial e final.

A operação de escala de um objeto selecionado é feito através de uma escala na qual é determinado pela distância entre a âncora e a posição inicial do skitter e entre a âncora e a posição final do skitter.

Apesar do snap-dragging tenha conseguido de certa forma solucionar o problema das transformações precisas, o problema de definição de pontos isolados no espaço pois as construçoes se restringem a pontos do objetos já inseridos ou pontos de interseção entre objetos de alinhamentos. Outro ponto a ser visto é o conhecimento que o usuário precisa ter sobre geometria descritiva, para poder ser capaz de manipular os objetos no espaço.

 

Técnicas de manipulação direta para Objetos 3D usando dispositivos locadores 2D

As técnicas de dispositivos de entrada 3D tem permanecido um problema na computação gráfica devido a natureza 2D de nosso monitor e mídias interativas. A aproximação mais bem sucedida desses dispositivos são baseadas em dispositivos especializados (específicos).

Uma técnica desejável seria manipular diretamente a projeção perspectiva de um objeto ao longo dos três eixos de maneira natural. Mas tais manipulações naturais não tem sido estendido para 3D devido ao problema de expressar o componente Z somente com um dispositivo 2D

Para especificar um ponto no espaço 3D nós usamos uma técnica chamada tríade Mouse. Esta técnica consiste em usar um dispositivo locador 2D onde ele manipula a posição 3D do tríade para que ele se comporte como um mouse 3D. Existem duas facetas para este problema : retorno apropriado para a locação 3D (estabelecer uma estrutura de referência) e mapeamento do movimento do mouse 2D para mudar na posição do cursor em 3D.

Para mapear os movimentos de um locador 2D para um movimento 3D nós usamos a projeção 2D de um eixo tríade com vetor locador 2D (Dx,Dy) sendo mapeado nesta projeção. Esta projeção dá nos o vetor tríade : (Xx,Xy) , (Yx,Yy) e (Zx,Zy).

A correlação entre a mudança do vetor com um dos vetores tríades é o coseno do ângulo entre eles. A direção do movimento 3D é :

D= [ cos x, cos y, cos z ]

onde cos A é igual ao coseno do ângulo entre o vetor tríade A e o vetor mudança. A nova posição 3D corrente do cursor é :

C=C+ p . D / |D|

onde p é um fator de precisão que controla a relação entre o movimento do locador e o movimento 3D atual.

Esta aproximação nos leva a alguns problemas como um pequeno movimento no eixo Z (indesejável) quando movimentamos o eixo Y. Para aliviar este problema foi utilizado uma técnica na qual é permitido movimentos somente no eixo cujo coseno tenha a maior valor absoluto, no entanto isso acarreta no particionamento do espaço 2D em 6 zonas. O limite destas zonas estende-se na bissetriz dos ângulos entre os vetores tríades.

A escolha dos eixos para produzir o vetor tríade é um problema pois existem muitas possibilidades de escolha. A mais simples é a coordenada normal centrada na origem das coordenadas reais. Mas essa aproximação é efetiva somente, para projeções ortogonais. Em projeções perspectivas os ângulos relativos dos eixos de projeção mudam com a locação do cursor. Uma tentativa intermediária era usar o eixo projetado do centro do cubo formado. A técnica mais exata é projetar os eixos do cursor tríade nele mesmo. Isto requer que a projeção seja recomputada para cada movimento do mouse mas de resultados mais satisfatórios e comporte adequadamente nos IBM/PC com o coprocessador matemático.

Na translação (necessário 2 pontos), rotação (necessário 3 pontos) e escalonamento (necessário 3 pontos) em 3D, exploramos a geometria dos objetos atualmente sendo manipulados, mantendo uma ou mais dimensões constantes enquanto manipulamos as outras.

Existe certos problemas que surgem ao mudarmos a escala de um objeto. Estes são todos causados pelo fato que o escalonamento não é invariante sobre a rotação.

No estudo da eficiência de uma técnica, nós definimos o controle de precisão de estar num valor entre zero (muito baixo) e um (muito alto). Para computar o controle de precisão deve-se observar na vista do eixo V, na qual está a direção de vista, e um movimento de eixo M. O controle de precisão começa 1 - (V - M) onde V - M é o produto ponto de vetores normais V e M. É produzido 1 quando V e M são perpendiculares e 0 quando eles são paralelos. O efeito da baixa precisão de controle é que produz o movimento do pequeno locador em grandes movimentos ao longo de M na qual reduz o controle que o usuário tem sobre p movimento.

Com o mouse tríade, cada eixo de coordenada começa um movimento de eixo. Uma rápida inspeção dos eixos tríades mostra que o controle de precisão de pelo menos um dos eixos sempre será significantemente menos que um. De fato se o controle de precisão de um dos eixos aproxima-se de 1 então o controle de precisão de pelo menos um outro aproximará de 0. Contanto que o controle de precisão ao longo de um dado eixo não fique tão perto do zero o mouse tríade pode compensar para a precisão de controle pelo movimento ao longo do eixo um quantia equivalente ao movimento do mouse atual. Isto é possível porque estamos usando o movimento em vez da posição absoluta do locador 2D. O pior controle de precisão por um dado plano contudo é V*N, onde N é o vetor normal para o plano.

As técnicas não são igualmente aplicáveis em todas situações, mas formam uma base para manipulação direta de objetos em um espaço tridimensional.

 

Os três artigos possuem um ponto em comum, manipular objetos em 3D através de diferentes meios, no primeiro artigo essa manipulação é feita por hardware, através de um mouse 3D; no segundo artigo essa manipulação é feita por software, todo o tratamento e manipulação dos objetos 3D é realizado via software; no terceiro artigo o tratamento e manipulação dos objetos 3D é realizado via mouse e software, isto é, através de software os dados obtidos via mouse são interpretados através de funções como componentes 3D.

Foi feito uma pesquisa de outros dispositivos de entrada que trabalham com a filosofia 3D. Foram encontrados o Magellan da LogiCad3D e o IntelliMouse da Microsoft. Comparando os três dispositivos eles possuem o princípio de funcionamento bem diferentes. Houve uma tentativa de se verificar o Trackball mas não foi obtido sucesso devido a problemas com a página da Logitech e Microsoft referentes a esses produto.

 


 Pontos de controle

Os trabalhos a seguir mostram um pouco das dificuldades encontradas pelos pesquisadores e desenvolvedores no tratamento de elementos em 3D no controle de pontos e demonstram seus esforços para minimizar seu trabalho.

Controle de câmera Through-the-Lens

O problema a que o artigo se propõe a tratar é o problema do excesso de formas de parâmetrização para o controle de câmera.

Tais parâmetros, 3 para posição, 3 para orientação, 1 foco e, muitas vezes, ângulo de visão e profundidade são passados de maneira direta, explícita, tornando o trabalho difícil para o usuário, Até porque, se o dispositivo de entrada for 2D, a passagem de parâmetros pode se tornar ainda mais complicada.

A proposta do artigo é a da passagem de parâmetros de forma indireta, dando ao usuário um certo grau de liberdade no que diz respeito a esses parâmetros. Propõe ainda a manipulação direta da imagem, proporcionando uma interação maior com o usuário.

Partindo de um ponto p, ponto no espaço de cena, deseja-se encontrar encontrar os parâmetros q que permitam que esse ponto seja projetado no centro da tela.

Sendo m o ponto da imagem correspondente, temos que:

onde,

,

h é a função que converte as coordenadas homogêneas para coordenadas equivalente em uma imagem 2D e V representa as transformações de visualização.

O problema do sistema descrito acima é que trata-se de um sistema não-linear, o que implica que a inversa não é garantida, sendo que sua solução pode não existir, ou ainda, não ser única.

Para solucionar o problema, a proposta é que se siga os seguintes passos:

e o resultado é uma Equação Diferencial Ordinária de primeira ordem:

O valor inicial q0 pode ser determinado de três formas:

onde kc é uma constante e mc é a posição do cursor na imagem.

A realimentação da posição é feita através da velocidade (apesar de normalmente termos a informação da posição também). Isso é feito para melhorar a precisão na especificação da velocidade de m.

 

Posicionamento de Superfícies Curvas sem Penetração

O problema proposto pelo artigo é o de posicionamento de superfícies curvas sem penetração. Esse problema consiste no fato que a detecção de colisão entre corpos, tipicamente curvas, não é algo trivial, mas sim algo dispendioso e que normalmente implica em complicações físicas. Pode-se tomar como exemplo configurações como um copo com cubos de gelo, pirâmides de cartas de baralhos etc., onde além das colisões que devem ser detectadas, existem os problemas físicos envolvidos nos problemas.

O foco desse trabalho é conseguir uma configuração estável de alguns estados arbitrários (como os citados acima), criando mudanças que são intuitivas e controláveis, mas sem muito esforço para obter grande precisão física. Nesse aspecto físico, algumas considerações podem ser feitas, como:

Nessa proposta, o corpo é descrito por um conjunto de triângulos organizados em hierarquias de caixas limitantes, particionando o objeto. Essa hierarquia é armazenada em uma estrutura de árvore, sendo cada triângulo um nó da árvore.

Ocorrem duas formas de detecção nesse sistema:

A detecção é feita percorrendo a estrutura da árvore da caixa limitante. Os nós são comparados 2 a 2 em profundidade. Podem ocorrer três tipos de colisão:

Quando ocorre uma colisão são guardados o ponto de colisão e os ponteiros dos dois triângulos.

Podem se definir ainda pontos que servem para prevenir a penetração, que são chamados de pontos de interface e que consistem de um par de pontos sobre dois corpos.

Pontos de interface podem ser de dois tipos:

Como o foco desse trabalho é atingir uma configuração estável, essa configuração é atingida pela aplicação de pseudo-forças que causam mudança incremental na posição do corpo ativo. As pseudo-forças, pelo fato do sistema ser discreto, não são aplicadas no corpo em movimento, mas são aplicadas diretamente para atualizar a posição do objeto. Isso as diferencia das forças físicas.

 

Controle de parâmetros

Dentro do foco do controle de parâmetros em uma cena 3D, um dos problemas mais interessantes é o do controle de deformação de um objeto. O problema vem do fato (como na maioria dos casos) que há um número excessivo de parâmetros para se manipular para gerar a deformação, basta lembrar que estamos lidando não só com o posicionamento, mas também com a geometria do objeto.

Pensando em minimizar esse problema, técnicas para manipulação direta do objeto foram desenvolvidas. A grande vantagem da manipulação direta nesse tipo de problema vem do fato que o usuário não é obrigado a trabalhar com o número excessivo de parâmetros mas, em contrapartida, alguns inconvenientes surgem, muitas vezes devido à dificuldade imposta pelo sistema proposto.

A primeira idéia proposta para manipulação direta de um objeto com o objetivo de deformação (que pode ser apontada como base para a idéia desse artigo) foi proposta por Sederberg em 1986. Ela consiste na inserção do objeto em uma treliça de controle (tipicamente um paralelepípedo). Feita a inserção, é definida uma função que relaciona os pontos de controle e o objeto. A manipulação é feita manipulando diretamente os pontos da treliça.

Apesar de aparentemente a técnica ser consideravelmente mais simples que a passagem de parâmetros direta para a deformação do objeto, ela apresentava vários problemas, como dificuldade para encontrar a forma exata desejada, ou sobreposição dos pontos de controle do objeto (no caso de haver vários controles) e ainda ser difícil a utilização de uma treliça de outra forma.

Pensando nesse problema, Hughes e Kaufman propuseram em 1992 uma melhoria significativa para o sistema: o usuário seleciona um ponto do objeto e o move para o ponto em que ele deve estar no fim da deformação.

A técnica foco desse trabalho usa a mesma filosofia de manipulação indireta de Sederberg. O princípio básico da proposta (Coquillart, Lazarus e Jancene) consiste do seguinte:

A deformação é baseada na interpolação da distância do ponto mais próximo de P em R, entre dois cortes Rin e Rout.

Essa curva é denominada wire, e por definição é uma curva que, associada a um objeto, provoca sua deformação, caso a mesma seja deformada.

Uma vez definido o wire, é então definida a função de atenuação:

,

onde R(p) é ponto de R mais próximo de P.

Uma vez manipulado W, segue-se o seguinte algoritmo para determinação da deformação:

Dessa forma podem se determinar os novos pontos de deformação do objeto, gerando assim o objeto deformado.

 

Arquitetura

Os dois trabalhos a seguir tem a proposta de oferecer ferramentas de trabalho de alto nível para o desenvolvimento de sistemas em 3D.

Arquitetura de uma interface 3D extensível

O foco desse primeiro trabalho é o de desenvolver objetos através de primitivas 3D e restrições aplicadas a estas primitivas usando uma linguagem visual. Os objetivos principais dessa ferramenta são:

Buscando conseguir as características acima citadas, a filosofia de trabalho escolhida para o desenvolvimento dessa ferramenta foi a filosofia de orientação a objetos. Cada objeto é uma instanciação de uma classe (que no caso é uma abstração do comportamento e da geometria de uma primitiva), normalmente uma primitiva. A propriedades de uma primitiva constituem os campos da classe.

Seguindo o princípio de POO, novas classes podem ser criadas a partir do encapsulamento de coleções complexas de primitivas e restrições.

Cada primitiva possui um conjunto de propriedades que a define de forma única. A criação de um objeto implica no relacionamento das propriedades de uma primitiva com outra primitiva. Este relacionamento é chamado de link, que são criados através de uma interface visual.

As classes contém variáveis chamadas Slots, que servem para estabelecer restrições entre primitivas. Eles podem ser manipulados através dos métodos Inquiry e Assignment. É necessário que, durante as interações com o usuário para modificação de um slot, as restrições estabelecidas por outros slots sejam preservadas e quem especifica como esse processo será realizado são as Técnicas de Interação.

Um bom exemplo de como o uso de uma ferramenta de interação gráfica pode simplicar o trabalho na criação de objetos 3D (e expandir o seu uso aos não programadores) pode ser dado através do processo de resolução de restrições:

Dessa maneira fica claro que a operação se torna muito mais simples através desse processo de interação com o usuário, ao invés de restringí-lo a programadores usando apenas comandos pré definidos.

Outros dois métodos usados para o tratamento de restrições são Establish, para estabelecer as restrições e Resolution, que resolve os slots e atualiza a representação gráfica do objeto.

As primitivas básicas oferecidas pelo sistema são:

 

São definidos também três tipo de encapsulamento:

 

An Object-Oriented 3d Graphics Toolkit (Open Inventor)

Ao contrário do item anterior, o foco do Open Inventor é a criação da cena 3d.

O Open Inventor foi desenvolvido como resposta a uma necessidade de desenvolvedores e pesquisadores da área de computação gráfica. Desenvolver cenas gráficas a partir de linguagens de baixo nível normalmente é uma tarefa tediosa e acaba implicando na repetição de tarefas devido ao fato do desenvolvedor ter de se preocupar também com detalhes de criação não muito relevantes para o conjunto do trabalho, mas que deve ser executado pelo fato de ser comum a ausência de um elemento pronto que represente essa tarefa.

Sob essa ótica, o Open Inventor foi desenvolvido sob o OpenGL, que consiste de uma ferramenta de baixo nível para o desenvolvimento de sistemas gráficos 2d ou 3d. Além disso, foi desenvolvido sob C++, para poder usar seu suporte à orientação a objetos e sua característica de expansibilidade.

Como uma ferramenta de alto nível, o Inventor deve suportar as necessidades comuns de desenvolvedores de ambientes gráficos. Como isso nem sempre é plenamente satisfeito, o Inventor também deve permitir ao desenvolvedor expandir suas classes, tornando-o flexível e adequável às necessidades do desenvolvedor.

O fundamento do Inventor é a Scene Database, a base de dados que armazena uma representação da cena 3d. Essa representação é feita através de um grafo, normalmente acíclico e direcionado.

Cada elemento da Scene Database, ou desse grafo, é um node. Dessa maneira, um node pode representar desde uma forma geométrica (shape node), como uma propriedade (property node).

Ações também são objetos. A aplicação de uma ação a uma determinada cena normalmente implica nessa ação percorrendo todo o grafo em profundidade e da esquerda para a direita. Esse comportamento pode ser especificado pelo próprio node, impondo à ação um determinado modo de travessia do subgrafo subseqüente. Determinados nodes, como o separator node, também tem a propriedade de gravar o estado atual do grafo, restaurando-o após a passagem da ação, isso é muito desejável quando ocorrem várias instanciações de um mesmo objeto, impedindo que a alteração de um deles implique em alterações nos outros.

O Inventor oferece uma série de sensores para o desenvolvedor, como data sensor, que atuam quando ocorre uma mudança na base de dados da cena, e o timer sensor, que atua em determinados intervalos de tempo. Esse tipo de ferramenta fornece ao desenvolvedor recursos que permitem o trabalho, por exemplo, em animação, além de dar um maior controle sobre o que ocorre na cena.

Como um ferramenta interativa, o Inventor também oferece o tratamento de eventos. Um evento do sistema de janela é gerado como resultado de alguma ação usuário e é passado para a instância da área de renderização que corresponde à janela em que ocorreu o evento. Caso o objeto não trate o evento, ele é distribuído pelos nodes para o caso de algum deles tratá-lo de maneira específica.

Dado o fato de que muitas características de um determinado elemento de cena se repetem, como textura, material etc. o Inventor permite que essas características sejam reunidas, por exemplo, em um subgrafo, e esse subgrafo constitui um Node Kit.

Procurando preservar a característica de expansibilidade proposta para o sistema, que nem sempre é alcançada, o Inventor também conta com um sistema de callback, que proporciona uma rápida prototipação do novo sistema desenvolvido. Um exemplo desse serviço é o Callback node, que permite a chamada de uma função determinada pelo desenvolvedor quando um determinado node é percorrido, permitindo assim que um comportamento fora do padrão possa ocorrer. Da mesma maneira, CallbackAction, permite que uma determinada ação criada pelo desenvolvedor seja executada pelo sistema.

 


Referências

R. Balakrishnan, T. Baudel, G. Kurtenbach e G. Fitzmaurice, The Rockin' Mouse: Integral 3D Manipulation on a Plane

Gregory M. Nielson and Dan R. Olsen, Direct manipulation techniques for 3D objects using 2D locator devices, Proceedings of the 1986 workshop on Interactive 3D graphics (October 23 - 24, 1986, Chapel Hill, NC USA) pp. 175 - 182.

Eric A. Bier, Snap-Dragging in Three Dimensions, 1990, pp. 193 - 204.

Logicad3D, www.logicad3d.com/products

Microsoft, www.microsoft.com/products/hardware

 

Michael Gleicher e Andrew Witkin. Through-the-Lens Camera Control. Computer Graphics, 1992, pp. 331 - 340.

John M. Snyder. An Interactive Tool for Placing Curved Surfaces without Interpenetration. Computer Graphics, 1995, pp. 209 - 218.

Karan Singh e Eugene Fiume. Wires: A Geometric Deformation Technique. Computer Graphics, 1998, pp. 405 - 414.

 

Paul S. Strauss e Rick Carey. An Object-Oriented 3D Graphics Toolkit. 1992, pp. 341 - 347.

Stevens, M.P., Zeleznik, R.C., Hughes, J.F. An Architecture for an Extensible 3D Interface Toolkit. Proceedings of UIST '94, ACM SIGGRAPH, 1994.

Silicon Graphics, www.sgi.com