Apontamentos de Computação Gráfica



Documentos relacionados
Projeções e Visualização

"SISTEMAS DE COTAGEM"

4 Experimentos Computacionais

UNESP DESENHO TÉCNICO: Fundamentos Teóricos e Introdução ao CAD. Parte 3/5: Prof. Víctor O. Gamarra Rosado

Pipeline de Visualização Câmara Virtual

2º Exame Computação Gráfica

O Problema da Projecção. Antonio L. Bajuelos Departamento de Matemática Universidade de Aveiro

Eletromagnetismo: imãs, bobinas e campo magnético

ponto P terá as projecções P 1 e P 2. E o eixo X passa para X. Vamos ver o que acontece no plano do

ÓPTICA GEOMÉTRICA. Lista de Problemas

Actividade 1 Uma direcção, dois sentidos...

Forma de Captura de Imagens Digitais:

Ferramentas Web, Web 2.0 e Software Livre em EVT

1. Criar uma nova apresentação

Catálogo Nacional de Compras Públicas. Manual de Fornecedores

R O B Ó T I C A. Sensor Smart. Ultrassom. Versão Hardware: 1.0 Versão Firmware: 1.0 REVISÃO

Imagem e Gráficos. vetorial ou raster?

COMPUTAÇÃO GRÁFICA E ESTEREOSCOPIA. Prof. Nilton Costa Junior Prof. Robson Nunes da Silva

Capítulo 5: Aplicações da Derivada

DEFIJI Semestre :07:19 1 INTRODUÇÃO

Apontamentos de Computação Gráfica

SOLID EDGE ST3 TUTORIAL 2 CRIANDO UM DESENHO NO AMBIENTE DRAFT

EXERCÍCIO - ROMA : Modelar Capitel de uma Coluna Clássica

Introdução ao CoolEdit c : programa de edição de som digital

Transformações 3D. Soraia Raupp Musse

2 Texturas com Relevo e Equações de Pré Warping

Visão Artificial Para a Indústria. Manual do Utilizador

Este tutorial tem por objectivo explicar como trabalhar com o Microsoft Office PowerPoint.

Conceito de Tensão. Índice

Criar um formulário do tipo Diálogo modal ; Alterar a cor de fundo de um formulário; Inserir botões de comando e caixas de texto;

TÉCNICAS DE CAD PARA ENGENHARIA CIVIL AULA Visualização do Sistema de Coordenadas Corrente

ESTEREOSCOPIA INTRODUÇÃO. Conversão de um par de imagens (a)-(b) em um mapa de profundidade (c)

Tecnologias IXUS 210. Ecrã Táctil LCD PureColor II

PREPARAÇÃO DE BASES EM SIG

Manual de Utilizador. Caderno. Recursos da Unidade Curricular. Gabinete de Ensino à Distância do IPP.

Projeções: leitura recomendada. Aulas 3, 4 e 10 da apostila Telecurso 2000

Com este tutorial, temos por objetivo determinar a distância entre duas localidades.

Manual Web.Newhotel Configuração NewHotel

Agrupamento de Escolas General Humberto Delgado Sede na Escola Secundária/3 José Cardoso Pires Santo António dos Cavaleiros

Folha de Cálculo TECNOLOGIAS DA T IINF CO RM 1 A 0 ÇÃO E COMUNICAÇÃO TIC 10

Manual de operação TRUCK LASER EDIÇÃO 2004 MOP 0504

Expansão de Imagem #2

Que imagens têm ou não têm simetria?

Óptica Geométrica. Universidade do Estado do Rio Grande do Norte. Dr. Edalmy Oliveira de Almeida

Imagiologia de raios X planar

1º Teste Computação Gráfica

The Graphics Pipeline

No manual da webcam, ele descobriu que seu sensor de imagem tem dimensão total útil de 2

LASERTECK LTA450 MANUAL DE USO

EXPERIMENTO N o 6 LENTES CONVERGENTES INTRODUÇÃO

Compositor de Impressão do QGIS

Eletricidade e Magnetismo - Lista de Exercícios I CEFET-BA / UE - VITÓRIA DA CONQUISTA COORDENAÇÃO DE ENGENHARIA ELÉTRICA

SPOT BATTERY EXCHANGER

LOGÓTIPO - VERSÕES A CORES. LOGÓTIPO O logótipo do turismo de Portugal foi criado para expressar o nosso espírito e modo de ser.

Instituto Superior Técnico Licenciatura em Engenharia Informática e de Computadores. Projecto de. Arquitectura de Computadores.

Gráficos estatísticos: histograma. Série Software ferramenta

Experimento 2 Gerador de funções e osciloscópio

Elementos de Engenharia Civil 2007/2008. Enunciados dos problemas *

Optimização de um Mundo Virtual

Especificação Operacional.

Centro de Competência Entre Mar e Serra. Guia

Ferramentas Web, Web 2.0 e Software Livre em EVT

Este controlo tem de estar ligado a um campo, senão deve-se utilizar outro tipo de controlo.

Parceiro Sage my.sage.pt

Agrupamento de Escolas Anselmo de Andrade Avaliação Sumativa - Ciências Físico - Químicas 11.º Ano - Ano Lectivo 09/10

Interbits SuperPro Web Física XIII Paulo Bahiense, Naldo, Wilson e Ausgusto

Autodesk Inventor 7. Tutorial de Modelamento 3D Básico. Modelamento de uma Polia. Autor: Cristiano Nogueira Silva

PERSPECTIVA LINEAR DEFINIÇÕES E TEOREMAS

GDC I AULA TEÓRICA 09

TÉCNICAS DE CAD PARA ENGENHARIA CIVIL AULA 9

Computação Gráfica. 5385: Licenciatura em Engenharia Informática. Cap. 3 Janelas e Visores. Janelas e Visores

FÍSICA LISTA 3 LENTES E ÓPTICA DA VISÃO LENTES

Instituto Superior de Engenharia do Porto Departamento de Engenharia Electrotécnica. Licenciatura em Engenharia Electrotécnica e de Computadores

Ferramenta para detecção de fadiga em motoristas baseada no monitoramento dos olhos

NBR 8196 (Ago 1992) Conceito Escala é a relação entre as medidas do desenho de um objeto e seu tamanho real:

AULA 2 Planos, Vistas e Temas

Desenho de máquinas. Aula 3

Apostila de Física 39 Lentes Esféricas

08/12/2014 APLICAÇÕES DE ESPELHOS ESFERICOS TEORIA INTRODUÇÃO. Departamento de Física, Campus de Ji-Paraná Semestre2014-2

PROJETISTA E DESIGN 3D

PrinciPais FUnciOnaLiDaDEs DO robô

Localização do termostato 14 Posicionamento e instalação do sensor 14. Instalação eléctrica normal 15 Montagem do termostato na caixa de parede 16

UNIVERSIDADE FEDERAL DO RIO DE JANEIRO ESCOLA DE BELAS ARTES SISTEMA GEOMÉTRICO DE REPRESENTAÇÃO I PROF. CRISTINA GRAFANASSI TRANJAN

Sistemas de coordenadas e tempo. 1 Sistema de coordenadas horizontal local

FERRAMENTAS DA QUALIDADE

JURINFOR JURIGEST Facturação e Mapas

Curvas de nível homotópicas a um ponto

4. Tangentes e normais; orientabilidade

Classificação da imagem (ou reconhecimento de padrões): objectivos Métodos de reconhecimento de padrões

Observações. Referência Título / Campo de Aplicação Emissor Data de adoção

Teste de Avaliação 3 B - 08/02/2013

Introdução ao Controlo Numérico Computorizado I Conceitos Gerais

Actividade 2 Intensidade da luz

CRIAÇÃO DE SITES (AULA 9)

Cálculo em Computadores trajectórias 1. Trajectórias Planas. 1 Trajectórias. 4.3 exercícios Coordenadas polares 5

Manual do KCM Tablet. Jörg Ehrichs Tradução: Marcus Gama Tradução: André Marcelo Alvarenga

Transcrição:

Apontamentos de Computação Gráfica Capítulo 8 - Visualização 3D Prof. João Beleza Sousa Prof. Arnaldo Abrantes LEIC/DEETC/ISEL Novembro de 2008

Introdução Projecções Especificação da Visualização (View) Modelo de Visualização Java3D Configurar uma Vista Java3D O Modo Compatível Configuração da Vista em SimpleUniverse Criar a Sua Própria Vista Picking Head Tracking Resumo

Objectivos Compreender o conceito de vista no processo de renderização 3D. Identificar as projecções paralela e de perspectiva. Especificar uma matriz de visualização (viewing). Especificar uma matriz de projecção. Aplicar o modelo de visualização standard do Java3D. Aplicar o modelo de visualização compatível do Java3D. Usar picking numa cena 3D. Compreender head-tracking nos modelos de visualização. Usar dispositivos de input como sensores e head-tracking em Java3D. Usar avatar in SimpleUniverse.

Introdução

Introdução Depois de construído um modelo 3D do mundo virtual, o processo de visualização cria (renderiza) imagens do mundo virtual correspondentes à visualização a partir de um determinado ponto de vista (view). A configuração geométrica que define o mapeamento da cena virtual 3D numa imagem 2D é uma vista (view). Uma vista pode ser encarada como uma câmara digital. A vista define o modo como o mundo virtual é visualizado. As views dos sistemas gráficos modernos podem ser bastante sofisticadas e podem ter um grande número de parâmetros de configuração.

Introdução O viewpoint (ponto de vista) de uma vista está localizado no mundo virtual e vê o mundo virtual com uma direcção e orientação específicas. Uma vista é caracterizada pelo tipo de projecção 3D para 2D, o campo de vista, os planos de cliping front e back, o tamanho do plate, etc. O modelo da vista pode ser o de uma câmara estática, ou pode ser um modelo dinâmico se, por exemplo, o posicionamento da vista, se for alterando ao longo do tempo. A maioria das API s low-level suporta apenas um modelo de visualização baseado em câmara estática.

Introdução Tipicamente o modelo de visualização baseado em câmara é especificado por dois tipos de parâmetros: as propriedades da projecção e o posicionamento da câmara. Com o modelo de visualização estático é normalmente difícil de programar comportamentos dinâmicos. Caso, por exemplo, o sistema de visualização seja uma câmara montada na cabeça associada a um sistema de tracking, a movimentação da câmara resulta na alteração contínua das propriedades de visualização.

Introdução Em Java3D o sistema de visualização é muito versátil. Suporta todas as possibilidades tradicionais dos modelos de visualização estáticos assim como a possibilidade de alterações dinâmicas do modelo de visualização. Os efeitos das alterações no modelo de visualização podem ser incluidos automaticamente através de objectos separados sem alterar explicitamente a estrutura de visualização. O mesmo grafo de cena pode ser usado com uma grande variedade de opções de visualização.

Introdução A selecção de objectos na cena 3D a partir da projecção 2D, designada por picking, é, de certa forma, o processo inverso do processo de visualização. Dada a selecção de um pixel na imagem 2D resultante da renderização da cena 3D pretende-se saber qual o objecto da cena 3D seleccionado. O picking possibilita a interacção coma cena 3D a partir da imagem 2D renderizada. Exemplo: seleccionar e mover ou rodar objectos com o mouse. Java3D suporta picking a vários níveis.

Projecções

Projecções A visualização da cena 3D com uma imagem 2D é conseguida com uma transformação chamada projecção. Há dois tipos principais de projecções: a paralela e a de perspectiva. Em ambos os casos há um plano de visualização (view plane) colocado no mundo virtual. A projecção mapeia os pontos do mundo virtual em pontos do view plane. De forma a tornar o processo de visualização exequível são efectuadas algumas restrições, tanto no espaço virtual mapeado como no plano de mapeamento.

Projecções A projecção é efectuada numa área finita do plano de projecção. Normalmente uma área rectangular, chamada view plate. Os pontos do mundo virtual cuja projecção fica fora do view plate não são projectados. Os pontos que estão muito perto ou muito longe do plano de visualização também não são projectados. Estas restrições fazem com que apenas um volume finito do espaço virtual 3D seja projectado e consequentemente visualizado. Este volume chama-se view frustum.

Projecções A projecção paralela projecta os pontos 3D no plano de visualização segundo linhas paralelas, com uma direcção fixa. Quando as linhas de projecção são perpendiculares ao plano de visualização a projecção chama-se ortográfica. As projecções ortográficas segundo os 3 eixos de coordenadas são muito usadas em engenharia e arquitectura e chamam-se planta, alçado frontal e alçado lateral. As fórmulas de projecção paralela são relativamente simples.

Projecções Supondo que o plano de visualização é o plano xy e que a projecção é efectuada segundo a direcção do eixo dos z s, então um ponto 3D (x, y, z) é mapeado no ponto 2D (x, y). Matricialmente: x y z w = 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 x y z w

Projecções Na realidade, para efeitos da determinação das partes escondidas dos objectos, é desejável manter a informação da coordenada z. Assim a matriz de transformação da projecção paralela vem igual à matriz identidade: 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1

Projecções A projecção de perspectiva projecta os pontos 3D no plano de visualização segundo linhas que convergem num único ponto. O ponto de convergência chama-se viewer ou posição do olho. Os objectos mais próximos do observador (posição do olho) são projectados com maiores dimensões do que os mais longínquos. Este tipo de projecção é semelhante à projecção que ocorre no olho humano e nas máquina fotográficas. As fórmulas de projecção de perspectiva são mais complexas do que as da projecção paralela.

Projecções Supondo que o plano de visualização é o plano xy e que o olho está situado em (0, 0, d) e olha na direcção do eixo dos z s no sentido dos z s negativos. Um ponto (x, y, z) no espaço 3D é projectado no ponto (x, y, 0) do plano de visualização. Relativamente à coordenada y verifica-se que: y d = y d + ( z) ou seja, y = y 1 + z/d

Projecções O mesmo se passa em relação á coordenada x: x = x 1 + z/d As operações de cálculo de x e y podem ser efectuadas em coordenadas homogéneas pela transformação: x y z w = 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1/d 1 x y z w

Projecções O resultado desta transformação sobre o ponto (x, y, z, 1) é: x y z w = 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1/d 1 x y z 1 = x y 0 1 z/d E, dado que a transformação foi efectuada em coordenadas homogéneas, as coordenadas (x, y, z ) no espaço 3D são (dividir por w ): (x = x 1 z/d, y = y 1 z/d, z = 0)

Projecções Tal como no caso da projecção paralela, para efeitos da determinação das partes escondidas dos objectos, é desejável manter a informação da coordenada z. Assim a matriz de transformação vem: 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1/d 1

Projecções Em coordenadas homogéneas as projecções paralela e de perspectiva são tratadas de forma uniforme como as transformações afins. Se d tender para infinito, como lim ( 1/d) = 0 d, a projecção de perspectiva tende para a projecção paralela. A projecção paralela é na verdade uma projecção de perspectiva em que a posição do olho está no infinito. As coordenadas do view point da projecção de perspectiva são (0, 0, d) ou (0, 0, 1, 1/d) em coordenadas homogéneas. Quando d tende para infinito o view point tende para (0, 0, 1, 0), um ponto no infinito em coordenadas homogéneas.

Especificação da Visualização (View)

Especificação da Visualização (View) A especificação completa de uma view pode ser dividida em duas partes: a definição do volume de visualização e o posicionamento do olho. Se uma view for especificada como uma câmara (máquina fotográfica), então o volume de visualização é determinado pelas características da câmara, como a distância focal e o tamanho do filme, e o posicionamento corresponde à posição da câmara. A definição do volume de visualização é normalmente representado por uma matriz de projecção (projection matrix). O posicionamento do olho é normalmente representado por uma matriz de visualização (viewing matrix).

Especificação da Visualização (View) Os parâmetros seguintes dizem respeito ao volume de visualização (matriz de projecção): Projecção Paralela ou de perspectiva. View Plate A janela para renderização. Normalmente é uma janela rectangular. Numa máquina fotográfica analógica o view plate corresponde ao film frame. Campo de Visão (Field of View - fov) O ângulo horizontal formado pelos planos esquerdo e direito do frustum. Embora não seja frequente, os campos de visão vertical e diagonal podem ser definidos de forma semelhante.

Especificação da Visualização (View) Parâmetros de especificação da matriz de projecção (continuação): Distância Focal a distância entre o view plate e o view point (entre o plano de visualização e a posição do olho). Aspect Ratio O quociente entre a largura e a altura do view plate. Front/Near Clip Plane O plano da frente do frustum. Back/Far Clip Plane O plano de trás do frustum.

Especificação da Visualização (View) Nem todos estes parâmetros são independentes. Por exemplo, a distância focal, o campo de visão horizontal e a largura do view plate estão relacionados pela fórmula: tan fov 2 = width/2 f Uma máquina fotográfica de 35 mm com uma lente de 50 mm tem um fotograma de 36 mm por 24 mm, um campo de visão de 40 o, e um aspect ratio de 1,5.

Especificação da Visualização (View) Numa máquina fotográfica real o filme é colocado por de trás da lente o que faz com que a imagem projectada fique invertida (tanto vertical como horizontalmente). No entanto em computação gráfica o plano de visualização é colocado em frete ao olho pelo que a imagem projectada não fica invertida.

Especificação da Visualização (View) A matriz de projecção é definida no sistema de coordenadas do olho. O olho fica colocado na origem, olha no sentido dos z s negativos e está orientado verticalmente no sentido do eixo dos y s. A matriz de projecção incorpora a especificação do volume de visão definindo uma transformação de projecção que mapeia o volume em causa num volume standard com vértices (+ 1 + 11, + 1). Para definir completamente a ponto de vista no mundo virtual é necessário especificar a sua localização, a direcção em que está a olhar e a direcção vertical.

Especificação da Visualização (View) Os parâmetros seguintes dizem respeito à posição do olho (viewing transform): Viewpoint, view-reference point (vrp, eye) A posição da câmara (ou do olho), o ponto3d onde a câmara (ou o olho) está localizado no mundo virtual. View Center (look) O centro do view plate, ou o ponto para o qual o olho está a olhar. View up direction (up) a direcção vertical do ponto de vista do viewer. View plane O plano no qual a imagem é projectada. View plane normal A normal ao view plane.

Especificação da Visualização (View) Em computação gráfica é frequente especificar o view point pela sua localização 3D, o view center (look) e a direcção vertical (up). A matriz de viewing especifica a posição do olho definindo uma transformação que modifica a posição do olho a partir da posição standard.

Especificação da Visualização (View) A posição standard (quando a matriz de viewing é a matriz identidade) é aquela que é definida pelo sistema de coordenadas do olho, tipicamente com o olho na origem a olhar na direcção dos z s negativos e com a vertical no eixo dos y s. Se o view point for deslocado para (a, b, c) sem alterar a orientação, a matriz de viewing é dada por: 1 0 0 a 0 1 0 b 0 0 1 c 0 0 0 1

Modelo de Visualização Java3D

Modelo de Visualização Java3D O modelo de visualização Java3D é muito versátil. Suporta ajustes dinâmicos baseados em alterações do ambiente, assim como o modelo baseado em câmara estática. É definido por um viewing branch (ramo de visualização) ligado a um Locale do grafo de cena. As classes Java3D directamente relacionadas com viewing são: ViewPlatform, View, PhysicalBody, PhysicalEnvironment, Canvas3D e Scren3D.

Configurar uma Vista Java3D

Configurar uma Vista Java3D Um objecto ViewPlatform é um nó do grafo de cena que representa a presença de uma view no mundo virtual. Tal como qualquer outro nó do grafo de cena, o ViewPlatform pode estar incluído numa cadeia de transformações geométricas e outros nós que o associem a um Locale. O TransformGroup ligado à ViewPlatform define a transformação de posicionamento e orientação da ViewPlatform, a viewing matriz.

Configurar uma Vista Java3D A classe Transform3D tem um método que ajuda a construir a viewing matriz: void lookat(point3d eye, Point3d look, Vector3d up) A inversa desta transformação pode ser usada para especificar a transformação do TransformGroup que contém a ViewPlatform.

Configurar uma Vista Java3D O objecto View é o núcleo do sistema de visualização. Define a configuração principal da visualização incluindo propriedades como o tipo de projecção e o volume de visão, ou seja, define a matriz de projecção. Os métodos que permitem definir a matriz de projecção são: void setfieldofview(double fov) void setfrontclipdistance(double d) void setbackclipdistance(double d) void setprojectionpolicy(int projection)

Configurar uma Vista Java3D O objecto View pode também acomodar a alteração dinâmica dos parâmetros de visualização através da ligação a PhysicalBody e PhysicalEnvironment. Os objectos PhysicalBody e PhysicalEnvironment permitem suportar a calibração automática usando sistemas de visualização dinâmicos como câmaras montadas na cabeça e sensores de tracking (seguimento) da cabeça. O objecto PhysicalBody descreve as características físicas do utilizador ou da sua cabeça. O objecto PhysicalEnvironment contém informação relativa ao ambiente físico como sejam sensores de tracking (seguimento).

Configurar uma Vista Java3D A classe Canvas3D constitui a superfície de renderização. A class Canvas3D é uma sub-classe de Canvas AWT e pode ser adicionada a um contentor AWT. O construtor normalmente utilizado é: public Canvas3D(GraphicsConfiguration gc) A classe Screen3D descreve o dispositivo de display. Os objectos Canvas3D referenciam um objecto Screen3D. A classe Screen3D é uma classe separada de Canvas3D para evitar a duplicação do display quando existem vários objectos Canvas3D. A classe Screen3D não tem nenhum construtor público. O objecto Screen3D é obtido através do método getscreen3d da classe Canvas3D.

O Modo Compatível

O Modo Compatível O Java3D disponibiliza um modo compatível com OpenGL que suporta o modelo tradicional de viweing baseado numa câmara. O modo compatível pode ser ligado usando o método da classe View: void setcompatibilitymodeenable(boolean enabled) A classe Transform3D contém métodos que permitem especificar as matrizes de viewing e de projecção.

O Modo Compatível A matriz de viewing pode ser especificada através do método: void lookat(point3d eye, Point3d look, Vector3d up) A matriz de projecção pode ser especificada com um dos métodos: void perpective(double fov, double aspect, double near, double far) void frustum(double left, double right, double bottom, double top, double near, double far) void ortho(double left, double right, double bottom, double top, double near, double far) As coordenadas destes métodos são relativas à posição do olho (vrp).

O Modo Compatível Os métodos perspective e frustum definem uma projecção de perspectiva. O método ortho uma projecção paralela. As chamadas seguintes são equivalentes: perspective(math.pi/2, 2, 1, 2) frustum(-1, 1, -0.5, 0.5, 1, 2) As matrizes de projecção e visualização podem ser especificadas com: void setvpctoec(transform3d viewingmatrix) void setleftprojection(transform3d projectionmatrix) void setrightprojection(transform3d projectionmatrix)

O Modo Compatível No modo compatível todos os parâmetros da view são especificados no objecto View. No modo Java3D não compatível os parâmetros de visualização finais podem ser influenciados por outros objectos como o PhysicalBody e o PhysicalEmvironment. Os métodos de especificação das matrizes de projecção e de visualização não são válidos no modo não compatível. O modo compatível é um modo restrito que não suporta todas as funcionalidades do modo Java3D. O objectivo é ser simples e compatível com OpenGL.

Configuração da Vista em SimpleUniverse

Configuração da Vista em SimpleUniverse O objecto SimpleUniverse contém uma implementação de um sistema de visualização pronto a usar. O sistema está dividido em duas partes: o Viewer e a ViewingPlatform. O Viewer contém um View, um ViewAvatar, um PhysicalBody, um PhysicalEnvironment e um conjunto de objectos Canvas3D. A ViewingPlatform contém um ViewPlatform e um MultiTransformGroup que por sua vez contém uma série de nós TransformGroup ligados entre si.

Configuração da Vista em SimpleUniverse Por omissão o SimpleUniverse tem apenas um TransformGroup no MultiTransformGroup. Existem construtores que permitem especificar o número de TransformGroup s a usar: SimpleUniverse(int numtrans) SimpleUniverse(Canvas3D canvas, int numtrans) Para obter o View do SimpleUniverse pode usar-se: View view = su.getviewer().getview(); Para obter o TransformGroup que contém o ViewPlatform (o TransformGroup acima de ViewPlatform) pode usar-se: TransformGroup tg = su.getviewingplatform().getviewplatformtransform(); Para obter um TransformGroup específico pode usar-se: TransformGroup tg = su.getviewingplatform().getmultitransformgroup(). gettransformgroup(idx);

Configuração da Vista em SimpleUniverse As características de visualização de SimpleUniverse pré-definidas são: Compatibility mode false. Left projection identidade. Right projection identidade vpc-to-ec tranform identidade. Field of view π/4 Front clip distance 0,1 Back clip distance 10

Configuração da Vista em SimpleUniverse O exemplo seguinte altera as características de visualização de SimpleUniverse de forma a que ViewPlatform seja movido para (1,1,1), olhe para a origem com um campo de visão de 0, 4π. SimpleUniverse su = new SimpleUniverse(cv); TransformGroup tg = su.getviewingplatform().getmultitransformgroup(). getrransformgroup(0); Transform3D tx = new Transform3D(); tx.lookat(new Point3d(1,1,1), new Point3d(0,0,0), new Vector3d(0,1,0)); tx.invert(); tg.settransform(tx); View view = su.getviewer().getview(); view.setfieldofview(0.4*math.pi);

Criar a Sua Própria Vista

Criar a Sua Própria Vista Quando o viewing system disponibilizado por SimpleUniverse não for adequado à aplicação em causa pode construir-se o viewing branch de raiz. O viewing branch tem que incluir um objecto View, um ViewPlatform, um PhysicalBody e um PhysicalEnvironment.

Criar a Sua Própria Vista O troço de código que se segue ilustra a criação de um viewing branch: View view = new View(); view.setprojectionpolicy(view.parallel PROJECTION); ViewPlatform vp = new ViewPlatform(); view.addcanvas3d(cv); view.attachviewplatform(vp); view.setphysicalbody(new PhysicalBody()); view.setphysicalenvironment(new PhysicalEnvironment()); Transform3D trans = new Transform3D(); trans.lookat(eye, center, vup); trans.invert(); TransformGroup tg = new TransformGroup(trans); tg.addchild(vp); BranchGroup bgview = new BranchGroup(); bgview.addchild(tg);

Criar a Sua Própria Vista O grafo de cena pode conter mais do que um View. Vários View s no mesmo grafo de cena permitem visualizar o mesmo mundo virtual de diferentes perspectivas.

Picking

Picking Picking é, de certa forma, o problema inverso de viewing. Dado um pixel no plano 2D qual o objecto 3D projectado nesse pixel? Uma aplicação típica de picking é a selecção de objectos 3D com o mouse. Um ponto no plano de visualização 2D corresponde a um raio de pontos no mundo virtual 3D.

Picking No caso da projecção de perspectiva às coordenadas (x, y ) no plano de projecção correspondem todos os pontos no mundo 3D (x, y, z) que verificam: x = x (1 z/d) y = y (1 z/d) Definindo como parâmetro t = 1 z/d as equações paramétricas do raio são: x = x t y = y t z = d(1 t)

Picking Para permitir alguma tolerância na selecção dos objectos, trata-se o ponto projectado como um disco (em vez de um ponto com área nula). O raio de projecção torna-se um cone na projecção de perspectiva e um cilindro na projecção paralela. No caso da projecção de perspectiva, sendo r o raio do disco, a equação do cone de picking é: ( ) x 2 ( ) 1 z/d x y 2 + 1 z/d y = r 2

Picking Em Java3D o suporte para picking existe a vários níveis. O núcleo das funções de picking é suportado pelas classes PickShape, SceneGraphPath e pelos métodos de picking das classes BranchGroup e Locale. As classes dos packages com.sun.j3d.utils.picking e om.sun.j3d.utils.picking.behavior suportam operações de picking de alto nível. Uma operação elementar de picking é efectuada criando um objecto PickShape e chamando o método pick num BranchGroup ou num Locale. O resultado do picking é devolvido num objecto SceneGraphPath.

Picking A hierarquia de classes de PickShape é composta pelas sub-classes: PickBounds, PickCone, PickCylinder, PickPoint, PickRay e PickSegment. As classes BranchGroup e Locale contêm os seguintes métodos de picking: SceneGrapPath[] pickall(pickshape pickshape) SceneGrapPath[] pickallsorted(pickshape pickshape) SceneGrapPath pickany(pickshape pickshape) SceneGrapPath pickclosest(pickshape pickshape) Em muitas operações de picking é necessário não só conhecer o objecto seleccionado como também o ramo do grafo onde o objecto está inserido. O objecto SceneGrapPath representa o caminho desde um Locale até a um nó folha no grafo de cena.

Picking O troço de código que se segue ilustra o procedimento de picking efectuado num BranchGroup: Point3d origin = new Point3d(0,0,0); Vector3d direction = new Vector3d(0,1,-1); PickShape pickshape = new PickRay(origin, direction); SceneGrapPath[] paths = branchgroup.pickall(pickshape); for (int i=0; i paths.length; i++) { // do something with paths[i] }

Picking A operação mais comum de picking é permitir a selecção de objectos a partir da imagem 2D resultante da renderização da cena 3D. O package com.sun.j3d.utils.picking contém 4 classes que simplificam este processo: PickTool e a sub-classe PickCanvas, PickIntersection e PickResult. A classe PickTool contém os métodos: PickResult[] pickall() PickResult[] pickallsorted() PickResult pickany() PickResult pickclosest()

Picking A sub-classe PickCanvas simplifica a especificação da pick shape através da associação a um canvas. Um evento de mouse pode ser usado para gerar automaticamente a pick shape. Os construtores seguintes de PickCanvas permitem associar um Canvas3D com um BranchGroup ou com um Locale: public PickCanvas(Canvas3D cv, BranchGroup bg) public PickCanvas(Canvas3D cv, Locale lc)

Picking O resultado do picking é um objecto PickResult. O objecto PickResult contém informação relativa ao ao nó seleccionado (picked), ao SceneGrapPath e à intercepção entre a forma seleccionada e a forma de picking. O objecto PickIntersection contém informação detalhada sobre a intercepção entre a forma usado para picking e a forma do nó seleccionado.

Head Tracking

Head Tracking A especificação da view depende da localização e da orientação dos olhos. Se a posição da cabeça do viewer mudar a especificação da view tem que ser alterada. Em Java3D a tarefa de recalcular dinamicamente a especificação da view de acordo com a posição da cabeça do viewer é suportada pelas classes View, Sensor, PhysicalBody e PhysicalEnvironment. O sistema de seguimento (tracking) é baseado num dispositivo com 6 graus de liberdade 6DOF (six-degrees-of-freedom).

Head Tracking A interface Java3D InputDevice define o dispositivo. Uma implementação de InputDevice disponibiliza um array de Sensor. Os objectos Sensor disponibilizam os dados de input do dispositivo. A classe InputDevice tem métodos de inicialização de de obtenção de sensores: void initialize() Sensor getsensor(int sensorindex) O objecto PhysicalEnvironment contém os objectos InputDevice. Para adicionar um InputDevice usa-se: void addinputdevice(inputdevice device)

Head Tracking O objecto PhysicalEnvironment contém também as associações entre as entidades 6DOF e os sensores. Por exemplo, por omissão, as 3 primeiras entidades 6DOF de PhysicalEnvironment são UserHead, DominatHand e NondominanteHand, com índices 0, 1 e 2, respectivamente. Para associar um sensor a UserHead usa-se o método de PhysicalEnvironment: setsensor(0, sensor); O seguimento de cabeça está desligado por omissão. Para ligá-lo usa-se o método de View: view.settrackingenable(true);

Head Tracking Há duas opções de montagem virtual do display: room mounted ou head mounted. Estas opções são especificadas em View, com os valores SCREEN VIEW ou HMD VIEW: void setviewpolicy(int viewpolicy); Com a opção head mounted é ainda necessário alterar a poĺıtica de visão de Canvas3D de View.CYCLOPEAN EYE VIEW para View.LEFT EYE VIEW: canvas.setmonoscopicviewpolicy(view.left EYE VIEW);

Head Tracking A representação visual do viewer na cena 3D chama-se avatar. O objecto Viewer em SimpleUniverse permite incluir o viewer avatar: ViewerAvatar avatar = new ViewAvatar(); su.getviewer().setavatar(avatar); A classe ViewerAvatar é sub-classe de BranchGroup. A localização do avatar está associada à view platform.

Resumo

Resumo de Classes e Métodos javax.media.j3d.view javax.media.j3d.viewplatform javax.media.j3d.canvas3d javax.media.j3d.screen3d javax.media.j3d.physicalbody javax.media.j3d.physicalenvironment javax.media.j3d.inputdevice javax.media.j3d.sensor

Resumo de Classes e Métodos com.sun.j3d.util.universe.viewavatar javax.media.j3d.pickshape javax.media.j3d.branchgroup.pickall(pickshape) javax.media.j3d.branchgroup.pickany(pickshape) javax.media.j3d.branchgroup.picksorted(pickshape) javax.media.j3d.branchgroup.pickclosest(pickshape) com.sun.j3d.utils.picking.pickcanvas javax.media.j3d.settrackingenable(boolean)

Resumo de Termos view volume projection matrix viewing matrix perspective projection parallel projection vrp view center

Resumo de Termos view up direction fov front clip plane back clip plane aspect ratio compatibility mode 6dof avatar

FIM