• Nenhum resultado encontrado

Apontamentos de Computação Gráfica

N/A
N/A
Protected

Academic year: 2021

Share "Apontamentos de Computação Gráfica"

Copied!
75
0
0

Texto

(1)

Apontamentos de Computa¸c˜ ao Gr´ afica

Cap´ıtulo 8 - Visualiza¸c˜ao 3D

Prof. Jo˜ao Beleza Sousa Prof. Arnaldo Abrantes

LEIC/DEETC/ISEL

Novembro de 2008

(2)

Introdu¸c˜ao Projec¸c˜oes

Especifica¸c˜ao da Visualiza¸c˜ao (View) Modelo de Visualiza¸c˜ao Java3D

Configurar uma Vista Java3D O Modo Compat´ıvel

Configura¸c˜ao da Vista em SimpleUniverse Criar a Sua Pr´opria Vista

Picking Head Tracking Resumo

(3)

Objectivos

I Compreender o conceito de vista no processo de renderiza¸c˜ao 3D.

I Identificar as projec¸c˜oes paralela e de perspectiva.

I Especificar uma matriz de visualiza¸c˜ao (viewing).

I Especificar uma matriz de projec¸c˜ao.

I Aplicar o modelo de visualiza¸c˜ao standard do Java3D.

I Aplicar o modelo de visualiza¸c˜ao compat´ıvel do Java3D.

I Usar picking numa cena 3D.

I Compreender head-tracking nos modelos de visualiza¸c˜ao.

I Usar dispositivos de input como sensores e head-tracking em Java3D.

I Usar avatar in SimpleUniverse.

(4)

Introdu¸c˜ao

(5)

Introdu¸c˜ ao

I Depois de constru´ıdo um modelo 3D do mundo virtual, o processo de visualiza¸c˜ao cria (renderiza) imagens do mundo virtual correspondentes `a visualiza¸c˜ao a partir de um determinado ponto de vista (view).

I A configura¸c˜ao geom´etrica que define o mapeamento da cena virtual 3D numa imagem 2D ´e uma vista (view).

I Uma vista pode ser encarada como uma cˆamara digital.

I A vista define o modo como o mundo virtual ´e visualizado.

I As views dos sistemas gr´aficos modernos podem ser bastante sofisticadas e podem ter um grande n´umero de parˆametros de configura¸c˜ao.

(6)

Introdu¸c˜ ao

I O viewpoint (ponto de vista) de uma vista est´a localizado no mundo virtual e “vˆe” o mundo virtual com uma direc¸c˜ao e orienta¸c˜ao espec´ıficas.

I Uma vista ´e caracterizada pelo tipo de projec¸c˜ao 3D para 2D, o campo de vista, os planos de cliping front e back, o

tamanho do plate, etc.

I O modelo da vista pode ser o de uma cˆamara est´atica, ou pode ser um modelo dinˆamico se, por exemplo, o

posicionamento da vista, se for alterando ao longo do tempo.

I A maioria das API’s low-level suporta apenas um modelo de visualiza¸c˜ao baseado em cˆamara est´atica.

(7)

Introdu¸c˜ ao

I Tipicamente o modelo de visualiza¸c˜ao baseado em cˆamara ´e especificado por dois tipos de parˆametros: as propriedades da projec¸c˜ao e o posicionamento da cˆamara.

I Com o modelo de visualiza¸c˜ao est´atico ´e normalmente dif´ıcil de programar comportamentos dinˆamicos.

I Caso, por exemplo, o sistema de visualiza¸c˜ao seja uma cˆamara montada na cabe¸ca associada a um sistema de tracking, a movimenta¸c˜ao da cˆamara resulta na altera¸c˜ao cont´ınua das propriedades de visualiza¸c˜ao.

(8)

Introdu¸c˜ ao

I Em Java3D o sistema de visualiza¸c˜ao ´e muito vers´atil.

Suporta todas as possibilidades tradicionais dos modelos de visualiza¸c˜ao est´aticos assim como a possibilidade de altera¸c˜oes dinˆamicas do modelo de visualiza¸c˜ao.

I Os efeitos das altera¸c˜oes no modelo de visualiza¸c˜ao podem ser incluidos automaticamente atrav´es de objectos separados sem alterar explicitamente a estrutura de visualiza¸c˜ao.

I O mesmo grafo de cena pode ser usado com uma grande variedade de op¸c˜oes de visualiza¸c˜ao.

(9)

Introdu¸c˜ ao

I A selec¸c˜ao de objectos na cena 3D a partir da projec¸c˜ao 2D, designada por picking, ´e, de certa forma, o processo inverso do processo de visualiza¸c˜ao.

I Dada a selec¸c˜ao de um pixel na imagem 2D resultante da renderiza¸c˜ao da cena 3D pretende-se saber qual o objecto da cena 3D seleccionado.

I O picking possibilita a interac¸c˜ao coma cena 3D a partir da imagem 2D renderizada. Exemplo: seleccionar e mover ou rodar objectos com o mouse.

I Java3D suporta picking a v´arios n´ıveis.

(10)

Projec¸c˜oes

(11)

Projec¸c˜ oes

I A visualiza¸c˜ao da cena 3D com uma imagem 2D ´e conseguida com uma transforma¸c˜ao chamada projec¸c˜ao.

I H´a dois tipos principais de projec¸c˜oes: a paralela e a de perspectiva.

I Em ambos os casos h´a um plano de visualiza¸c˜ao (view plane) colocado no mundo virtual.

I A projec¸c˜ao mapeia os pontos do mundo virtual em pontos do view plane.

I De forma a tornar o processo de visualiza¸c˜ao exequ´ıvel s˜ao efectuadas algumas restri¸c˜oes, tanto no espa¸co virtual mapeado como no plano de mapeamento.

(12)

Projec¸c˜ oes

I A projec¸c˜ao ´e efectuada numa ´area finita do plano de

projec¸c˜ao. Normalmente uma ´area rectangular, chamada view plate.

I Os pontos do mundo virtual cuja projec¸c˜ao fica fora do view plate n˜ao s˜ao projectados.

I Os pontos que est˜ao muito perto ou muito longe do plano de visualiza¸c˜ao tamb´em n˜ao s˜ao projectados.

I Estas restri¸c˜oes fazem com que apenas um volume finito do espa¸co virtual 3D seja projectado e consequentemente visualizado. Este volume chama-se view frustum.

(13)

Projec¸c˜ oes

I A projec¸c˜ao paralela projecta os pontos 3D no plano de visualiza¸c˜ao segundo linhas paralelas, com uma direc¸c˜ao fixa.

I Quando as linhas de projec¸c˜ao s˜ao perpendiculares ao plano de visualiza¸c˜ao a projec¸c˜ao chama-se ortogr´afica.

I As projec¸c˜oes ortogr´aficas segundo os 3 eixos de coordenadas s˜ao muito usadas em engenharia e arquitectura e chamam-se planta, al¸cado frontal e al¸cado lateral.

I As f´ormulas de projec¸c˜ao paralela s˜ao relativamente simples.

(14)

Projec¸c˜ oes

I Supondo que o plano de visualiza¸c˜ao ´e o plano xy e que a projec¸c˜ao ´e efectuada segundo a direc¸c˜ao do eixo dos z’s, ent˜ao um ponto 3D (x,y,z) ´e mapeado no ponto 2D (x,y).

Matricialmente:

 x0 y0 z0 w0

=

1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1

 x y z w

(15)

Projec¸c˜ oes

I Na realidade, para efeitos da determina¸c˜ao das partes escondidas dos objectos, ´e desej´avel manter a informa¸c˜ao da coordenada z. Assim a matriz de transforma¸c˜ao da projec¸c˜ao paralela vem igual `a matriz identidade:

1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1

(16)

Projec¸c˜ oes

I A projec¸c˜ao de perspectiva projecta os pontos 3D no plano de visualiza¸c˜ao segundo linhas que convergem num ´unico ponto.

I O ponto de convergˆencia chama-se viewer ou posi¸c˜ao do olho.

I Os objectos mais pr´oximos do observador (posi¸c˜ao do olho) s˜ao projectados com maiores dimens˜oes do que os mais long´ınquos.

I Este tipo de projec¸c˜ao ´e semelhante `a projec¸c˜ao que ocorre no olho humano e nas m´aquina fotogr´aficas.

I As f´ormulas de projec¸c˜ao de perspectiva s˜ao mais complexas do que as da projec¸c˜ao paralela.

(17)

Projec¸c˜ oes

I Supondo que o plano de visualiza¸c˜ao ´e o plano xy e que o olho est´a situado em (0,0,d) e olha na direc¸c˜ao do eixo dos z’s no sentido dos z’s negativos.

I Um ponto (x,y,z) no espa¸co 3D ´e projectado no ponto (x0,y0,0) do plano de visualiza¸c˜ao.

I Relativamente `a coordenada y verifica-se que:

y0

d = y

d + (−z) ou seja,

y0= y 1 +−z/d

(18)

Projec¸c˜ oes

I O mesmo se passa em rela¸c˜ao ´a coordenada x:

x0 = x 1 +−z/d

I As opera¸c˜oes de c´alculo de x’ e y’ podem ser efectuadas em coordenadas homog´eneas pela transforma¸c˜ao:

 x0 y0 z0 w0

=

1 0 0 0

0 1 0 0

0 0 0 0

0 0 −1/d 1

 x y z w

(19)

Projec¸c˜ oes

I O resultado desta transforma¸c˜ao sobre o ponto (x,y,z,1) ´e:

 x0 y0 z0 w0

=

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

I E, dado que a transforma¸c˜ao foi efectuada em coordenadas homog´eneas, as coordenadas (x0,y0,z0) no espa¸co 3D s˜ao (dividir por w0):

(x0 = x

1−z/d,y0 = y

1−z/d,z0= 0)

(20)

Projec¸c˜ oes

I Tal como no caso da projec¸c˜ao paralela, para efeitos da determina¸c˜ao das partes escondidas dos objectos, ´e desej´avel manter a informa¸c˜ao da coordenada z. Assim a matriz de transforma¸c˜ao vem:

1 0 0 0

0 1 0 0

0 0 1 0

0 0 −1/d 1

(21)

Projec¸c˜ oes

I Em coordenadas homog´eneas as projec¸c˜oes paralela e de perspectiva s˜ao tratadas de forma uniforme como as transforma¸c˜oes afins.

I Se d tender para infinito, como

d→∞lim (−1/d) = 0

, a projec¸c˜ao de perspectiva tende para a projec¸c˜ao paralela.

I A projec¸c˜ao paralela ´e na verdade uma projec¸c˜ao de perspectiva em que a posi¸c˜ao do olho est´a no infinito.

I As coordenadas do view point da projec¸c˜ao de perspectiva s˜ao (0,0,d) ou (0,0,1,1/d) em coordenadas homog´eneas.

I Quando d tende para infinito o view point tende para

(0,0,1,0), um ponto no infinito em coordenadas homog´eneas.

(22)

Especifica¸c˜ao da Visualiza¸c˜ao (View)

(23)

Especifica¸c˜ ao da Visualiza¸c˜ ao (View)

I A especifica¸c˜ao completa de uma view pode ser dividida em duas partes: a defini¸c˜ao do volume de visualiza¸c˜ao e o posicionamento do olho.

I Se uma view for especificada como uma cˆamara (m´aquina fotogr´afica), ent˜ao o volume de visualiza¸c˜ao ´e determinado pelas caracter´ısticas da cˆamara, como a distˆancia focal e o tamanho do filme, e o posicionamento corresponde `a posi¸c˜ao da cˆamara.

I A defini¸c˜ao do volume de visualiza¸c˜ao ´e normalmente

representado por uma matriz de projec¸c˜ao (projection matrix).

I O posicionamento do olho ´e normalmente representado por uma matriz de visualiza¸c˜ao (viewing matrix).

(24)

Especifica¸c˜ ao da Visualiza¸c˜ ao (View)

I Os parˆametros seguintes dizem respeito ao volume de visualiza¸c˜ao (matriz de projec¸c˜ao):

Projec¸c˜ao Paralela ou de perspectiva.

View Plate A janela para renderiza¸c˜ao. Normalmente ´e uma janela rectangular. Numa m´aquina fotogr´afica anal´ogica o view plate corresponde ao film frame.

Campo de Vis˜ao (Field of View - fov) O ˆangulo horizontal formado pelos planos esquerdo e direito do frustum. Embora n˜ao seja frequente, os campos de vis˜ao vertical e diagonal podem ser definidos de forma semelhante.

(25)

Especifica¸c˜ ao da Visualiza¸c˜ ao (View)

I Parˆametros de especifica¸c˜ao da matriz de projec¸c˜ao (continua¸c˜ao):

Distˆancia Focal a distˆancia entre o view plate e o view point (entre o plano de visualiza¸c˜ao e a posi¸c˜ao 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´as do frustum.

(26)

Especifica¸c˜ ao da Visualiza¸c˜ ao (View)

I Nem todos estes parˆametros s˜ao independentes.

I Por exemplo, a distˆancia focal, o campo de vis˜ao horizontal e a largura do view plate est˜ao relacionados pela f´ormula:

tanfov

2 = width/2 f

I Uma m´aquina fotogr´afica de 35 mm com uma lente de 50 mm tem um fotograma de 36 mm por 24 mm, um campo de vis˜ao de 40o, e um aspect ratio de 1,5.

(27)

Especifica¸c˜ ao da Visualiza¸c˜ ao (View)

I Numa m´aquina fotogr´afica real o filme ´e colocado por de tr´as da lente o que faz com que a imagem projectada fique invertida (tanto vertical como horizontalmente).

I No entanto em computa¸c˜ao gr´afica o plano de visualiza¸c˜ao ´e colocado em frete ao olho pelo que a imagem projectada n˜ao fica invertida.

(28)

Especifica¸c˜ ao da Visualiza¸c˜ ao (View)

I A matriz de projec¸c˜ao ´e definida no sistema de coordenadas do olho. O olho fica colocado na origem, olha no sentido dos z’s negativos e est´a orientado verticalmente no sentido do eixo dos y’s.

I A matriz de projec¸c˜ao incorpora a especifica¸c˜ao do volume de vis˜ao definindo uma transforma¸c˜ao de projec¸c˜ao que mapeia o volume em causa num volume standard com v´ertices

(+−1 + 11,+−1).

I Para definir completamente a ponto de vista no mundo virtual

´

e necess´ario especificar a sua localiza¸c˜ao, a direc¸c˜ao em que est´a a olhar e a direc¸c˜ao vertical.

(29)

Especifica¸c˜ ao da Visualiza¸c˜ ao (View)

I Os parˆametros seguintes dizem respeito `a posi¸c˜ao do olho (viewing transform):

Viewpoint, view-reference point (vrp, eye) A posi¸c˜ao da cˆamara (ou do olho), o ponto3D onde a cˆamara (ou o olho) est´a localizado no mundo virtual.

View Center (look) O centro do view plate, ou o ponto para o qual o olho est´a a olhar.

View up direction (up) a direc¸c˜ao vertical do ponto de vista do viewer.

View plane O plano no qual a imagem ´e projectada.

View plane normal A normal ao view plane.

(30)

Especifica¸c˜ ao da Visualiza¸c˜ ao (View)

I Em computa¸c˜ao gr´afica ´e frequente especificar o view point pela sua localiza¸c˜ao 3D, o view center (look) e a direc¸c˜ao vertical (up).

I A matriz de viewing especifica a posi¸c˜ao do olho definindo uma transforma¸c˜ao que modifica a posi¸c˜ao do olho a partir da posi¸c˜ao standard.

(31)

Especifica¸c˜ ao da Visualiza¸c˜ ao (View)

I A posi¸c˜ao standard (quando a matriz de viewing ´e a matriz identidade) ´e aquela que ´e definida pelo sistema de

coordenadas do olho, tipicamente com o olho na origem a olhar na direc¸c˜ao dos z’s negativos e com a vertical no eixo dos y’s.

I Se o view point for deslocado para (a,b,c) sem alterar a orienta¸c˜ao, a matriz de viewing ´e dada por:

1 0 0 −a 0 1 0 −b 0 0 1 −c

0 0 0 1

(32)

Modelo de Visualiza¸c˜ao Java3D

(33)

Modelo de Visualiza¸c˜ ao Java3D

I O modelo de visualiza¸c˜ao Java3D ´e muito vers´atil. Suporta ajustes dinˆamicos baseados em altera¸c˜oes do ambiente, assim como o modelo baseado em cˆamara est´atica.

I E definido por um viewing branch (ramo de visualiza¸c˜´ ao) ligado a um Locale do grafo de cena.

I As classes Java3D directamente relacionadas com viewing s˜ao:

ViewPlatform, View, PhysicalBody, PhysicalEnvironment, Canvas3D e Scren3D.

(34)

Configurar uma Vista Java3D

(35)

Configurar uma Vista Java3D

I Um objecto ViewPlatform ´e um n´o do grafo de cena que representa a presen¸ca de uma view no mundo virtual.

I Tal como qualquer outro n´o do grafo de cena, o ViewPlatform pode estar inclu´ıdo numa cadeia de transforma¸c˜oes

geom´etricas e outros n´os que o associem a um Locale.

I O TransformGroup ligado `a ViewPlatform define a transforma¸c˜ao de posicionamento e orienta¸c˜ao da ViewPlatform, a viewing matriz.

(36)

Configurar uma Vista Java3D

I A classe Transform3D tem um m´etodo que ajuda a construir a viewing matriz:

void lookAt(Point3d eye, Point3d look, Vector3d up)

I A inversa desta transforma¸c˜ao pode ser usada para especificar a transforma¸c˜ao do TransformGroup que cont´em a

ViewPlatform.

(37)

Configurar uma Vista Java3D

I O objecto View ´e o n´ucleo do sistema de visualiza¸c˜ao. Define a configura¸c˜ao principal da visualiza¸c˜ao incluindo propriedades como o tipo de projec¸c˜ao e o volume de vis˜ao, ou seja, define a matriz de projec¸c˜ao.

I Os m´etodos que permitem definir a matriz de projec¸c˜ao s˜ao:

void setFieldOfView(double fov) void setFrontClipDistance(double d) void setBackClipDistance(double d) void setProjectionPolicy(int projection)

(38)

Configurar uma Vista Java3D

I O objecto View pode tamb´em acomodar a altera¸c˜ao dinˆamica dos parˆametros de visualiza¸c˜ao atrav´es da liga¸c˜ao a

PhysicalBody e PhysicalEnvironment.

I Os objectos PhysicalBody e PhysicalEnvironment permitem suportar a calibra¸c˜ao autom´atica usando sistemas de

visualiza¸c˜ao dinˆamicos como cˆamaras montadas na cabe¸ca e sensores de tracking (seguimento) da cabe¸ca.

I O objecto PhysicalBody descreve as caracter´ısticas f´ısicas do utilizador ou da sua cabe¸ca.

I O objecto PhysicalEnvironment cont´em informa¸c˜ao relativa ao ambiente f´ısico como sejam sensores de tracking (seguimento).

(39)

Configurar uma Vista Java3D

I A classe Canvas3D constitui a superf´ıcie de renderiza¸c˜ao.

I A class Canvas3D ´e uma sub-classe de Canvas AWT e pode ser adicionada a um contentor AWT.

I O construtor normalmente utilizado ´e:

public Canvas3D(GraphicsConfiguration gc)

I A classe Screen3D descreve o dispositivo de display.

I Os objectos Canvas3D referenciam um objecto Screen3D.

I A classe Screen3D ´e uma classe separada de Canvas3D para evitar a duplica¸c˜ao do display quando existem v´arios objectos Canvas3D.

I A classe Screen3D n˜ao tem nenhum construtor p´ublico. O objecto Screen3D ´e obtido atrav´es do m´etodo getScreen3D da classe Canvas3D.

(40)

O Modo Compat´ıvel

(41)

O Modo Compat´ıvel

I O Java3D disponibiliza um modo compat´ıvel com OpenGL que suporta o modelo tradicional de viweing baseado numa cˆamara.

I O modo compat´ıvel pode ser ligado usando o m´etodo da classe View:

void setCompatibilityModeEnable(boolean enabled)

I A classe Transform3D cont´em m´etodos que permitem especificar as matrizes de viewing e de projec¸c˜ao.

(42)

O Modo Compat´ıvel

I A matriz de viewing pode ser especificada atrav´es do m´etodo:

void lookAt(Point3d eye, Point3d look, Vector3d up)

I A matriz de projec¸c˜ao pode ser especificada com um dos m´etodos:

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)

I As coordenadas destes m´etodos s˜ao relativas `a posi¸c˜ao do olho (vrp).

(43)

O Modo Compat´ıvel

I Os m´etodos perspective e frustum definem uma projec¸c˜ao de perspectiva. O m´etodo ortho uma projec¸c˜ao paralela.

I As chamadas seguintes s˜ao equivalentes:

perspective(Math.PI/2, 2, 1, 2) frustum(-1, 1, -0.5, 0.5, 1, 2)

I As matrizes de projec¸c˜ao e visualiza¸c˜ao podem ser especificadas com:

void setVpcToEc(Transform3D viewingMatrix)

void setLeftProjection(Transform3D projectionMatrix) void setRightProjection(Transform3D projectionMatrix)

(44)

O Modo Compat´ıvel

I No modo compat´ıvel todos os parˆametros da view s˜ao especificados no objecto View.

I No modo Java3D n˜ao compat´ıvel os parˆametros de

visualiza¸c˜ao finais podem ser influenciados por outros objectos como o PhysicalBody e o PhysicalEmvironment.

I Os m´etodos de especifica¸c˜ao das matrizes de projec¸c˜ao e de visualiza¸c˜ao n˜ao s˜ao v´alidos no modo n˜ao compat´ıvel.

I O modo compat´ıvel ´e um modo restrito que n˜ao suporta todas as funcionalidades do modo Java3D. O objectivo ´e ser simples e compat´ıvel com OpenGL.

(45)

Configura¸c˜ao da Vista em SimpleUniverse

(46)

Configura¸c˜ ao da Vista em SimpleUniverse

I O objecto SimpleUniverse cont´em uma implementa¸c˜ao de um sistema de visualiza¸c˜ao pronto a usar.

I O sistema est´a dividido em duas partes: o Viewer e a ViewingPlatform.

I O Viewer cont´em um View, um ViewAvatar, um

PhysicalBody, um PhysicalEnvironment e um conjunto de objectos Canvas3D.

I A ViewingPlatform cont´em um ViewPlatform e um

MultiTransformGroup que por sua vez cont´em uma s´erie de n´os TransformGroup ligados entre si.

(47)

Configura¸c˜ ao da Vista em SimpleUniverse

I Por omiss˜ao o SimpleUniverse tem apenas um TransformGroup no MultiTransformGroup. Existem construtores que permitem especificar o n´umero de TransformGroup’s a usar:

SimpleUniverse(int numTrans)

SimpleUniverse(Canvas3D canvas, int numTrans)

I Para obter o View do SimpleUniverse pode usar-se:

View view = su.getViewer().getView();

I Para obter o TransformGroup que cont´em o ViewPlatform (o TransformGroup acima de ViewPlatform) pode usar-se:

TransformGroup tg =

su.getViewingPlatform().getViewPlatformTransform();

I Para obter um TransformGroup espec´ıfico pode usar-se:

TransformGroup tg =

su.getViewingPlatform().getMultiTransformGroup().

getTransformGroup(idx);

(48)

Configura¸c˜ ao da Vista em SimpleUniverse

I As caracter´ısticas de visualiza¸c˜ao de SimpleUniverse pr´e-definidas s˜ao:

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

(49)

Configura¸c˜ ao da Vista em SimpleUniverse

I O exemplo seguinte altera as caracter´ısticas de visualiza¸c˜ao de SimpleUniverse de forma a que ViewPlatform seja movido para (1,1,1), olhe para a origem com um campo de vis˜ao 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);

(50)

Criar a Sua Pr´opria Vista

(51)

Criar a Sua Pr´ opria Vista

I Quando o viewing system disponibilizado por SimpleUniverse n˜ao for adequado `a aplica¸c˜ao em causa pode construir-se o viewing branch de raiz.

I O viewing branch tem que incluir um objecto View, um ViewPlatform, um PhysicalBody e um PhysicalEnvironment.

(52)

Criar a Sua Pr´ opria Vista

I O tro¸co de c´odigo que se segue ilustra a cria¸c˜ao 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);

(53)

Criar a Sua Pr´ opria Vista

I O grafo de cena pode conter mais do que um View.

I V´arios View’s no mesmo grafo de cena permitem visualizar o mesmo mundo virtual de diferentes perspectivas.

(54)

Picking

(55)

Picking

I Picking ´e, de certa forma, o problema inverso de viewing.

I Dado um pixel no plano 2D qual o objecto 3D projectado nesse pixel?

I Uma aplica¸c˜ao t´ıpica de picking ´e a selec¸c˜ao de objectos 3D com o mouse.

I Um ponto no plano de visualiza¸c˜ao 2D corresponde a um raio de pontos no mundo virtual 3D.

(56)

Picking

I No caso da projec¸c˜ao de perspectiva `as coordenadas (x0,y0) no plano de projec¸c˜ao correspondem todos os pontos no mundo 3D (x,y,z) que verificam:

x=x0(1−z/d) y =y0(1−z/d)

I Definindo como parˆametrot= 1−z/d as equa¸c˜oes param´etricas do raio s˜ao:

x=x0t y=y0t z =d(1−t)

(57)

Picking

I Para permitir alguma tolerˆancia na selec¸c˜ao dos objectos, trata-se o ponto projectado como um disco (em vez de um ponto com ´area nula).

I O raio de projec¸c˜ao torna-se um cone na projec¸c˜ao de perspectiva e um cilindro na projec¸c˜ao paralela.

I No caso da projec¸c˜ao de perspectiva, sendo r o raio do disco, a equa¸c˜ao do cone de picking ´e:

x

1−z/d −x0 2

+ y

1−z/d −y0 2

=r2

(58)

Picking

I Em Java3D o suporte para picking existe a v´arios n´ıveis.

I O n´ucleo das fun¸c˜oes de picking ´e suportado pelas classes PickShape, SceneGraphPath e pelos m´etodos de picking das classes BranchGroup e Locale.

I As classes dos packages com.sun.j3d.utils.picking e om.sun.j3d.utils.picking.behavior suportam opera¸c˜oes de picking de alto n´ıvel.

I Uma opera¸c˜ao elementar de picking ´e efectuada criando um objecto PickShape e chamando o m´etodo pick num

BranchGroup ou num Locale. O resultado do picking ´e devolvido num objecto SceneGraphPath.

(59)

Picking

I A hierarquia de classes de PickShape ´e composta pelas sub-classes: PickBounds, PickCone, PickCylinder, PickPoint, PickRay e PickSegment.

I As classes BranchGroup e Locale contˆem os seguintes m´etodos de picking:

SceneGrapPath[] pickAll(PickShape pickShape) SceneGrapPath[] pickAllSorted(PickShape pickShape) SceneGrapPath pickAny(PickShape pickShape) SceneGrapPath pickClosest(PickShape pickShape)

I Em muitas opera¸c˜oes de picking ´e necess´ario n˜ao s´o conhecer o objecto seleccionado como tamb´em o ramo do grafo onde o objecto est´a inserido.

I O objecto SceneGrapPath representa o caminho desde um Locale at´e a um n´o folha no grafo de cena.

(60)

Picking

I O tro¸co de c´odigo 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]

}

(61)

Picking

I A opera¸c˜ao mais comum de picking ´e permitir a selec¸c˜ao de objectos a partir da imagem 2D resultante da renderiza¸c˜ao da cena 3D.

I O package com.sun.j3d.utils.picking cont´em 4 classes que simplificam este processo: PickTool e a sub-classe

PickCanvas, PickIntersection e PickResult.

I A classe PickTool cont´em os m´etodos:

PickResult[] pickAll() PickResult[] pickAllSorted() PickResult pickAny() PickResult pickClosest()

(62)

Picking

I A sub-classe PickCanvas simplifica a especifica¸c˜ao da pick shape atrav´es da associa¸c˜ao a um canvas.

I Um evento de mouse pode ser usado para gerar automaticamente a pick shape.

I 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)

(63)

Picking

I O resultado do picking ´e um objecto PickResult.

I O objecto PickResult cont´em informa¸c˜ao relativa ao ao n´o seleccionado (picked), ao SceneGrapPath e `a intercep¸c˜ao entre a forma seleccionada e a forma de picking.

I O objecto PickIntersection cont´em informa¸c˜ao detalhada sobre a intercep¸c˜ao entre a forma usado para picking e a forma do n´o seleccionado.

(64)

Head Tracking

(65)

Head Tracking

I A especifica¸c˜ao da view depende da localiza¸c˜ao e da orienta¸c˜ao dos olhos.

I Se a posi¸c˜ao da cabe¸ca do viewer mudar a especifica¸c˜ao da view tem que ser alterada.

I Em Java3D a tarefa de recalcular dinamicamente a

especifica¸c˜ao da view de acordo com a posi¸c˜ao da cabe¸ca do viewer ´e suportada pelas classes View, Sensor, PhysicalBody e PhysicalEnvironment.

I O sistema de seguimento (tracking) ´e baseado num dispositivo com 6 graus de liberdade 6DOF (six-degrees-of-freedom).

(66)

Head Tracking

I A interface Java3D InputDevice define o dispositivo. Uma implementa¸c˜ao de InputDevice disponibiliza um array de Sensor.

I Os objectos Sensor disponibilizam os dados de input do dispositivo.

I A classe InputDevice tem m´etodos de inicializa¸c˜ao de de obten¸c˜ao de sensores:

void initialize()

Sensor getSensor(int sensorIndex)

I O objecto PhysicalEnvironment cont´em os objectos InputDevice. Para adicionar um InputDevice usa-se:

void addInputDevice(InputDevice device)

(67)

Head Tracking

I O objecto PhysicalEnvironment cont´em tamb´em as associa¸c˜oes entre as entidades 6DOF e os sensores.

I Por exemplo, por omiss˜ao, as 3 primeiras entidades 6DOF de PhysicalEnvironment s˜ao UserHead, DominatHand e

NondominanteHand, com ´ındices 0, 1 e 2, respectivamente.

I Para associar um sensor a UserHead usa-se o m´etodo de PhysicalEnvironment:

setSensor(0, sensor);

I O seguimento de cabe¸ca est´a desligado por omiss˜ao. Para lig´a-lo usa-se o m´etodo de View:

view.setTrackingEnable(true);

(68)

Head Tracking

I H´a duas op¸c˜oes de montagem virtual do display: room mounted ou head mounted. Estas op¸c˜oes s˜ao especificadas em View, com os valores SCREEN VIEW ou HMD VIEW:

void setViewPolicy(int viewPolicy);

I Com a op¸c˜ao head mounted ´e ainda necess´ario alterar a pol´ıtica de vis˜ao de Canvas3D de

View.CYCLOPEAN EYE VIEW para View.LEFT EYE VIEW:

canvas.setMonoscopicViewPolicy(View.LEFT EYE VIEW);

(69)

Head Tracking

I A representa¸c˜ao visual do viewer na cena 3D chama-se avatar.

I O objecto Viewer em SimpleUniverse permite incluir o viewer avatar:

ViewerAvatar avatar = new ViewAvatar();

su.getViewer().setAvatar(avatar);

I A classe ViewerAvatar ´e sub-classe de BranchGroup.

I A localiza¸c˜ao do avatar est´a associada `a view platform.

(70)

Resumo

(71)

Resumo de Classes e M´ etodos

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

(72)

Resumo de Classes e M´ etodos

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)

(73)

Resumo de Termos

view volume projection matrix viewing matrix perspective projection parallel projection

vrp view center

(74)

Resumo de Termos

view up direction fov front clip plane back clip plane

aspect ratio compatibility mode

6dof avatar

(75)

FIM

Referências

Documentos relacionados

evento, contudo, as meninas tendem a aumentar a quantidade de gordura corporal de forma mais acentuada que os meninos. Estes, por outro lado, aumentam de

A placa EXPRECIUM-II possui duas entradas de linhas telefônicas, uma entrada para uma bateria externa de 12 Volt DC e uma saída paralela para uma impressora escrava da placa, para

O PROGRAMA AGENTES LOCAIS DE INOVAÇÃO, por este Edital, torna público a Retificação do Edital 03/2011, a Lista de Convocados para Realização das Dinâmicas de Grupo e

psicológicos, sociais e ambientais. Assim podemos observar que é de extrema importância a QV e a PS andarem juntas, pois não adianta ter uma meta de promoção de saúde se

Principais fontes de financiamento disponíveis: Autofinanciamento: (corresponde aos fundos Principais fontes de financiamento disponíveis: Autofinanciamento: (corresponde aos

Na Figura 11, observou-se que embora a recirculação no sentido ascendente melhore significativamente a mistura, o mesmo apresenta baixos valores de velocidade para a fase

Direção Geral de Alimentação e Veterinária - DGAMV Ultima revisão dos textos: Junho de 2017. Página 13

Pode haver alguns acordos prévios, como visto na classificação proposta em trabalho anterior (GUERRERO, 2006), mas estes são propostos sempre mantendo elevado