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
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
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.
Introdu¸c˜ao
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.
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.
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.
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.
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.
Projec¸c˜oes
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.
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.
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.
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
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
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.
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
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
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)
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
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.
Especifica¸c˜ao da Visualiza¸c˜ao (View)
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).
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.
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.
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.
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.
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.
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.
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.
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
Modelo de Visualiza¸c˜ao Java3D
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.
Configurar uma Vista Java3D
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.
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.
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)
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).
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.
O Modo Compat´ıvel
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.
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).
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)
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.
Configura¸c˜ao da Vista em SimpleUniverse
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.
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);
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
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);
Criar a Sua Pr´opria Vista
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.
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);
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.
Picking
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.
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)
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
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.
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.
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]
}
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()
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)
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.
Head Tracking
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).
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)
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);
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);
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.
Resumo
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
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)
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