You are on page 1of 155

Introduo a Programao com Java 3D

Autores Tradutor
Henry A. Sowizral (Organizador)
henry.sowizral@eng.sun.com
Sun Microsystems, Inc.
Jos Remo Ferreira
Brega
remo@fundanet.br
Fundao E. E. S.
Rocha
David R. Nadeau
nadeau@sdsc.edu
http://www.sdsc.edu/~nadeau
San Diego Supercomputer
Center
University of California at
San Diego
Sees do Curso
Resumo
Prefcio
Informao dos Autores
Usando exemplos Java
Slides do Curso
Introduo a Programao com Java 3D
Resumo
Java 3D uma nova API cross-platform, para desenvolver aplicaes grficas 3D em Java.
Seu conjunto de caractersticas foi projetado para habilitar desenvolvimento rpido de
aplicaes complexas 3D, e ao mesmo tempo, habilitar implementao eficiente e rpida
sobre uma variedade de plataformas, desde PCs at workstations. Usando o Java 3D,
desenvolvedores de software podem construir aplicaes cross-platform que constroem as
cenas 3D por programa, ou por carregadores 3D de VRML, OBJ, e/ou outros arquivos
externos. A API Java 3D inclui um rico conjunto de caractersticas para construir formas,
compor comportamentos, interagir com o usurio, e controlar detalhes de renderizao.
Neste curso, os participantes aprendero os conceitos atrs do Java 3D, a hierarquia da classe
Java 3D, uso de padres tpicos, caminhos de evitar erros comuns, animao e tcnicas de
projeto de cenas, e truques para aumentar a performance e o realismo.
Introduo a Programao com Java 3D
Prefcio
Bem vindo a estas notas de curso! Estas notas de curso foram escritas para dar-lhe uma
vista geral rpida, prtica, dirigida a exemplos de Java 3D, a API cross-platform
grfica para Java. Para fazer este, ns inclumos quase 600 pginas do material do
curso com quase 100 imagens e mais de 50 exemplos de Java 3D.
Para usar este material de curso, voc necessitar:
Um browser Web HTML
Java JDK 1.2 (Java 2 Platform) ou superior
Java 3D 1.1 ou superior
Informaes sobre os JDKs Java JDKs e Java 3D esto disponveis em:
http://www.javasoft.com
O que est incluido nestas notas de curso
Estas notas de curso contm primeiramente dois tipos de informao:
# a informao geral, tal como este prefcio
# slides e exemplos do curso
Os slides deste curso so arranjados como uma seqncia de mais de 600 pginas hyper-
linked que contm notas da sintaxe de Java 3D, comentrios usuais de Java 3D, ou imagens de
aplicaes de Java 3D de exemplo. Clicando no nome do arquivo debaixo de uma imagem
traz acima uma janela que mostra o arquivo de fonte de Java que gerou a imagem. Os
arquivos fonte de Java contm os comentrios extensivos que fornecem a informao sobre as
tcnicas que o arquivo ilustra.
Compilar e executar o arquivo do exemplo de Java com uma linha de comando trazem acima
uma aplicao de Java que ilustra uma caracterstica de Java 3D. A maioria tais de aplicaes
incluem os menus e as outras opes da interao com que voc pode explorar caractersticas
de Java 3D.
As notas do curso fornecem uma vista geral de Java 3D. Ns recomendamos que voc invista
em um livro de Java 3D para comear a cobertura completa da linguagem. Um dos autores do
curso um autor da especificao de Java 3D, disponvel de Addison-Wesley: The Java 3D
API Specification, ISBN 0-201-32576-4, 1997.
Uso destas notas de curso
Somos perguntados frequentemente se halguma limitao no uso destas notas de curso. A
resposta : As partes destas notas de curso so o copyright (c) 1999 pelo henry A. Sowizral, e
o copyright (c) 1999 por David R. Nadeau. Os usurios e a posse destas notas de curso so
concedidos por este meio um copyright e uma licena no exclusiva, livre de royalties da
patente de projeto para usar este material em aplicaes individuais. A licena no concedida
para o uso comercial, nem inteiro ou em parte, sem permisso escrita prvia dos autores. Este
material fornecido "COMO " sem garantia expressa ou implicada de qualquer tipo.
Voc est livre usar estas notas de curso integralmente ou em parte ajudar-lhe ensinar seu
prprio curso de Java 3D. Voc pode traduzir estas notas em outras lnguas e voc pode afixar
cpias destas notas em seu prprio Web site, por muito tempo com a observao de copyright
acima includa tambm. Voc no pode, entretanto, vender estas notas do tutorial para obter
lucro ou inclui-las em um CD-ROM ou no outro produto de meios sem permisso escrita.
Se voc usar estas notas tutoriais, ns perguntamos que voc:
# d-nos o crdito para o material original
# dizer-lhes desde que ns gostamos do escutar sobre o uso de nosso material!
Se voc encontrar erros nas notas, diga-nos por favor. Ns trabalhamos duramente para tentar
e fazer as anotaes livres de bugs, mas se algo ocorrer, ns gostaramos de repar-lo antes
que outros estejam confundidos por nosso erro.
Contato
David R. Nadeau
University of California
NPACI/SDSC, MC 0505
9500 Gilman Drive
La Jolla, CA 92093-0505
(619) 534-5062
FAX: (619) 534-5152
nadeau@sdsc.edu
http://www.sdsc.edu/~nadeau
Tradutor
Jos Remo Ferreira Brega
Fundao de Ensino Eurpides Soares da Rocha
Av. Higino Muzzi Filho, 529
Campus Universitrio
Marlia - SP
(14) 421-0833 Ramal 353
FAX (14) 423-2516
remo@fundanet.br
Introduo a Programao com Java 3D
Informao dos Autores
Henry A. Sowizral (Organizador)
Ttulo Distinguished Engineer
Afiliao Sun Microsystems, Inc.
Endereo 901 San Antonio Road, MS UMPK14-202
Palo Alto, CA 94303-4900
UPS, Fed Ex: 14 Network Circle
Menlo Park, CA, 94025
Email henry.sowizral@eng.sun.com
Henry Sowizral um Engenheiro Coordenador na Sun Microsystems onde o
arquiteto principal da API Java. Suas reas de interesse incluem a realidade virtual,
visualizao de grandes modelos, e simulao distribuda e simultnea. Ensinou cursos
em tpicos incluindo os sistemas especialistas e realidade virtual em conferncias
incluindo COMPCON, Supercomputing, VRAIS, e SIGGRAPH. O Henry ensinou
Java 3D em SIGGRAPH, em Eurographics, em visualization, em JavaOne, em VRAIS,
e em outras conferncias.
Henry um co-autor do livro a especificao de Java 3D API, publicado por Addison-
Wesley. Est ligado a um B.S. em Informao e Cincia da Computao da
Universidade da Califrnia, de Irvine, e de um M.Phil. e de um Ph.D. de Cincia da
Computao da universidade de Yale.
David R. Nadeau
Ttulo Cientsta Principal
Afiliao San Diego Supercomputer Center (SDSC)
University of California, San Diego (UCSD)
Endereo NPACI/SDSC, MC 0505
9500 Gilman Drive
La Jolla, CA 92093-0505
Email nadeau@sdsc.edu
Home page http://www.sdsc.edu/~nadeau
Dave Nadeau um cientista principal no centro de supercomputao de San Diego, em
um centro de pesquisa nacional especializado na cincia computacional e na
engenharia, situada no campus da universidade de Califrnia, San Diego. Suas reas de
interesse incluem a visualizao cientfica e realidade virtual, ensinou Java 3D e
VRML em conferncias mltiplas including SIGGRAPH, Eurographics,
Supercomputing, WebNet, WMC/SCS, VRAIS, e visualization.
Dave um co-autor do The VRML 2.0 Sourcebook John Wiley & Sons. Est ligado a
um B.S. na engenharia aeroespacial da University of Colorado, Boulder, um M.S. na
engenharia mecnica na Purdue University, e est no programa de Ph.D. na Engenharia
Eltrica e de Computao na University of California, San Diego
Introduo a Programao com Java 3D
Usando exemplos Java
Estas notas de curso incluem dzias de aplicaes separadas de Java que ilustram o uso
de Java 3D. O cdigo de fonte para estas aplicaes includo nos arquivos com
extenses do nome de arquivo .java. O byte-code compilado para estes arquivos de
Java no includo! Para usar estes exemplos, voc necessitar compilar
primeiramente as aplicaes.
Compilando Java
O cdigo de fonte para todos os exemplos de Java 3D est na pasta dos exemplos. As
imagens, o som, e os arquivos da geometria usadas por estes exemplos so contidos tambm
dentro da mesma pasta. Um arquivo README.txt na pasta lista as aplicaes de Java 3D
includas nela.
Para compilar os exemplos Java, voc necessitar:
A API Java 3D 1.1 arquivos class (ou superior)
O JDK Java 1.2 (Java 2 Platform) arquivos class (ou superior)
Um compilador Java
Os arquivos class JDK 1.2 class esto disponveis em forma livre de JavaSoft em
http://www.javasoft.com.
Os arquivos class Java 3D class files esto disponveis em forma livre de Sun Microsystems
em http://www.sun.com/desktop/java3d.
Existem H mltiplos compiladores de Java disponveis para a maioria de plataformas.
JavaSoft fornece o Kit do desenvolvimento de Java (JDK) livre de seu Web site em
http://www.javasoft.com. O JDK inclui o compilador do javac e instrues em como us-lo.
Os ambientes comerciais mltiplos do desenvolvimento de Java esto disponveis de
Microsoft, de Symantec, e de outros. Uma lista moderna de produtos disponveis de Java est
disponvel no Web site de Developer.com em
http://www.developer.com/directories/pages/dir.java.html.
Uma vez possuindo os arquivos class da API Java e um compilador de Java, voc pode
compilar os arquivos fornecidas de Java. Infelizmente, ns no podemos dar-lhe sentidos
explcitos em como a faa isto. Cada plataforma e compilador de Java so diferentes. Voc
ter que consultar manuais do seu software.
Executando os Exemplos Java 3D
Para executar uma aplicao de Java, voc deve executar o intrprete de Java e dar-lhe um
arquivo class de Java como um argumento, como esta:
java MyClass
O interpretador de Java procura o arquivo MyClass.class no diretrio atual e carrega ele, e
todas os arquivos adicionais necessrias por essa classe.
Pgina Inicial
Introduo ao Java 3D
Sumrio
Seo1 - Introduo, Grafos de Cena, Formas e Aparncia
Bem-vindo 1
Introduo 5
Construindo contedo 3D com um grafo de cena 24
Construindo formas 3D 65
Controlando a aparncia 103
Seo 2 - Grupos, Transformaes, Mapeamento de Textura, Iluminao
Agrupando formas 138
Transformando formas 149
Usando grupos de finalidades especiais 171
Introduzindo mapeamento de texturas 196
Usando coordenadas de textura 212
Usando geometria raster 235
Iluminando o ambiente 245
Seo 3 - Universos, Viso, Entrada, Behaviors
Construindo um universo virtual 272
Introduzindo o modelo de viso 283
Vendo a cena 321
Construindo um universo simples 360
Usando dispositivos de entrada 366
Criando comportamentos 381
Seo 4 - Interpoladores, Picking, Backgrounds, Fog
Criando interpolador de comportamentos 409
Usando behaviors especializados 437
Escolhendo formas 448
Criando fundos 469
Trabalhando com fog 489
Seo 5 - Texto, Geometria Raster, Mapeamento Avanado de Texturas
Construindo formas de texto 516
Controlando a aparncia de texturas 532
Adicionando som 549
Controlando o som do ambiente 584
Concluses 601
1
Bem-vindo
Introduo ao Java 3D 2
Programao do Curso 3
Escopo do Curso 4
2
Bem-vindo
Introduco ao Java3D
Bem-vindo ao Curso
3
Bem-vindo
Programao do Curso
Seo 1 Introduo, Grafos de Cena, Formas,
Aparncia
Seo 2 Grupos, Transformaes,
Mapeamento de texturas, Iluminao
Seo 3 Universos, Pontos de vista, Entrada,
Behaviors
Seo 4 Interpoladores, Picking,
Backgrounds, Fog
Seo 5 Geometria de Texto, Mapeamento de
Avanado de texturas, Som
ambiente
4
Bem-vindo
Escopo do Curso
Introduzir os conceitos e terminologia de Java3D
Discutir importantes classes Java3D
Ilustrar como escrever aplicaes ou applets em
Java3D
Discutir padres de utilizao, tcnicas e truques
5
Introduo
O que Java 3D? 6
O que Java 3D? 7
O que Java 3D faz? 8
O que Java 3D faz? 9
Em que reas de aplicao pode-se usar Java 3D? 10
Exemplos: Visualizao Cientifica 11
Exemplos: Dados Abstratos (Financeiro) 12
Exemplos: Aprendizado Mdico 13
Exemplos: CAD 14
Exemplos: Anlises 15
Exemplos: Animaes 16
Exemplos: 3D Logos 17
Exemplos: Visualizao Cientifica 18
Que software eu preciso para usar Java 3D? 19
Que hardware eu preciso para usar Java 3D? 20
Como eu executo uma aplicao/applet Java 3D? 21
Como Java 3D se compara como outras APIs? 22
Resumo 23
6
Introduo
O que Java 3D?
Java 3D uma API (Application Programming
Interface) 3D grfica interativa para construo de
aplicaes e applets em Java
Uma maneira de desenvolver e apresentar contedo
3D
Projetada para "escrever uma vez e executar em
qualquer lugar" (Write once, run anywhere)
Multiplataforma (processadores e pipes)
Mltiplos ambientes de display
Mltiplos dispositivos de entrada
7
Introduo
O que Java 3D?
Aumente a base de programao
Pense em objetos . . . no em vrtices
Pense em contedo . . . no em processo de
renderizao
8
Introduo
O que Java 3D faz?
Fornece uma API java no proprietria independente
de plataforma
Integra-se com outras APIs Java: processamento de
imagens, fontes, desenhos 2D, interfaces do usurio,
etc.
Habilita o desenvolvimento de aplicaes de alto
nvel
O autor mantm o foco no contedo, no na
renderizao
Java 3D gerencia a melhor renderizao
9
Introduo
O que o Java 3D faz?
Executa otimizaes de renderizao
Gerenciamento de cena
Contm culling baseado sobre visibilidade
Uso eficiente de pipeline
Renderizao paralela
Compilao de cena (reorganizao, combinao,
etc.)
E obtem alta performance
Tirada atravs de OpenGL/Direct3D
Usa o hardware acelerador grfico 3D quando
disponvel
10
Introduo
Em que reas de aplicao pode-se usar
Java 3D?
Visualizao cientfica
Visualizao de informaes
Visualizao na medicina
Sistemas de Informao Geogrfica (GIS)
Projeto auxiliado por computador (CAD)
Animaes
Educao
11
Introduo
Exemplos: Visualizao Cientfica
12
Introduo
Exemplos: Dados Abstratos (Financeiros)
13
Introduo
Exemplos: Aprendizado Mdico
14
Introduo
Exemplos: CAD
15
Introduo
Exemplos: Anlises
16
Introduo
Exemplos: Animaes
17
Introduo
Exemplos: 3D Logos
18
Introduo
Exemplos: Visualizao Cientfica
Browser para Anatomia
Universidade de
Massachusets e
Brigham Women's
Hospital
Visualizao
Colaborativa
Space Science e
Engineering Center
(SSEC)
19
Introduo
Que software preciso para usar Java 3D?
Kit de desenvovimento Java
Plataforma Java 2
Disponvel em http://java.sun.com
Kit de desenvolvimento Java 3D
Java 3D 1.1 ou superior
Disponvel em http://www.sun.com/desktop/java3D
A Sun fornece verses para Windows 9x/NT e
Solaris
A verso Linux est disponvel
Outras verses, de outras plataformas, so
disponibilizadas pelo respectivos vendedores
20
Introduo
Que hardware preciso para usar Java 3D?
Voc precisar de placa grfica aceleradora 3D
Em PCs:
Existe uma grande variedade de placas grficas para
PC
Devem suportar caractersticas de OpenGL 1.1
Uma verso para Direct3D est em desenvolvimento
Verso Linux usa Mesa
Em Suns:
Creator 3D ou hardware Elite 3D
Suporta OpenGL 1.2
21
Introduo
Como eu executo uma aplicao/applet
Java 3D?
Aplicaes Java 3D:
Execute como qualquer outra aplicao Java
prompt> java minhaaplicao
Applets Java 3D:
Use o Java plug-in no Netscape ou Internet Explorer
Inclua o applet em uma pgina Web
O Java plug-in automaticamente faz os downloads do
JDK e do Java 3D caso j no estejam instalados.
22
Introduo
Como Java 3D se compara com outras
APIs?
APIs "mais antigas" habilitam somente controle de
estado de hardware em baixo nvel
Fornecem e requerem controle detalhado
OpenGL, Direct3D, game engines de baixo nvel
APIs "mais recentes" focam no controle de contedo
em alto nvel
Fornecem alguma otimizao na renderizao
Java 3D
VRML
SGI OpenInventor, Optimizer/Cosmo3D (sendo
descontinuado)
SGI-Microsoft "Fahrenheit"
23
Introduo
Resumo
Java 3D uma API de alto nvel para a construo
de aplicaes e applets 3D interativas em Java
Escreva uma vez, rode em qualquer lugar . . . em
3D!!
24
Construindo um contedo 3D com um grafo de cena
Construindo um grafo de cena 25
Um exemplo grafo de cena 26
Esquematizando um diagrama grafo de cena 27
Exemplos de criao de grandes cenas 28
Construindo um grafo de cena 29
Processando um grafo de cena 30
Examplos de caractersticas de Java 3D 31
Exemplos de caractersticas de Java 3D 32
Exemplos de caractersticas de Java 3D 33
Usando a terminologia grafo de cena 34
Base da hierarquia da classe grafo de cena 35
Construindo um grafo de cena 36
Construindo um grafo de cena 37
Usando terminologia universo 38
Usando terminologia ramo (branch) 39
Esquematizando um diagrama de universo 40
Hierarquia da classe Superstructure 41
Construindo um universo 42
Construindo um universo 43
Construindo o contedo da cena 44
Carregando o contedo da cena de arquivos 45
Construindo a superestrutura grafo de cena 46
Esquematizando um diagrama de universo simples 47
Exemplo HelloWorld 48
Um exemplo de cdigo HelloWorld 49
Um exemplo de cdigo HelloWorld 50
Um exemplo de cdigo HelloWorld 51
Um exemplo de cdigo HelloWorld 52
Exemplo HelloWorld 53
Compondo um n vivo 54
Verificando se o n est vivo 55
Compilando um grafo de cena 56
Compilando um grafo de cena 57
Controlando capacidades de acesso 58
Controlando capacidades de acesso 59
Controlando capacidades de acesso 60
Controlando capacidades de acesso 61
Resumo 62
Resumo 63
Resumo 64
25
Construindo um contedo 3D com um gafo de cena
Construindo um grafo de cena
Um grafo de cena uma "rvore-famlia " contendo
os dado da cena
"Filhos" so as formas, luzes, sons, etc.
"Pais" so grupos de filhos e outros pais
Isso define um agrupamento hierrquico de formas
A aplicao constroi um grafo de cena usando
classes e mtodos Java 3D
Java 3D renderiza tal grafo de cena na tela
26
Construindo um contedo 3D com um gafo de cena
Exemplo de grafo de cena
Por exemplo, imagine a construo de um avio de
brinquedo:
Inicie com as partes sobre
a mesa
Monte as partes
relacionadas
Junte todas as partes finalizando o avio
27
Construindo um contedo 3D com um gafo de cena
Esquematizando um diagrama de grafo de
cena
A esquematizao do diagrama de um grafo de cena
pode clarificar o projeto e facilitar o desenvolvimento
do software
28
Construindo um contedo 3D com um gafo de cena
Exemplos de criao de grandes cenas
Grafo de cena Java 3D pode incluir um grande
nmero de formas
Landing gear
192 shapes
Boom box
11,000 shapes
29
Construindo um contedo 3D com um gafo de cena
Construindo um grafo de cena
Grafos de cena so construdos a partir de
componentes que incluem:
Formas (geometria e aparncia)
Grupos e transformaes
Luzes
Fog e backgrounds
Sons e som ambiente (reverb)
Behaviors
View platforms (pontos de vista)
30
Construindo um contedo 3D com um gafo de cena
Processando um grafo de cena
Java 3D renderiza o grafo de cena
Grafo de cena especifica o contedo, no a ordem de
renderizao
A ordem de renderizao est acima do Java 3D
Java 3D usa threads separadas, independentes e
assncronas para:
Renderizao grafica
"Renderizao" de som
Animao "execuo de comportamento (behavior )"
Gerenciamento de dispositivos de entrada
Gerao de eventos (deteco de colises)
31
Construindo um contedo 3D com um grafo de cena
Exemplos de caractersticas de Java 3D
Voc pode controlar a cor da forma e textura . . .
32
Construindo um contedo 3D com um grafo de cena
Exemplos de caractersticas de Java 3D
. . . efeitos de iluminao e nvoa . . .
Monumento Colunado
33
Construindo um contedo 3D com um grafo de cena
Exemplos de caractersticas de Java 3D
. . . posicionamento de formas, orientao, e
tamanho e como estas trocam no tempo, e mais
Jetsons-Viso Logo
Suspenso de Carro Andando na Fbrica
34
Construindo um contedo 3D com um grafo de cena
Usando a terminologia grafo de cena
Mas primeiro, alguma terminologia . . .
N (node): um tem do grafo de cena
Ns folhas (Leaf nodes): ns que no tem filhos
Formas, luzes, sons etc.
Animao de comportemento (Animation behaviors)
Ns de grupo (Group nodes): ns com filhos
Transformaes, switches, etc.
Componente de n (Node component): um pacote de
atributos para um n
Geometria da forma
Cor da forma
Dados de som para tocar
35
Construindo um contedo 3D com um grafo de cena
Base da hierarquia da classe Scene graph
Ns folhas, ns de grupo, componentes de ns, e
diferentes tipos de tudo isso levam a . . . hierarquia da
classe Java 3D
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.Node
javax.media.j3d.Group
javax.media.j3d.Leaf
javax.media.j3d.NodeComponent
36
Construindo um contedo 3D com um grafo de cena
Construindo um grafo de cena
Construa ns instanciando a classe Java 3D
Shape3D myShape1 = new Shape3D( myGeom1,
myAppear1 );
Shape3D myShape2 = new Shape3D( myGeom2 );
Modifique os ns chamando mtodos de uma instncia
myShape2.setAppearance( newAppear2 );
Construa grupos de ns
Group myGroup = new Group( );
myGroup.addChild( myShape1 );
myGroup.addChild( myShape2 );
37
Construindo um contedo 3D com um grafo de cena
Construindo um grafo de cena
Ns necessitamos montar pedaos do conjunto, cada
um em sua prprio grafo de cena
Construa os componentes separadamente
Monte-os dentro de um recipiente comum: o
universo virtual (virtual universe)
Uma forma para combinar grafos de cena
Um lugar para a raiz (root) do grafo de cena
38
Construindo um contedo 3D com um grafo de cena
Usando a terminologia universo
Universo virtual (virtual universe) : uma coleo de
grafos de cena
Tipicamente um universo por aplicao
Local (locale): uma posio no universo em que se
pe os grafos de cena
Tipicamente um local por universo
Grafo ramo (Branch graph): um grafo de cena
Tipicamente vrios ramos (branch graphs) por local
39
Construindo um contedo 3D com um grafo de cena
Usando terminologia ramo (branch)
Os grafos de cena so tipicamente divididos em dois
tipos de ramos de grafos (branch graphs):
Ramo de contedo (Content branch): formas, luzes, e
outros contedos
Tipicamente mltiplos ramos por local
Ramo de vista (View branch): informao de
visualizao
Tipicamente uma por universo
Esta diviso opcional:
Contedo e informao de visualizao podem ser
intercaladas no mesmo ramo (e as vezes devem estar)
40
Construindo um contedo 3D com um grafo de cena
Esquematizando um diagrama de universo
Um universo constroi uma superestrutura para conter
grafos de cena
41
Construindo um contedo 3D com um grafo de cena
Hierarquia da classe Superstructure
Universos e locais so classes superestruturas por
organizao de contedo
Hierarquia da Classe
java.lang.Object
javax.media.j3d.VirtualUniverse
javax.media.j3d.Locale
javax.media.j3d.Node
javax.media.j3d.Group
javax.media.j3d.BranchGroup
42
Construindo um contedo 3D com um grafo de cena
Construindo um universo
Construa um universo
VirtualUniverse myUniverse = new VirtualUniverse(
);
Construa um local
Locale myLocale = new Locale( myUniverse );
Construa um ramo de grafo
BranchGroup myBranch = new BranchGroup( );
43
Construindo um contedo 3D com um grafo de cena
Construindo um universo
Construa ns e grupos de ns
Shape3D myShape = new Shape3D( myGeom, myAppear
);
Group myGroup = new Group( );
myGroup.addChild( myShape );
Adicione-os ao ramo de grafo
myBranch.addChild( myGroup );
Adicione o ramo de grafo ao locale
myLocale.addBranchGraph( myBranch );
44
Construindo um contedo 3D com um grafo de cena
Construindo o contedo da cena
As ricas caractersticas do Java 3D estabelece
habilitao para construir contedos 3D complexos
Construa o contedo diretamente dentro da sua
aplicao Java
Carregue o contedo de arquivos
Faa ambos
A classe File loader habilita a leitura de contedos
de arquivos em formatos padres
VRML (Virtual Reality Modeling Language)
OBJ (Alias|Wavefront object)
LW3D (Lightwave 3D scene)
outros . . .
45
Construindo um contedo 3D com um grafo de cena
Carregando o contedo da cena de
arquivos
Carregue um arquivo OBJ descrevendo um barco
[ A3DApplet ]
46
Construindo um contedo 3D com um grafo de cena
Construindo a superestrutura grafo de cena
Classes Utility ajudam a automatizar operaes comuns
Implementedas sobre Java 3D
A classe til SimpleUniverse constroi um arranjo comum de
classes universo, local, e vista
SimpleUniverse mySimple = new SimpleUniverse(
myCanvas );
mySimple.addBranchGraph( myBranch );
47
Construindo um contedo 3D com um grafo de cena
Esquematizando um diagrama de universo
simples
A classe SimpleUniverse encapsula uma
superestrura comum
48
Construindo um contedo 3D com um grafo de cena
Exemplo HelloWorld
Vamos construir um cubo multicolorido e gir-lo
sobre seu eixo vertical
[ HelloWorld ]
49
Construindo um contedo 3D com um grafo de cena
Um exemplo de cdigo HelloWorld
Importe as classes Java 3D . . .
import javax.media.j3d.*;
import javax.vecmath.*;
import java.applet.*;
import java.awt.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.universe.*;
public class HelloWorld
{
. . .
}
50
Construindo um contedo 3D com um grafo de cena
Um exemplo de cdigo HelloWorld
Construa a forma, canvas 3D, e o universo simples . . .
public static void main( String[] args ) {
Frame frame = new Frame( );
frame.setSize( 640, 480 );
frame.setLayout( new BorderLayout( ) );
Canvas3D canvas = new Canvas3D( null );
frame.add( "Center", canvas );
SimpleUniverse univ = new SimpleUniverse(
canvas );
univ.getViewingPlatform(
).setNominalViewingTransform( );
BranchGroup scene = createSceneGraph( );
scene.compile( );
univ.addBranchGraph( scene );
frame.show( );
}
51
Construindo um contedo 3D com um grafo de cena
Um exemplo de cdigo HelloWorld
Construa formas 3D dentro de um BranchGroup . . .
public BranchGroup createSceneGraph( )
{
BranchGroup branch = new BranchGroup( );
// Make a changeable 3D transform
TransformGroup trans = new TransformGroup( );
trans.setCapability(
TransformGroup.ALLOW_TRANSFORM_WRITE );
branch.addChild( trans );
// Make a shape
ColorCube demo = new ColorCube( 0.4 );
trans.addChild( demo );
. . .
52
Construindo um contedo 3D com um grafo de cena
Um exemplo de cdigo HelloWorld
Estabelea um comportamento animado para girar as formas . . .
// Make a behavor to spin the shape
Alpha spinAlpha = new Alpha( -1, 4000 );
RotationInterpolator spinner =
new RotationInterpolator( spinAlpha,
trans );
spinner.setSchedulingBounds(
new BoundingSphere( new Point3d( ),
1000.0 ) );
trans.addChild( spinner );
return branch;
}
53
Construindo um contedo 3D com um grafo de cena
Exemplo HelloWorld
O qual produz um cubo multicolorido 3D girando . . .
[ HelloWorld ]
54
Construindo um contedo 3D com um grafo de cena
Compondo um n vivo
Adicionando um ramo de grafo (branch graph) em um local
(locale) (ou simple universe) compe o n vivo (permitindo
desenho)
BranchGroup myBranch = new BranchGroup( );
myBranch.addChild( myShape );
myLocale.addBranchGraph( myBranch ); // feito
vivo!
Removendo o ramo de grafo do local, reverte o efeito
myLocale.removeBranchGraph( myBranch );// nao
vivo
55
Construindo um contedo 3D com um grafo de cena
Verificando se o n est vivo
Um mtodo sobre a classe SceneGraphObject
pergunta se o n est vivo
Mtodo
boolean isLive( )
56
Construindo um contedo 3D com um grafo de cena
Compilando um grafo de cena
Um mtodo sobre a classe BranchGroup compila
o ramo, otimizando-o para renderizao mais rpida
Mtodo
void compile( )
57
Construindo um contedo 3D com um grafo de cena
Compilando um grafo de cena
Compile um ramo de grafo antes de torn-lo vivo
BranchGroup myBranch = new BranchGroup( );
myBranch.addChild( myShape );
myBranch.compile( );
myLocale.addBranchGraph( myBranch );
58
Construindo um contedo 3D com um grafo de cena
Controlando capacidades de acesso
As capacidades dos ns (permisses) controlam o
acesso a leitura e escrita
Leia ou escreva qualquer atributo antes do n estar
vivo ou compilado
As capacidades controlam o acesso enquanto o n
est vivo ou compilado
Mantenha o nmero de capacidades pequena assim o
Java 3D pode fazer mais otimizaes durante a
compilao
59
Construindo um contedo 3D com um grafo de cena
Controlando capacidades de acesso
Mtodos em SceneGraphObject
estabelecem/limpam capacidades
Mtodos
void setCapability( int bit )
void clearCapability( int bit )
boolean getCapability( int bit )
60
Construindo um contedo 3D com um grafo de cena
Controlando capacidades de acesso
Cada n tem sua prpria capacidade de leitura e
escrita
Usualmente a capacidade separada para cada
atributo de um n
Os ns tambm herdam capacidades das classes dos
pais
Cada capacidade tem um nome em letras maisculas
Por exemplo, Shape3D inclui as capacidades:
ALLOW_APPEARANCE_READ
ALLOW_APPEARANCE_WRITE
ALLOW_GEOMETRY_READ
ALLOW_GEOMETRY_WRITE
ALLOW_COLLISION_BOUNDS_READ
ALLOW_COLLISION_BOUNDS_WRITE
Mais capacidades dos ns pais da classe Node,
incluem:
ALLOW_BOUNDS_READ
ALLOW_BOUNDS_WRITE
ALLOW_PICKABLE_READ
ALLOW_PICKABLE_WRITE
. . . e outras
61
Construindo um contedo 3D com um grafo de cena
Controlando capacidades de acesso
Estabelea capacidades enquanto voc constroi seu contedo
Shape3D myShape = new Shape3D( myGeom, myAppear
);
myShape.setCapability(
Shape3D.ALLOW_APPEARANCE_WRITE );
Depois de o n estar vivo, troque os atributos que possuem capacidades
habilitadas
myShape.setAppearance( newAppear ); // permitido
Mas voc no pode trocar atributos para os quais voc no tem as
capacidades estabelecidas
myShape.setGeometry( newGeom ); // error!
62
Construindo um contedo 3D com um grafo de cena
Resumo
Um grafo de cena uma hierarquia de grupos de
formas, luzes, sons, etc.
Sua aplicao constroi o grafo de cena usando
classes e mtodos Java 3D
A implementao Java 3D usa o grafo de cena atrs
da cena para renderizar formas, tocar sons, executar
animaes, etc.
63
Construindo um contedo 3D com um grafo de cena
Resumo
Um universo virtual (virtual universe) domina tudo
Uma posio local (locale) posiciona um ramo de
grafo (branch graph) num universo
Um ramo de grafo (branch graph) um grafo de
cena
Um n (node) um tem em um grafo de cena
Um componente de n (node component) pacote de
atributos para um n
64
Construindo um contedo 3D com um grafo de cena
Resumo
Adicionando um ramo de grafo a um local torna o n
vivo e possibilitando o seu desenho
Compilando um ramo de grafo otimiza para uma
renderizao mais rpida
As Capacidades controlam o acesso aos atributos do
n depois de o n estar vivo ou compilado
Poucas capacidades habilitam mais otimizaes
65
Construindo formas 3D
Motivao 66
Exemplo 67
Hierarquia da classe Shape3D 68
Mtodos da classe Shape3D 69
Construindo geometrias usando coordenadas 70
Construindo geometrias usando coordenadas 71
Usando o sistema de coordenadas da mo direita 72
Usando ordem de coordenadas 73
Usando ordem de coordenadas 74
Definindo vrtices 75
Definindo vrtices 76
Construindo geometrias 77
Hierarquia da classe GeometryArray 78
Mtodos da classe GeometryArray 79
Mtodos da classe GeometryArray 80
Construindo diferentes tipos de geometria 81
Construindo um PointArray 82
Um exemplo de cdigo PointArray 83
Construindo um LineArray 84
Um exemplo de cdigo LineArray 85
Construindo um TriangleArray 86
Um exemplo de cdigo TriangleArray 87
Construindo um QuadArray 88
Um exemplo de cdigo QuadArray 89
Construindo geometrias limpas 90
Hierarquia da classe GeometryStripArray 91
Construindo um LineStripArray 92
Construindo um TriangleFanArray 93
Construindo um TriangleStripArray 94
Construindo uma geometria indexada 95
Hierarquia da classe IndexedGeometryArray 96
Mtodos da classe IndexedGeometryArray 97
Mtodos da classe IndexedGeometryArray 98
Exemplo Gearbox 99
Resumo 100
Resumo 101
Resumo 102
66
Contruindo formas 3D
Motivao
O n folha Shape3D constri um objeto 3D com:
Geometry:
A forma ou estrutura da forma
Appearance:
A cor, transparncia, e sombra da forma
Java 3D suporta mltiplas geometrias e
caractersticas de aparncia
Comecemos pela geometria depois a aparncia
67
Construindo formas 3D
Exemplo
[ GearBox ]
68
Construindo formas 3D
Hierarquia da classe Shape3D
A classe Shape3D extende a classe Leaf
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.Node
javax.media.j3d.Leaf
javax.media.j3d.Shape3D
69
Construindo formas 3D
Mtodos da classe Shape3D
Mtodos da Shape3D fixam a geometria e os
atributos de aparncia
Mtodos
Shape3D( )
Shape3D( Geometry geometry,
Appearance appearance )
void setGeometry( Geometry geometry
)
void setAppearance( Appearance
appearance )
70
Construindo formas 3D
Construindo geometrias usando
coordenadas
Construindo geometrias como um jogo de "ligar
pontos"
Posicione "pontos" nas coordenadas 3D
Conecte os pontos para formar as formas 3D
Por exemplo, para construir uma pirmide inicie com
cinco coordenadas
71
Construindo formas 3D
Construindo geometrias usando
coordenadas
Termine a pirmide conectando os pontos para
formar tringulos
1. 2.
3. 4.
72
Construindo formas 3D
Usando o sistema de coordenadas de mo
direita
As coordenadas 3D so dadas no sistema de
coordenadas da mo direita
X = esquerda para direita
Y = baixo para cima
Z = trs para frente
As distncias so convencionalmente em metros
73
Construindo formas 3D
Usando ordem de coordenadas
Os polgonos tm frente e verso:
Por default, somente o lado da frente renderizado
A ordem de numerao do polgono determina qual
lado a frente
Muitos polgonos somente necessitam de um lado
renderizado
Voc pode renderizar os dois lados, a um custo de
performance
74
Construindo formas 3D
Usando a ordem de coordenadas
Use a regra da mo direita:
Gire seus dedos da mo direita ao redor do permetro
do polgono na ordem dada para os vrtices (counter-
clockwise)
Seu dedo indica a frente do polgono
75
Construindo formas 3D
Definindo vrtices
Um vrtice descreve um canto de um polgono e
contm:
Uma coordenada 3D
Uma cor
Uma coordenada textura
Um vetor normal de iluminao
A coordenada 3D no vrtice necessria, o resto so
opcionais
76
Construindo formas 3D
Definindo vrtices
O vrtice normal define a informao da superfcie
para iluminao
Mas a ordem de giro de coordenadas define o
polgono da frente e de verso, ento este ltimo lado
retirado
Se voc deseja iluminar a sua geometria, voc deve
especificar o vrtice normal de iluminao
Normais de iluminao devem ser em unidades de
comprimento
77
Construindo formas 3D
Construindo geometrias
Java 3D possui mltiplos tipos de geometrias que
usam coordenadas 3D:
Pontos, linhas, tringulos; e quadrilteros
Texto estrudado 3D
Tipo de imagem Raster
Construtores geomtricos diferem no que eles
constroem, e como voc indica ao Java 3D para
constru-los
Vamos olhar para os pontos, linhas, tringulos; e
quadrilteros primeiro . . .
78
Construindo formas 3D
Hierarquia da classe GeometryArray
Todos os tipos de geometrias so derivados de
Geometry
GeometryArray extende ela para construir
pontos, linhas, tringulos; e quadrilteros
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.NodeComponent
javax.media.j3d.Geometry
javax.media.j3d.GeometryArray
79
Construindo formas 3D
Mtodos da classe GeometryArray
Mtodos genricos na classe GeometryArray
fixam coordenadas e normais
Mtodos
void setCoordinate( int index, *
coordinate )
void setCoordinates( int index, *
coordinate )
void setNormal( int index, * normal
)
void setNormals( int index, * normal
)
Variantes dos mtodos de coordenadas aceitam
float, double, Point3f; e Point3d
Variantes dos mtodos de coordenadas aceitam
float e Vector3f
80
Construindo formas 3D
Mtodos da classe GeometryArray
Mtodos genricos na classe GeometryArray
tambm fixam cores e coordenadas de textura
Sero discutidos na seo aparncia da forma (shape
appearance)
Mtodos
void setColor( int index, * color )
void setColors( int index, * color
)
void setTextureCoordinate( int
index, * texCoord )
void setTextureCoordinates( int
index, * texCoord )
Variantes dos mtodos cor aceitam byte, float,
Color3f, Color4f, Color3b, Color4b; e
Vector3f
Variantes dos mtodos de coordenadas de textura
aceitam float, Point2f; e Point3f
81
Construindo formas 3D
Construindo diferentes tipos de geometria
Existem 14 tipos de disposio de geometrias
agrupadas como:
Geometrias simples:
PointArray, LineArray, TriangleArray, e
QuadArray
Geometrias limpas:
LineStripArray, TriangleStripArray, e
TriangleFanArray
Geometrias indexadas simples:
IndexedPointArray, IndexedLineArray,
IndexedTriangleArray, e
IndexedQuadArray
Geometrias indexed limpas:
IndexedLineStripArray,
IndexedTriangleStripArray, e
IndexedTriangleFanArray
Vamos olhar para os tipos de geometrias simples
primeiro . . .
82
Construindo formas 3D
Construindo um PointArray
Um PointArray constri
pontos
Um ponto para cada vrtice
O tamanho dos pontos
podem ser controlados pelos
atributos de aparncia da
forma
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.NodeComponent
javax.media.j3d.Geometry
javax.media.j3d.GeometryArray
javax.media.j3d.PointArray
83
Construindo formas 3D
Um exemplo de cdigo PointArray
Crie uma lista de coordenadas 3D para os vrtices
Point3f[] myCoords = {
new Point3f( 0.0f, 0.0f, 0.0f ),
. . .
}
Crie um PointArray e fixe as coordenadas dos vrtices
PointArray myPoints = new PointArray(
myCoords.length,
GeometryArray.COORDINATES );
myPoints.setCoordinates( 0, myCoords );
Monte a forma
Shape3D myShape = new Shape3D( myPoints, myAppear
);
84
Construindo formas 3D
Construindo um LineArray
Um LineArray constri
linhas
Entre cada par de vrtices
O comprimento e o estilo da
linha podem ser controladas
pelos atributos de aparncia
da forma
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.NodeComponent
javax.media.j3d.Geometry
javax.media.j3d.GeometryArray
javax.media.j3d.LineArray
85
Construindo formas 3D
Um exemplo de cdigo LineArray
Crie uma lista de coordenadas 3D para os vrtices
Point3f[] myCoords = {
new Point3f( 0.0f, 0.0f, 0.0f ),
. . .
}
Crie um LineArray e fixe as coordenadas dos vrtices
LineArray myLines = new LineArray(
myCoords.length,
GeometryArray.COORDINATES );
myLines.setCoordinates( 0, myCoords );
Monte a forma
Shape3D myShape = new Shape3D( myLines, myAppear
);
86
Construindo formas 3D
Construindo um TriangleArray
Um TriangleArray
constri tringulos
Entre cada tripla de vrtices
a renderizao pode ser
controlada pelos atributos de
aparncia da forma
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.NodeComponent
javax.media.j3d.Geometry
javax.media.j3d.GeometryArray
javax.media.j3d.TriangleArray
87
Construindo formas 3D
Um exemplo de cdigo TriangleArray
Crie uma lista de coordenadas 3D e normais para os vrtices
Point3f[] myCoords = {
new Point3f( 0.0f, 0.0f, 0.0f ),
. . .
}
Vector3f[] myNormals = {
new Vector3f( 0.0f, 1.0f, 0.0f ),
. . .
}
Crie um TriangleArray e fixe as coordenadas dos vrtices e
normais
TriangleArray myTris = new TriangleArray(
myCoords.length,
GeometryArray.COORDINATES |
GeometryArray.NORMALS );
myTris.setCoordinates( 0, myCoords );
myTris.setNormals( 0, myNormals );
Monte a forma
Shape3D myShape = new Shape3D( myTris, myAppear
);
88
Construindo formas 3D
Construindo um QuadArray
Um QuadArray contri
quadrilteros
Entre cada qudrupla de
vrtices
A renderizao pode ser
controlada pelos atributos de
aparncia da forma
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.NodeComponent
javax.media.j3d.Geometry
javax.media.j3d.GeometryArray
javax.media.j3d.QuadArray
89
Construindo formas 3D
Um exemplo de cdigo QuadArray
Crie listas de coordenadas 3D e normais para os vrtices
Point3f[] myCoords = {
new Point3f( 0.0f, 0.0f, 0.0f ),
. . .
}
Vector3f[] myNormals = {
new Vector3f( 0.0f, 1.0f, 0.0f ),
. . .
}
Crie um QuadArray e fixe as coordenadas dos vrtices e normais
QuadArray myQuads = new QuadArray(
myCoords.length,
GeometryArray.COORDINATES |
GeometryArray.NORMALS );
myQuads.setCoordinates( 0, myCoords );
myQuads.setNormals( 0, myNormals );
Monte a forma
Shape3D myShape = new Shape3D( myQuads, myAppear
);
90
Construindo formas 3D
Construindo geometrias limpas
Os tipos de geometrias simples usam vrtices em . . .
pares, triplas, e qudruplas para construir linhas,
tringulos e quadrilteros um por vez
Geometrias limpas (Strip geometry) usam mltiplos
vrtices em . . .
Srie para construir mltiplas linhas e tringulos
Voc fornece uma lista de coordenadas (como
sempre)
Voc fornece a normal de iluminao, cor, e lista de
coordenadas de textura (opcionalmente)
Voc fornece a lista de comprimento limpa (strip
length list)
Cada lista de entrada d o nmero de vrtices
consecutivos para serem ligados
91
Construindo formas 3D
Hierarquia da classe GeometryStripArray
GeometryStripArray estende GeometryArray para
construir linhas e tringulos limpos
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.NodeComponent
javax.media.j3d.Geometry
javax.media.j3d.GeometryArray
javax.media.j3d.GeometryStripArray
javax.media.j3d.LineStripArray
javax.media.j3d.TriangleFanArray
javax.media.j3d.TriangleStripArray
92
Construindo formas 3D
Construindo um LineStripArray
Crie uma lista de coordenadas 3D para os vrtices
Point3f[] myCoords = {
new Point3f( 0.0f, 0.0f, 0.0f ),
. . .
}
Crie uma lista de vrtices de comprimento limpo
int[] stripLengths = { 4, 5 };
Crie um LineStripArray e fixe as coordenadas dos vrtices
LineStripArray myLines = new LineStripArray(
myCoords.length,
GeometryArray.COORDINATES,
stripLengths );
myLines.setCoordinates( 0, myCoords );
Monte a forma
Shape3D myShape = new Shape3D( myLines, myAppear
);
93
Construindo formas 3D
Construindo um TriangleFanArray
Crie uma lista de coordenadas 3D e normais de iluminao para os
vrtices
Point3f[] myCoords = {
new Point3f( 0.0f, 0.0f, 0.0f ),
. . .
}
Vector3f[] myNormals = {
new Vector3f( 0.0f, 1.0f, 0.0f ),
. . .
}
Crie a lista de vrtices de comprimento de leque
int[] fanLengths = { 5, 6 };
Crie o TriangleFanArray e fixe as coordenadas dos vrtices e
normais de iluminao
TriangleFanArray myFans = new TriangleFanArray(
myCoords.length,
GeometryArray.COORDINATES |
GeometryArray.NORMALS,
fanLengths );
myFans.setCoordinates( 0, myCoords );
myFans.setNormals( 0, myNormals );
Monte a forma
Shape3D myShape = new Shape3D( myFans, myAppear
);
94
Construindo formas 3D
Construindo um TriangleStripArray
Crie listas de coordenadas 3D e normais de iluminao para os
vrtices
Point3f[] myCoords = {
new Point3f( 0.0f, 0.0f, 0.0f ),
. . .
}
Vector3f[] myNormals = {
new Vector3f( 0.0f, 1.0f, 0.0f ),
. . .
}
Crie a lista de vrtices de comprimento limpo
int[] stripLengths = { 6, 5 };
Crie um TriangleStripArraye fixe as coordenadas dos
vrtices e normais de iluminao
TriangleStripArray myTris = new
TriangleStripArray(
myCoords.length,
GeometryArray.COORDINATES |
GeometryArray.NORMALS,
stripLengths );
myTris.setCoordinates( 0, myCoords );
myTris.setNormals( 0, myNormals );
Monte a forma
Shape3D myShape = new Shape3D( myTris, myAppear
);
95
Constuindo formas 3D
Construindo uma geometria indexada
Para superfcies, mesmos vrtices so usados para
linhas e tringulos adjacentes
Geometrias simples e limpas requerem coordenadas,
normais de iluminao, cores, e coordenadas de
texturas redundantes
A geometria indexed usa ndices juntamente com a
lista usual de coordenadas, normais de iluminao, etc.
ndices selecionam coordenadas para usar da sua lista
Use a coordenada multiplas vezes, mas fornece-a
somente uma
Indices tambm so usados para normais de
iluminao, cores, e coordenadas de textura
96
Construindo formas 3D
Hierarquia da classe IndexedGeometryArray
IndexedGeometryArray estende GeometryArray para construir
pontos, linhas, tringulos, e quadrilteros
IndexedGeometryStripArray estende IndexedGeometryArray
para construir linhas e tringulos limpos indexed
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.NodeComponent
javax.media.j3d.Geometry
javax.media.j3d.GeometryArray
javax.media.j3d.IndexedGeometryArray
javax.media.j3d.IndexedGeometryStripArray
javax.media.j3d.IndexedLineStripArray
javax.media.j3d.IndexedTriangleFanArray
javax.media.j3d.IndexedTriangleStripArray
javax.media.j3d.IndexedLineArray
javax.media.j3d.IndexedPointArray
javax.media.j3d.IndexedQuadArray
javax.media.j3d.IndexedTriangleArray
97
Construindo formas 3D
Mtodos da classe IndexedGeometryArray
Mtodos genricos na classe
IndexedGeometryArray fixam o ndice de
coordenadas e normais de iluminao
Mtodos
void setCoordinateIndex( int index,
int value )
void setCoordinateIndices( int
index, int[] value )
void setNormalIndex( int index, int
value )
void setNormalIndices( int index,
int[] value )
98
Construindo formas 3D
Mtodos da classe IndexedGeometryArray
Mtodos genricos na classe
IndexedGeometryArray tambm fixam os
ndices para cores e coordenadas de textura
Sero discutidos na seo aparncia da forma (shape
appearance)
Mtodos
void setColorIndex( int index, int
value )
void setColorIndices( int index,
int[] value )
void setTextureCoordinateIndex( int
index, int value )
void setTextureCoordinateIndices(
int index, int[] value )
99
Construindo formas 3D
Exemplo Gearbox
[ GearBox ]
100
Construindo formas 3D
Resumo
Uma forma 3D descrita por:
Geometry: forma ou estrutura
Appearance: colorao, transparncia,
sombreamento
Java 3D possui mltiplas tipos de geometrias que os
vrtices contm:
Coordinates: locaes XYZ 3D
Normals: vetor de direo 3D
Colors: cores misturadas de red-green-blue
Texture coordinates: locaes de imagens de texto
2D estrudadas
101
Construindo formas 3D
Resumo
Tipos simples de geometrias constroem pontos,
linhas, tringulos, e quadrilteros
Usando automaticamente vrtices fixados de 1, 2, 3,
ou 4
Geometrias limpas constroem linhas e tringulos
Usando vrtices em ligaes definidas pelo usurio
Tipos de geometria indexada constroem pontos,
linhas, tringulos, e quadrilteros
Usando coordenadas, normais de iluminao, etc.
selecionadas por ndices
102
Construindo formas 3D
Resumo
Java 3D tambm fornece mais uma dupla de tipos de
geometria, incluindo:
Geometria raster, discutida mais tarde
Geometria text, discutida nas notas finais (seo 5)
103
Controlando a aparncia
Motivao 104
Exemplo 105
Hierarquia da classe Appearance 106
Introduzindo os atributos de aparncia 107
Hierarquia da classe Appearance attributes 108
Mtodos da classe Appearance 109
Usando atributos de cor 110
Mtodos da classe ColoringAttributes 111
Um exemplo de cdigo ColoringAttributes 112
Usando atributos de materiais 113
Usando cores dos materiais 114
Mtodos da classe Material 115
Um exemplo de cdigo atibutos de materiais 116
Usando cores das coordenadas 117
Usando ndices de cores das coordenadas 118
Colorindo coordenadas 119
Usando atributos de transparncia 120
Usando modos de transparncia 121
Mtodos da classe TransparencyAttributes 122
Um exemplo de cdigo TransparencyAttributes 123
Usando atributos de pontos e linhas 124
Mtodos da classe PointAttributes 125
Mtodos da classe LineAttributes 126
Um exemplo de cdigo PointAttributes 127
Um exemplo de cdigo LineAttributes 128
Usando atributos de polgonos 129
Mtodos da classe PolygonAttributes 130
Um exemplo de cdigo PolygonAttributes 131
Usando atributos de renderizao 132
Mtodos da classe RenderingAttributes 133
Um exemplo de cdigo RenderingAttributes 134
Exemplo de aparncia 135
Resumo 136
Resumo 137
104
Controlando a aparncia
Motivao
Controlar como Java 3D renderiza Geometry
Cor
Transparncia
Modelo de sombras
Espessura da linha
E muito mais
Todo controle de aparncia encapsulado dentro da
classe Appearance, e seus componentes
105
Controlando a aparncia
Exemplo
[ ExAppearance ]
106
Controlando a aparncia
Hierarquia da classe Appearance
A classe Appearance especifica como renderizar a
geometria da forma
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.NodeComponent
javax.media.j3d.Appearance
107
Controlando a aparncia
Introduzindo os atributos de aparncia
Os atributos da aparncia so agrupados dentro de
vrios componentes de ns:
Controle de cor e transparncia
Material
ColoringAttributes
TransparencyAttributes
Controle de renderizao
PointAttributes
LineAttributes
PolygonAttributes
RenderingAttributes
Controle de textura (discutido mais adiante)
Texture
TextureAttributes
TexCoordGeneration
108
Controlando a aparncia
Hierarquia da classe Appearance attributes
Os vrios atributos de aparncia (appearance attributes)
estendem NodeComponent
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.NodeComponent
javax.media.j3d.ColoringAttributes
javax.media.j3d.LineAttributes
javax.media.j3d.PointAttributes
javax.media.j3d.PolygonAttributes
javax.media.j3d.RenderingAttributes
javax.media.j3d.TextureAttributes
javax.media.j3d.TransparencyAttributes
javax.media.j3d.Material
javax.media.j3d.TexCoordGeneration
javax.media.j3d.Texture
109
Controlando a aparncia
Mtodos da classe Appearance
Mtodos da classe Appearance fixam exatamente
quais atributos usar
Fixam somente aqueles que voc precisa, partindo o
restante dos seus valores default
Mtodos
Appearance( )
void setColoringAttributes(
ColoringAttributes
coloringAttributes )
void setMaterial( Material material
)
void setTransparencyAttributes(
TransparencyAttributes
transparencyAttributes )
void setLineAttributes(
LineAttributes lineAttributes )
void setPointAttributes(
PointAttributes pointAttributes )
void setPolygonAttributes(
PolygonAttributes polygonAttributes
)
void setRenderingAttributes(
RenderingAttributes
renderingAttributes )
110
Controlando a aparncia
Usando atributos de cor
ColoringAttributes controla:
Cor intrnsica (usada quando a iluminao est
desabilitada)
Modelo de sombreamento (flat ou Gouraud)
Use atributos de cor quando a forma no
sombreada
Pontos, linhas, e polgonos emissivos
Evite clculos custosos de sombreamento
111
Controlando a aparncia
Mtodos da classe ColoringAttributes
Mtodos da classe ColoringAttributes
selecionam a cor e o modelo de sombreamento
A cor default branca, e o modelo de sombreamento
default SHADE_GOURAUD
Mtodos
ColoringAttributes( )
void setColor( Color3f color )
void setShadeModel( int model )
Os modelos de sombras incluem: SHADE_FLAT e
SHADE_GOURAUD (default)
Os modelos de sombra FASTEST e NICEST so
selecionados automaticamente como o mais rpido, e
os modelos de melhor qualidade ficam disponveis
112
Controlando a aparncia
Um exemplo de cdigo ColoringAttributes
Crie ColoringAttributes para fixar uma cor intrnsica e um
modelo de sombreamento
ColoringAttributes myCA = new ColoringAttributes(
);
myCA.setColor( 1.0f, 1.0f, 0.0f );
myCA.setShadeModel(
ColoringAttributes.SHADE_GOURAUD );
Crie Appearance, fixando os atributos de cor, e monte a forma
Appearance myAppear = new Appearance( );
myAppear.setColoringAttributes( myCA );
Shape3D myShape = new Shape3D( myGeom, myAppear
);
113
Controlando a aparncia
Usando atributos de materiais
Material controla:
A cor: ambient, emissive, diffuse, e specular
Fator de Shininess (brilho)
Use materiais quando a forma sombreada
Muitas formas de cena
Sobrepe a cor intrnsica ColoringAttributes
(quando a luz est habilitada)
114
Controlando a aparncia
Usando cores dos materiais
Diffuse color fixa a principal cor do sombreamento,
atenuando (em cima - esquerda)
Specular color e shininess factor fazem a forma
aparentar brilho (em baixo - direita)
Emissive color faz a forma aparentar incandescncia
(em cima - direita)
115
Controlando a aparncia
Mtodos da classe Material
Mtodos da classe Material fixam cores de
sombreamento e ligam e desligam os efeitos de
iluminao
Os valores defaults incluem cores brancas diffuse e
specular, a cor emissive preta, (0.2,0.2,0.2) a cor
ambient, shininess de 64.0, e iluminao habilitada
Mtodos
Material( )
void setAmbientColor( Color3f color
)
void setEmissiveColor( Color3f color
)
void setDiffuseColor( Color3f color
)
void setSpecularColor( Color3f color
)
void setShininess( float shininess
)
void setLightingEnable( boolean
state )
116
Controlando a aparncia
Um exemplo de cdigo Material attributes
Crie Material para fixar as cores da forma
Material myMat = new Material( );
myMat.setAmbientColor( 0.3f, 0.3f, 0.3f );
myMat.setDiffuseColor( 1.0f, 0.0f, 0.0f );
myMat.setEmissiveColor( 0.0f, 0.0f, 0.0f );
myMat.setSpecularColor( 1.0f, 1.0f, 1.0f );
myMat.setShininess( 64.0f );
Crie Appearance, fixe o material, e monte a forma
Appearance myAppear = new Appearance( );
myAppear.setMaterial( myMat );
Shape3D myShape = new Shape3D( myGeom, myAppear
);
117
Controlando a aparncia
Usando as cores das coordenadas
Voc pode tambm fixar a cor de cada coordenada
geomtrica no GeometryArray
Cores das coordenadas sobrepe os atributos de cor,
na cor diffuse do material
Mtodos
void setColor( int index, * color )
void setColors( int index, * color
)
Aceitam mtodos variantes byte, float,
Color3f, Color4f, Color3b, e Color4b
118
Controlando a aparncia
Usando ndices de cores das coordenadas
Para geometria indexada, voc pode selecionar o
ndice de cores em IndexedGeometryArray
Mtodos
void setColorIndex( int index, int
value )
void setColorIndices( int index,
int[] value )
119
Controlando a aparncia
Colorindo coordenadas
As cores das coordenadas so interpoladas ao longo
de linhas ou atravs de polgonos
120
Controlando a aparncia
Usando atributos de transparncia
TransparencyAttributes controla:
A quantidade de transparncia (0.0 = opaco, 1.0 =
invisvel)
O modo de transparncia (screen_door, blend,
nenhum)
1
2
1
C
o
n
t
r
o
l
a
n
d
o

a

a
p
a
r

n
c
i
a
U
s
a
n
d
o

m
o
d
o
s

d
e

t
r
a
n
s
p
a
r

n
c
i
a

O

m
o
d
o

d
e

t
r
a
n
s
p
a
r

n
c
i
a

s
e
l
e
c
i
o
n
a

e
n
t
r
e

t
r
a
n
s
p
a
r

n
c
i
a
s

S
C
R
E
E
N
_
D
O
O
R
o
u
B
L
E
N
D
E
D
S
C
R
E
E
N
_
D
O
O
R
B
L
E
N
D
E
D
122
Controlando a aparncia
Mtodos da classe TransparencyAttributes
Mtodos da classe TransparencyAttributes
fixam a transparncia
Por default, a transparncia 0.0 (opaca) com o
modo de transparncia FASTEST
Mtodos
TransparencyAttributes( )
void setTransparency( float
transparency )
void setTransparencyMode( int mode
)
Os modos de transparncia incluem:
SCREEN_DOOR, BLENDED, NONE,
FASTEST(default), e NICEST
Os modos de transparncia FASTEST e
NICESTautomaticamente selecionam os modo mais
rpido e o modo de melhor qualidade disponveis
123
Controlando aparncia
Um exemplo de cdigo TransparencyAttributes
Crie TransparencyAttributes para fixar a quantidade de
transparncia e o modo
TransparencyAttributes myTA = new
TransparencyAttributes( );
myTA.setTransparency( 0.5f );
myTA.setTransparencyMode(
TransparencyAttributes.BLENDED );
Crie Appearance, fixe os atributos de transparncia, e monte a
forma
Appearance myAppear = new Appearance( );
myAppear.setTransparencyAttributes( myTA );
Shape3D myShape = new Shape3D( myGeom, myAppear
);
124
Controlando a aparncia
Usando atributos de pontos e linhas
PointAttributes controla:
Tamanho do ponto (em pixels)
Point anti-aliasing
LineAttributes controla:
A largura da linha (em pixels)
O padro de linha
Line anti-aliasing
125
Controlando a aparncia
Mtodos da classe PointAttributes
Mtodos da classe PointAttributes selecionam
a maneira que os pontos so renderizados
Por default, o tamanho do ponto 1.0 e o anti-
aliasing est desabilitado
Mtodos
PointAttributes( )
void setPointSize( float size )
void setPointAntialiasingEnable(
boolean state )
126
Controlando a aparncia
Mtodos da classe LineAttributes
Mtodos na classe LineAttributes selecionam a
maneira que as linhas so renderizadas
por default, a largura da linha 1.0, padro
PATTERN_SOLID, e o anti-aliasing desabilitado
Mtodos
LineAttributes( )
void setLineWidth( float width )
void setLinePattern( int pattern )
void setLineAntialiasingEnable(
boolean state )
Os padres de linhas incluem: PATTERN_SOLID
(default), PATTERN_DASH, PATTERN_DOT, e
PATTERN_DASH_DOT
127
Controlando a aparncia
Um exemplo de cdigo PointAttributes
Crie PointAttributes para fixar o tamanho do ponto e anti-
aliasing
PointAttributes myPA = new PointAttributes( );
myPA.setPointSize( 10.0f );
myPA.setPointAntialiasingEnable( true );
Crie Appearance, fixe os atributos dos pontos, e monte a forma
Appearance myAppear = new Appearance( );
myAppear.setPointAttributes( myPA );
Shape3D myShape = new Shape3D( myGeom, myAppear
);
128
Controlando a aparncia
Um exemplo de cdigo LineAttributes
Crie LineAttributes para fixar a largura da linha, padro, e anti-
aliasing
LineAttributes myLA = new LineAttributes( );
myLA.setLineWidth( 10.0f );
myLA.setLinePattern( LineAttributes.PATTERN_SOLID
);
myLA.setLineAntialiasingEnable( true );
Crie Appearance, fixe os atributos de linha, e monte a forma
Appearance myAppear = new Appearance( );
myAppear.setLineAttributes( myLA );
Shape3D myShape = new Shape3D( myGeom, myAppear
);
129
Controlando a aparncia
Usando atributos de polgonos
PolygonAttributes controla:
Face culling (frente, costas, nenhum)
Modo de preenchimento (pontos, linhas, cheio)
Z offset (compensao em Z)
130
Controlando a aparncia
Mtodos da classe PolygonAttributes
Mtodos da
classePolygonAttributesselecionam a maneira
que os polgonos so renderizados
Por default, as faces traseiras so culled, os polgonos
so preenchidos, e a compensao 0.0
Mtodos
PolygonAttributes( )
void setCullFace( int cullface )
void setPolygonMode( int mode )
void setPolygonOffset( float offset
)
Os modos de face culling incluem: CULL_NONE,
CULL_BACK (default), e CULL_FRONT
Os modos de polgonos incluem:
POLYGON_POINT, POLYGON_LINE, e
POLYGON_FILL (default)
131
Controlando a aparncia
Um exemplo de cdigo PolygonAttributes
Crie PolygonAttributes para fixar o modo culling e o estilo de
preenchimento
PolygonAttributes myPA = new PolygonAttributes(
);
myPA.setCullFace( PolygonAttributes.CULL_NONE );
myPA.setPolygonMode(
PolygonAttributes.POLYGON_FILL );
Crie Appearance, fixe os atributos do polgono, e monte a forma
Appearance myAppear = new Appearance( );
myAppear.setPolygonAttributes( myPA );
Shape3D myShape = new Shape3D( myGeom, myAppear
);
132
Controlando a aparncia
Usando atributos de renderizao
RenderingAttributes controla:
Uso do depth buffer e habilidade de escrita
Teste da funo Alpha buffer e valores
133
Controlando a apearncia
Mtodos da classe RenderingAttributes
Mtodos da classe RenderingAttributes
controlam a maneira que tudo renderizado
Por default, o depth buffer est habilitado e
permitindo escrita, e a funo alpha test est ALWAYS
com o valor 0.0 alpha test
Mtodos
RenderingAttributes( )
void setDepthBufferEnable( boolean
state )
void setDepthBufferWriteEnable(
boolean state )
void setAlphaTestFunction( int func
)
void setAlphaTestValue( float value
)
As funes alpha test incluem: ALWAYS (default),
NEVER, EQUAL, NOT_EQUAL,LESS,
LESS_OR_EQUAL, GREATER, e
GREATER_OR_EQUAL
134
Controlando a aparncia
Um exemplo de cdigo RenderingAttributes
Crie RenderingAttributes para fixar os modos depth e alpha
RenderingAttributes myRA = new
RenderingAttributes( );
myRA.setDepthBufferEnable( false );
myRA.setAlphaTestFunction(
RenderingAttributes.NEVER );
Crie Appearance, fixe os atributos de renderizao, e monte a
forma
Appearance myAppear = new Appearance( );
myAppear.setRenderingAttributes( myRA );
Shape3D myShape = new Shape3D( myGeom, myAppear
);
135
Controlando a aparncia
Exemplo de aparncia
[ ExAppearance ]
Diffuse Specular Diffuse &
Specular
Shaded Textured Transparent
Unlit
polygons
Unlit
lines
Unlit points
136
Controlando a aparncia
Resumo
Appearance agrupa juntamente os atributos de
aparncia para uma Shape3D
Controla cor e transparncia
ColoringAttributes
Cores no sombreadas e modelos de sombras
Material
Cores: ambient, diffuse, emissive, e specular
Iluminao habilitada/desabilitada
GeometryArray e IndexedGeometryArray
Cor por coordenada
TransparencyAttributes
Quantidade de transparncia e modo
137
Controlando a aparncia
Resumo
Controle de renderizao
PointAttributes
Tamanho do ponto e anti-aliasing
LineAttributes
Largura da linha, padro, e anti-aliasing
PolygonAttributes
Polgono culling e estilo de desenho
RenderingAttributes
uso da profundidade do buffer alpha
138
Agrupando formas
Motivao 139
Introduzindo tipos de agrupamento 140
Hierarquia da classe Group 141
Criando grupos 142
Mdodos da classe Group 143
Um exemplo de cdigo Group 144
Criando grupos branch (galhos) 145
Mtodos da classe BranchGroup 146
Um exemplo de cdigo BranchGroup 147
Resumo 148
139
Agrupando formas
Motivao
Recordando que um grafo de cena uma hierarquia
de grupos
Formas, luzes, sons, etc.
Grupos de grupos de grupos de . . .
Java 3D possui vrios tipos de grupos
Alguns simplesmente agrupam seus filhos
Outros adicionam funcionalidade
140
Agrupando formas
Introduzindo os tipos de agrupamento
Os ns de agrupamento Java 3D incluem:
Group
BranchGroup
OrderedGroup
DecalGroup
Switch
SharedGroup
TransformGroup
Todos os grupos gerenciam uma lista de ns filhos
Para a maioria dos grupos, Java 3D pode renderizar
filhos em qualquer ordem
141
Agrupando formas
Hierarquia da classe Group
Todos os grupos compartilham atributos herdados da
classe Group
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.Node
javax.media.j3d.Group
javax.media.j3d.BranchGroup
javax.media.j3d.OrderedGroup
javax.media.j3d.DecalGroup
javax.media.j3d.SharedGroup
javax.media.j3d.Switch
javax.media.j3d.TransformGroup
142
Agrupando formas
Criando grupos
Group o n de grupo de mais propsito geral
Voc pode adicionar, inserir, remover, e pegar um
filho em um grupo
Os filhos so implcitamente numerados comeando
com 0
Um grupo pode ter qualquer nmero de filhos
A ordem de renderizao dos filhos para o Java
3D!
O Java 3D pode classificar as formas para melhor
eficincia na renderizao
143
Agrupando formas
Mtodos da classe Group
Os mtodos no grupo de controle Group contm
Mtodos
Group( )
void addChild( Node child )
void setChild( Node child, int index
)
void insertChild( Node child, int
index )
void removeChild( int index )
144
Agrupando formas
Um exemplo de cdigo Group
Construindo a forma
Shape3D myShape = new Shape3D( myGeom, myAppear
);
Adicionando-a ao grupo
Group myGroup = new Group( );
myGroup.addChild( myShape );
145
Agrupando formas
Criando grupos branch (galhos)
BranchGroup estende Group e cria um branch
graph (uma ramificao do grafo), o maior ramo no
grafo de cena
Pode ser ligado a um Locale (ou
SimpleUniverse)
Pode ser compilado
Pode ser um filho de qualquer n de agrupamento
Pode se separar dos seus pais (se este pai tem a
apropriada capacidade habilitada)
Adicionando um BranchGroup a um Locale faz
ele viver
Uma vez vivo ou compilado, as trocas so confinadas
para aqueles habilitados por capacidades
146
Agrupando formas
Mtodos da classe BranchGroup
Em acrscimo aos mtodos do Group,
BranchGroup provm compilao e controle da
sociedade
Mtodos
BranchGroup( )
void compile( )
void detach( )
147
Agrupando formas
Um exemplo de cdigo BranchGroup
Construa um locale num universe
Locale myLocale = new Locale( myUniverse );
Construa a forma
Shape3D myShape = new Shape3D( myGeom, myAppear
);
Adicione a forma ao branch group
BranchGroup myBranch = new BranchGroup( );
myBranch.addChild( myShape );
Adicione o branch group ao locale
myLocale.addBranchGraph( myBranch );
148
Agrupando formas
Resumo
Todos os grupos podem ter filhos, adicionados,
inseridos e removidos
Todos os grupos podem ter qualquer nmero de
filhos
Group faz mais nada
Todos os filhos so renderizados
Renderizados em qualquer ordem
BranchGroup pode compilar os filhos para
renderizao mais rpida
Todos os filhos so renderizados
Renderizados em qualquer ordem
149
Transformando formas
Motivao 150
Usando sistemas de coordenadas 151
Usando sistemas de coordenadas 152
Usando sistemas de coordenadas 153
Criando grupos de transformao 154
Hierarquia da classe TransformGroup 155
Mtodos da classe TransformGroup 156
Criando uma transformao 3D 157
Hierquia da classe Transform3D 158
Mtodos da classe Transform3D 159
Conformando pelas restries Transform3D 160
Reestabelecendo uma transformao 161
Transladando um sistema de coordenadas 162
Um exemplo de cdigo TransformGroup 163
Rotacionando um sistema de coordenadas 164
Um exemplo de cdigo TransformGroup 165
Escalonando um sistema de coordenadas 166
Um exemplo de cdigo TransformGroup 167
Modificando partes das transformaes 168
Transformando vetores e pontos 169
Resumo 170
150
Transformando formas
Motivao
Por default, todas formas so construidas dentro de
um compartilhado sistema de coordenadas do mundo
(world coordinate system)
Um TransformGroup constri um novo sistema
de coordenadas para seus filhos, relativo ao seu pai
Translate para trocar a posio relativa
Rotate para trocar a orientao relativa
Scale para trocar o tamanho relativo
Podem ser usados combinados
As formas construidas no novo sistema de
coordenadas so relativas a ele
Se voc transladar o sistema de coordenadas, as
formas tambm se movem
151
Transformando formas
Usando sistemas de coordenadas
Lembre-se do avio de brinquedo . . . suas partes so
contrudas cada uma, em seu prprio sistema de coordenadas
152
Transformando formas
Usando sistemas de coordenadas
Essas partes so montadas, conduzindo a forma filha
dentro do sistema de coordenadas do pai
153
Transformando formas
Usando sistemas de coordenadas
E ento, construir totalmente o avio de brinquedo
154
Transformando formas
Criando grupos de transformao
Transformaes podem ser arbitrariamente
aninhadas para incluir um TransformGroup
dentro de outro
Transformaes "fecham" a geometria (aninhando
em profundidade no grafo de cena) so aplicadas
primeiro
155
Transformando formas
Hierarquia da classe TransformGroup
TransformGroup estende Group e constri um
sistema de coordenadas para seus filhos
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.Node
javax.media.j3d.Group
javax.media.j3d.BranchGroup
javax.media.j3d.OrderedGroup
javax.media.j3d.DecalGroup
javax.media.j3d.SharedGroup
javax.media.j3d.Switch
javax.media.j3d.TransformGroup
156
Transformando formas
Mtodos da classe TransformGroup
Em adio aos mtodos da classe Group,
TransformGroup adiciona uma transformao 3D
A transformao default a identidade, a qual no
faz translao, rotao ou escalonamento
Mtodos
TransformGroup( )
void setTransform( Transform3D xform
)
157
Transformando formas
Criando uma transformao 3D
Uma Transform3D descreve a translao, rotao
e o escalonamento atuais
Transformaes 3D so internamente representadas
como uma matriz 4x4
Voc pode estabelecer a matriz diretamente
A maioria dos usurios usam mtodos de ajuda para
fazer translao, rotao, e escalonamento
158
Transformando formas
Hierarquia da classe Transform3D
Transform3D estende Object
Hierarquia da Classe
java.lang.Object
javax.media.j3d.Transform3D
159
Transformando formas
Mtodos da classe Transform3D
No nvel mais bsico, os mtodos na classe
Transform3D criam e determinam implicitamente
sobre uma matriz 4x4
Mtodos
Transform3D( )
Transform3D( Matrix4d mat )
Transform3D( Matrix3d rot, Vector3d
trans, double scale )
void set( Matrix4d mat )
void set( Matrix3d rot, Vector3d
trans, double scale )
160
Transformando formas
Conformando pelas restries
Transform3D
Uma transformao 3D deve ser affine
No h uma diviso homognea equivalente a
perspectiva, tal como para os espaos hiperblicos
Uma transformao 3D deve ser congruente se usado
em um TransformGroup acima de uma
ViewPlatform
No escalamento no-uniforme do ponto de vista
(viewpoint)
ViewPlatform ser discutido mais adiante no
curso
161
Transformando formas
Reestabelecendo uma transformao
Reestabelecendo a transformao para indentidade
faz um reset
Translao zero em X, Y, e Z
Sem rotao
Fator de escala de 1.0 em X, Y, e Z
Mtodo
void setIdentity( )
162
Transformando formas
Transladando um sistema de coordenadas
A translao move o sistema de coordenadas e suas
formas
Uma direo Vector3d fornece as distncias X, Y,
e Z
Mtodo
void set( Vector3d trans )
163
Transformando formas
Um exemplo de cdigo TransformGroup
Construa a forma
Shape3D myShape = new Shape3D( myGeom, myAppear
);
Crie uma transformao 3D para uma translao de +1.0 em X
Transform3D myTrans3D = new Transform3D( );
myTrans3D.set( new Vector3d( 1.0, 0.0, 0.0 ) );
Crie um grupo de transformao (transform group), estabelea a
transformao, e adicione a forma
TransformGroup myGroup = new TransformGroup( );
myGroup.setTransform( myTrans3D );
myGroup.addChild( myShape );
164
Transformando formas
Rotacionando um sistema de coordenadas
A rotao orienta o sistema de coordenadas e suas
formas
Rotacione sobre X, Y, ou Z por um ngulo
Rotacione sobre um eixo arbitrrio
Mtodos
void rotX( double angle )
void rotY( double angle )
void rotZ( double angle )
void set( AxisAngle4d axang )
void set( Matrix3d rot )
165
Transformando formas
Um exemplo de cdigo TransformGroup
Construa a forma, como antes
Shape3D myShape = new Shape3D( myGeom, myAppear
);
Crie uma transformao 3D para uma rotao no eixo Z por 30
graus (0.52 radianos)
Transform3D myTrans3D = new Transform3D( );
myTrans3D.rotZ( 0.52 ); // 30 degrees
Crie um grupo de transformao (transform group), estabelea a
transformao, e adicione a forma
TransformGroup myGroup = new TransformGroup( );
myGroup.setTransform( myTrans3D );
myGroup.addChild( myShape );
166
Transformando formas
Escalonando um sistema de coordenadas
Escalone aumentando ou encolhendo o sistema de
coordenadas e suas formas
Use uma fator de escala individual para um
escalonamento uniforme
Use fatores de escala X, Y, e Z para um
escalonamento no uniforme
Mtodos
void set( double scale )
void setScale( Vector3d scale )
167
Transformando formas
Um exemplo de cdigo TransformGroup
Construa uma forma, como antes
Shape3D myShape = new Shape3D( myGeom, myAppear
);
Crie uma transformao 3D para uma escala de 1.5 em X, Y, e Z
Transform3D myTrans3D = new Transform3D( );
myTrans3D.set( 1.5 );
Crie um grupo de transformao (transform group), estabelea a
transformao, e adicione a forma
TransformGroup myGroup = new TransformGroup( );
myGroup.setTransform( myTrans3D );
myGroup.addChild( myShape );
168
Transformando formas
Modificando partes das transformaes
Modifique partes de uma transformao existente
Abandone o resto da transformao no afetada
Usadas para combinar translaes, rotaes, e
escalonamento
Mtodos
void setTranslation( Vector3d trans
)
void setRotation( AxisAngle4d axang
)
void setRotation( Matrix3d rot )
void setEuler( Vector3d rollPitchYaw
)
void setScale( double scale )
169
Transformando formas
Transformando vetores e pontos
Durante a renderizao, Java 3D processa as
coordenadas de geometria e vetores atravs de cada
Transform3D
Voc pode usar os mtodos Transform3D para
fazer este processamento nos seus prprios pontos e
vetores
Mtodos
void transform( Point3d inout )
void transform( Point3d in, Point3d
out )
void transform( Vector3d inout )
void transform( Vector3d in,
Vector3d out )
170
Transformando formas
Resumo
Transform3D descreve translao, rotao e
escalonamento
Uma transformao pode ser construida a partir de
uma matriz 4x4, ou por mtodos de ajuda
TransformGroup cria um novo sistema de
coordenadas para seus filhos, transformados por um
Transform3D
Todos os filhos so renderizados
Renderizados em qualquer ordem
171
Usando grupos de finalidades especiais
Motivao 172
Hierarquia da classe Group 173
Criando grupos ordenados (ordered) 174
Criando grupos decalque (decal) 175
Mtodos das classes OrderedGroup e DecalGroup 176
Um exemplo de cdigo DecalGroup 177
Criando grupos switch 178
Mtodos da classe Switch 179
Selecionando um filho switch 180
Um exemplo de cdigo Switch 181
Um exemplo de cdigo Switch 182
Um exemplo de cdigo Switch 183
Um exemplo Switch 184
Criando grupos compartilhados (shared) 185
Exemplo 186
Ligando aos grupos compartilhados 187
Hierarquia das classes SharedGroup e Link 188
Mtodos da classe SharedGroup 189
Mtodos da classe Link 190
Um exemplo de cdigo SharedGroup 191
Um exemplo SharedGroup 192
Resumo 193
Resumo 194
Resumo 195
172
Usando grupos de finalidades especiais
Motivao
Java 3D inclui mais alguns tipos de grupos
Group
BranchGroup
OrderedGroup
DecalGroup
Switch
SharedGroup
TransformGroup
173
Usando grupos de finalidades especiais
Hierarquia da classe Group
Todos grupos compartilham atributos herdados da
classe Group
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.Node
javax.media.j3d.Group
javax.media.j3d.BranchGroup
javax.media.j3d.OrderedGroup
javax.media.j3d.DecalGroup
javax.media.j3d.SharedGroup
javax.media.j3d.Switch
javax.media.j3d.TransformGroup
174
Usando grupos de finalidades especiais
Criando grupos ordenados (ordered)
Um OrderedGroup estende Group e garante que
seus filhos so renderizados na ordem do primeiro ao
ltimo
Ao contrrio de Group, BranchGroup, etc.
175
Usando grupos de finalidades especiais
Criando grupos decalque (decal)
DecalGroup estende OrderedGroup e renderiza
filhos na ordem primeiro para o ltimo
Os filhos devem ser co-planares
Todos polgonos devem vistos da mesma forma
O primeiro filho da superfcie bsica
A superfcie bsica deve cercar todos outros filhos
Use para renderizar geometria decalque (decal)
Texto, texturas decals (por exemplo marcas da pista
de decolagem do aeroporto)
Bom para evitar artefatos de luta (Z-fighting
artifacts)
176
Usando grupos de finalidades especiais
Mtodos das classes OrderedGroup e
DecalGroup
Nenhuma classe fornece mtodos alm dos bsicos
Mtodo
OrderedGroup( )
Mtodo
DecalGroup( )
177
Usando grupos de finalidades especiais
Um exemplo de cdigo DecalGroup
Construa uma forma de superfcie bsica, e as formas decalque
Shape3D underly = new Shape3D( geom0, app0 );
Shape3D decal_1 = new Shape3D( geom1, app1 );
Shape3D decal_2 = new Shape3D( geom2, app2 );
Adicione elas para o grupo decalque, iniciando com a superfcie
bsica
DecalGroup myDecals = new DecalGroup( );
myDecals.addChild( underly ); // First!
myDecals.addChild( decal_1 );
myDecals.addChild( decal_2 );
178
Usando grupos de finalidades especiais
Criando grupos switch
Switch estende Group e seleciona nenhum, um ou
mltiplos filhos para renderizar ou processar
A escolha do filho pode ser por um nmero, ou por
um bit mask
Somente os filhos selecionados so renderizados
(formas) ou processedos (luzes, fog, backgrounds,
behaviors)
Similar ao comando Java "switch"
Java 3D est ainda livre para renderizar filhos em
qualquer ordem
179
Usando grupos de finalidades especiais
Mtodos da classe Switch
Em adio aos mtodos da classe Group, os
mtodos da classe Switch habilitam o controle de
renderizao dos filhos
Mtodos
Switch( )
void setWhichChild( int index )
void setChildMask( BitSet mask )
Lembre-se de usar . . .
setCapability(
Switch.ALLOW_SWITCH_WRITE );
. . . para habilitar os valores switch a serem
trocados enquanto ele estiver vivo ou compilado
180
Usando grupos de finalidades especiais
Selecionando um filho switch
Selecione qual filho a ser renderizado por:
Passando seu ndice de filho para
setWhichChild( )
Ou passando valores especiais:
No renderizando filhos: CHILD_NONE
Renderizando todos os filhos: CHILD_ALL
Ou selecionando um conjunto de filhos com um bit
mask
Um valor de CHILD_MASK habilita o uso de
mscara
Estabelea um membro de Java BitSet para cada
filho a ser renderizado
181
Usando grupos de finalidades especiais
Um exemplo de cdigo Switch
Construa filhos
Shape3D zero = new Shape3D( geom0, app0 );
Shape3D one = new Shape3D( geom1, app1 );
Shape2D two = new Shape2D( geom2, app2 );
Adicione-os ao grupo switch
Switch mySwitch = new Switch( );
mySwitch.setCapability( Switch.ALLOW_SWITCH_WRITE
);
mySwitch.addChild( zero );
mySwitch.addChild( one );
mySwitch.addChild( two );
182
Usando grupos de finalidades especiais
Um exemplo de cdigo Switch
Selecione um simples filho do grupo switch
mySwitch.setWhichChild( 2 );
Selecione todos filhos do grupo switch
mySwitch.setWhichChild( Switch.CHILD_ALL );
183
Usando grupos de finalidades especiais
Um exemplo de cdigo Switch
Selecione um conjunto de filhos do grupo switch
BitSet mask = new BitSet(3);
mask.set( 0 );
mask.set( 2 );
mySwitch.setWhichChild( Switch.CHILD_MASK );
mySwitch.setChildMask( mask );
184
Usando grupos de finalidades especiais
Um exemplo Switch
[ ExSwitch ]
185
Usando grupos de finalidades especiais
Criando grupos compartilhados (shared)
SharedGroup estende Group para criar um grupo
de formas que podem ser compartilhadas (usas
mltiplas vezes por todo o grafo de cena)
Ele contm formas, tal qual outros grupos
Ele nunca adicionado no grafo de cena diretamente
Ele referenciado por um ou mais ns folhas Link
Trocas em um SharedGroup afetam todas as
referncias a ele
Podem ser compilados anteriormente a referenci-lo
em um n Link
186
Usando grupos de finalidades especiais
Exemplo
[ ExLinearFog ]
187
Usando grupos de finalidades especiais
Ligando a grupos compartilhados
No exemplo, a coluna um SharedGroup
Cada coluna visvel usa um Link para aquele grupo
188
Usando grupos de finalidades especiais
Hierarquia das classes SharedGroup e
Link
Link estende Leaf para um ponto do
SharedGroup
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.Node
javax.media.j3d.Leaf
javax.media.j3d.Link
189
Usando grupos de finalidades especiais
Mtodos da classe SharedGroup
Em adio aos mtodos da classe Group,
SharedGroup adiciona mtodos de compilao
Mtodos
SharedGroup( )
void compile( )
190
Usando grupos de finalidades especiais
Mtodos da classe Link
Mtodos na classe Link selecionam os grupos
compartilhados para serem ligados
Mtodos
Link( )
Link( SharedGroup group )
void setSharedGroup( SharedGroup
group )
191
Usando grupos de finalidades especiais
Um exemplo de cdigo SharedGroup
Construa uma ou mais formas para compartilhar
Shape3D myShape = new Shape3D( myGeom, myAppear
);
Crie um SharedGroup e adicione as formas a ele
SharedGroup myShared = new SharedGroup( );
myShared.addChild( myShape );
Compile o SharedGroup para uma performance mxima
myShared.compile( );
Use ns Link para apontar para o grupo de um outro grupo
Link myLink = new Link( myShared );
TransformGroup myGroup = new TransformGroup( );
myGroup.addChild( myLink );
192
Usando grupos de finalidades especiais
Um exemplo SharedGroup
[ ExLinearFog ]
193
Usando grupos de finalidades especiais
Resumo
Todos os grupos podem ter filhos estabelecidos,
adicionados, inseridos e removidos
Todos os grupos podem ter qualquer nmero de
filhos
Group faz nada mais que
Todos filhos renderizados
Renderizados em alguma ordem
BranchGroup pode compilar seus filhos para uma
renderizao mais rpida
Todos filhos renderizados
Renderizados em alguma ordem
194
Usando grupos de finalidades especiais
Resumo
OrderedGroup fora um ordem de renderizao
Todos filhos renderizados
Renderizados na ordem do primeiro para o ltimo
DecalGroup fora a ordem de renderizao das
formas em cima de uma forma bsica
Todos filhos renderizados
Renderizados na ordem do primeiro para o ltimo
Switch seleciona nenhum, um, ou mltiplos filhos
para renderizar ou processar
Seleciona os filhos a serem renderizados
Renderizam em alguma ordem
195
Usando grupos de finalidades especiais
Resumo
SharedGroup cria um grupo de formas
compartilhadas
Todos filhos renderizados, se o grupo referenciado
por um n vivo link
Renderizados em alguma ordem
Os ns SharedGroup nunca so localizados
diretamente no grafo de cena vivo
Pontos Link para o grupo compartilhado para um
grafo de cena vivo
Qualquer nmero de ligaes para o mesmo grupo
compartilhado
196
Introduzindo mapeamento de texturas
Motivao 197
Exemplo 198
Usando atributos de aparncia de texturas 199
Usando atributos de aparncia de texturas 200
Hierarquia da classe Texture 201
Mtodos da classe Texture 202
Um exemplo de cdigo Texture2D 203
Um exemplo de textura 204
Preparando para mapeamento de texturas 205
Hierarquia da classe ImageComponent 206
Mtodos da classe ImageComponent2D 207
Carregando imagens de texturas 208
Um exemplo de cdigo TextureLoader 209
Um exemplo TextureLoader 210
Resumo 211
197
Introduzindo mapeamento de texturas
Motivao
Voc pode modelar todos detalhes de cada forma 3D
da sua cena
Isto requer uma soma enorme de esforo de
modelagem
Mais formas significam mais para desenhar e pior
interatividade
Ao invs, criar a iluso do detalhe:
Tome uma fotografia de uma "coisa real"
Cole esta foto sobre uma simples geometria 3D
Aumenta o realismo sem aumentar a quantidade de
geometrias a desenhar
198
Introduzindo mapeamento de texturas
Exemplo
Imagem da textura [ ExTexture ]
199
Introduzindo mapeamento de texturas
Usando atributos de aparncia de texturas
Recorde que Appearance um recipiente de
atributos visuais mltiplos para uma forma
Controle de cor e transparncia (discutidos na seo
anterior)
Material
ColoringAttributes
TransparencyAttributes
Controle de renderizao (discutidos na seo
anterior)
PointAttributes
LineAttributes
PolygonAttributes
RenderingAttributes
Controle de textura
Texture
TextureAttributes
TexCoordGeneration
200
Introduzindo mapeamento de texturas
Usando atributos de aparncia de texturas
Os controles de atributos de textura esto divididos
entre poucos componentes de ns
Texture
Seleciona a imagem da textura e controla os atributos
bsicos de mapeamento
TextureAttributes
Controla oa atributos de mapeamento avanados
TexCoordGeneration
Automaticamente geram coordenadas de textura, se
voc no as forneceu (muitos usurios fornecem suas
prprias)
201
Introduzindo mapeamento de texturas
Hierarquia da classe Texture
Texture a classe bsica para dois componentes
de n que selecionam a imagem para ser usada
Texture2D: uma imagem padro 2D
Texture3D: um volume de imagens 3D
Hieraruia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.NodeComponent
javax.media.j3d.Texture
javax.media.j3d.Texture2D
javax.media.j3d.Texture3D
202
Introduzindo mapeamento de texturas
Mtodos da classe Texture
Mtodos nas classes Texture e Texture2D
selecionam a imagem, e mudam o mapeamento de
texturas para ligado e desligado
Mtodos
Texture( )
Texture2D( )
void setImage( int level,
ImageComponent2D image )
void setEnable( boolean onOff )
203
Introduzindo mapeamento de texturas
Um exemplo de cdigo Texture2D
Carregue a imagem da textura (discutido adiante)
TextureLoader myLoader = new TextureLoader(
"brick.jpg", this );
ImageComponent2D myImage = myLoader.getImage( );
Crie uma Texture2D usando a imagem, e mude-a para ligada
Texture2D myTex = new Texture2D( );
myTex.setImage( 0, myImage );
myTex.setEnable( true );
Crie uma Appearance e coloque a textura nela
Appearance myAppear = new Appearance( );
myAppear.setTexture( myTex );
Monte a forma
Shape3D myShape = new Shape3D( myText, myAppear
);
204
Introduzindo mapeamento de texturas
Um exemplo de textura
[ ExTexture ]
205
Introduzindo mapeamento de texturas
Preparando para mapeamento de texturas
A Obteno de uma textura requer:
Um arquivo para carregar de disco ou da Web
Um TextureLoader para carregar aquele arquivo
Um ImageComponent para conter a imagem
carregada
O qual usado mudado no padro
BufferedImage
206
Introduzindo mapeamento de texturas
Hierarquia da classe ImageComponent
ImageComponent a base da classe para dois
recipientes de imagens:
ImageComponent2D pega uma imagem 2D
ImageComponent3D pega um volume de imagens 3D
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.NodeComponent
javax.media.j3d.ImageComponent
javax.media.j3d.ImageComponent2D
javax.media.j3d.ImageComponent3D
207
Introduzindo mapeamento de texturas
Mtodos da classe ImageComponent2D
Mtodos da classe ImageComponent2D
estabelecem a imagem a ser colocada
Mtodos
ImageComponent2D( int format,
BufferedImage image )
void set( BufferedImage image )
208
Introduzindo mapeamento de texturas
Carregando imagens de texturas
O utilitrio TextureLoader carrega uma imagem
de um arquivo ou URL, e retorna um
ImageComponent ou Texture
Mtodos
TextureLoader( String path,
Component observer )
ImageComponent2D getImage( )
Texture getTexture( )
209
Introduzindo mapeamento de texturas
Um exemplo de cdigo TextureLoader
Carregue a imagem da textura
TextureLoader myLoader = new TextureLoader(
"brick.jpg", this );
ImageComponent2D myImage = myLoader.getImage( );
Crie um Texture2D usando a imagem, e ligue-a
Texture2D myTex = new Texture2D( );
myTex.setImage( 0, myImage );
myTex.setEnable( true );
Crie um Appearance e coloque a textura nela
Appearance myAppear = new Appearance( );
myAppear.setTexture( myTex );
Monte a forma
Shape3D myShape = new Shape3D( myText, myAppear
);
210
Introduzindo mapeamento de texturas
Um exemplo TextureLoader
[ ExTexture ]
211
Introduzindo mapeamento de texturas
Resumo
Uma textura uma imagem copiada sobre uma
forma para criar uma iluso de detalhes
O mapeamento das texturas controlado por ns
componentes da forma Appearance incluindo
Texture2D
Habilita o mapeamento de textura usando uma
imagem em um ImageComponent2D
TextureLoader pega uma imagem do disco ou da
Web, retornando um ImageComponent
ImageComponent2D pega dados de imagem 2D
212
Usando coordenadas de texturas
Motivao 213
Usando um sistema de coordenadas de texturas 214
Usando um sistema de coordenadas de texturas 215
Especificando coordenadas de textura 216
Mtodos da classe GeometryArray 217
Mtodos da classe IndexedGeometryArray 218
Um exemplo de cdigo de coordenadas de textura 219
Transformando coordenadas de textura 220
Hierarquia da classe TextureAttributes 221
Mtodos da classe TextureAttributes 222
Um exemplo de cdigo de rotao de textura 223
Um exemplo de rotao de textura 224
Um exemplo de cdigo de escalonamento de textura 225
Um exemplo de escalonamento de textura 226
Um exemplo de cdigo de translao de textura 227
Um exemplo de translao de textura 228
Usando modos de limites de textura 229
Mtodos da classe textura 230
Um exemplo de cdigo de modo de limites de textura 231
Um exemplo de modo de limites de textura 232
Resumo 233
Resumo 234
213
Usando coordenadas de textura
Motivao
Ns necessitamos mapear de partes da textura para
partes da forma
Defina um "fatiador de textura" para cortar um
pedao de textura
Translacione, rotacione e escalone a fatia antes de
fatiar
Mapeie a textura cortada "fatiada" sobre sua forma
Texture coordinates descreve a forma 2D sobre
aquela fatia cortada
214
Usando coordenadas de textura
Usando um sistema de coordenadas de
textura
As imagens de textura tem um tamanho verdadeiro e
um tamanho lgico
O tamanho verdadeiro a largura e o altura da
imagem em pixels
Devem ser mltiplos de 2
Largura e o altura no so necessariamente os
mesmos
O tamanho lgico um tratamento genrico das
dimenses de imagens
Sempre a largura 1.0
Sempre a altura 1.0
215
Usando coordenadas de textura
Usando um sistema de coordenadas de
textura
As texturas podem ser visualizadas como um sistema
de coordenadas de textura 2D
A dimenso horizontal S
A dimenso vertical T
Uma imagem prolonga-se de 0.0 at 1.0 em S e T,
indiferente do tamanho verdadeiro
216
Usando coordenadas de textura
Especificando coordenadas de textura
Coordenadas de textura define uma forma 2D sobre a
imagem de textura
Um "fatiador de textura"
Deve haver um par de ST para cada coordenada da
forma
Fornea as coordenadas de textura para
GeometryArray, e os ndices de coordenadas de
textura para IndexedGeometryArray
217
Usando coordenadas de textura
Mtodos da classe GeometryArray
Mtodos sobre a classe GeometryArray
estabelecem as coordenadas da textura
Mtodos
void setTextureCoordinate( int
index, * texCoord )
void setTextureCoordinates( int
index, * texCoord )
Mtodos variantes aceitam float, Point2f, e
Point3f
218
Usando coordenadas de textura
Mtodos da classe IndexedGeometryArray
Mtodos sobre a classe
IndexedGeometryArray estabelecem os ndices
de coordenadas de textura
Mtodos
void setTextureCoordinateIndex( int
index, int value )
void setTextureCoordinateIndices(
int index, int[] value )
219
Usando coordenadas de textura
Um exemplo de cdigo de coordenadas de textura
Crie listas de coordenadas 3D, nomais de iluminao, e coordenadas
de textura para os vrtices
Point3f[] myCoords = {
new Point3f( 0.0f, 0.0f, 0.0f ),
. . .
}
Vector3f[] myNormals = {
new Vector3f( 0.0f, 1.0f, 0.0f ),
. . .
}
Point2f[] myTexCoords = {
new Point2f( 0.0f, 0.0f ),
. . .
}
Crie um QuadArray e estabelea as coordenadas dos vrtices,
normais de iluminao e coordenadas de textura
QuadArray myQuads = new QuadArray(
myCoords.length,
GeometryArray.COORDINATES |
GeometryArray.NORMALS |
GeometryArray.TEXTURE_COORDINATE_2 );
myQuads.setCoordinates( 0, myCoords );
myQuads.setNormals( 0, myNormals );
myQuads.setTextureCoordinates( 0, myTexCoords );
Monte a forma
Shape3D myShape = new Shape3D( myQuads, myAppear
);
220
Usando coordenadas de textura
Transformando coordenadas de textura
A "fatia de textura" pode ser transformada sendo
translada, rotacionada, e escalonada antes de cortar o
pedao de textura
A escala o mais importante
Subindo e as coordenadas cobrindo ao redor dos
limites da imagem
Similar a imaginar uma quantidade infinita de massa
de po da fatia da textura
221
Usando coordenadas de textura
Hierarquia da classe TextureAttributes
TextureAttributes controla como a textura
mapeada, incluindo o uso de coordenadas de
transformao de textura
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.NodeComponent
javax.media.j3d.TextureAttributes
222
Usando coordenadas de textura
Mtodos da classe TextureAttributes
Mtodos da classe TextureAttributes
estabelecem um Transform3D para transformar as
coordenadas de textura
Mtodos
TextureAttributes( )
void setTextureTransform(
Transform3D trans )
223
Usando coordenadas de textura
Um exemplo de cdigo de rotao de textura
Crie TextureAttributes
TextureAttributes myTA = new TextureAttributes(
);
Crie uma transformao de rotao (eixo Z perpendicular ao plano
ST)
Transform3D myTrans = new Transform3D( );
myTrans.rotZ( Math.PI/4.0 ); // 45 degrees
myTA.setTextureTransform( myTrans );
Estabelea os atributos de textura em Appearance
Appearance myAppear = new Appearance( );
myAppear.setTextureAttributes( myTA );
Monte a forma
Shape3D myShape = new Shape3D( myText, myAppear
);
224
Usando coordenadas de textura
Um exemplo de rotao de textura
Sem rotao Rotacionando de 45
graus
225
Usando coordenadas de textura
Um exemplo de cdigo de escalonamento de textura
Crie TextureAttributes
TextureAttributes myTA = new TextureAttributes(
);
Crie uma transformao de escala
Transform3D myTrans = new Transform3D( );
myTrans.set( 4.0 );
myTA.setTextureTransform( myTrans );
Estabelea os atributos de textura em Appearance
Appearance myAppear = new Appearance( );
myAppear.setTextureAttributes( myTA );
Monte a forma
Shape3D myShape = new Shape3D( myText, myAppear
);
226
Usando coordenadas de textura
Um exemplo de escalonamento de textura
Escala 1.0 Escala 4.0
227
Usando coordenadas de textura
Um exemplo de cdigo de translao de textura
Crie TextureAttributes
TextureAttributes myTA = new TextureAttributes(
);
Crie uma transformao translao
Transform3D myTrans = new Transform3D( );
myTrans.set( new Vector3f( 0.25f, 0.0f, 0.0f ) );
myTA.setTextureTransform( myTrans );
Estabelea os atributos de textura em Appearance
Appearance myAppear = new Appearance( );
myAppear.setTextureAttributes( myTA );
Monte a forma
Shape3D myShape = new Shape3D( myText, myAppear
);
228
Usando coordenadas de textura
Um exemplo de translao de textura
Sem translao Transladado por 0.25 em
S,
0.0 em T
229
Usando coordenadas de textura
Usando modos limites de textura
Mas . . . quando as coordenadas da textura
ultrapassam as bordas da imagem elas podem:
Cobrir (Wrap) para criar um padro de repetio
(como antes)
Ou Fixar (Clamp) para prevenir a repetio
230
Usando coordenadas de textura
Mtodos da classe Texture
Mtodos da classe Texture selecionam modos
limites WRAP ou CLAMP em S e T
WRAP o default em ambos S e T
Mtodos
void setBoundaryModeS( int mode )
void setBoundaryModeT( int mode )
231
Usando coordenadas de textura
Um exemplo de cdigo modo de limites de textura
Carregue a imagem de textura
TextureLoader myLoader = new TextureLoader(
"brick.jpg", this );
ImageComponent2D myImage = myLoader.getImage( );
Crie uma Texture2D usando a imagem, e ligue-a
Texture2D myTex = new Texture2D( );
myTex.setImage( 0, myImage );
myTex.setEnable( true );
Estabelea os modos limites e cores
myTex.setBoundaryModeS( Texture.WRAP );
myTex.setBoundaryModeT( Texture.WRAP );
Crie uma Appearance estabelea a textura nela
Appearance myAppear = new Appearance( );
myAppear.setTexture( myTex );
Monte a forma
Shape3D myShape = new Shape3D( myText, myAppear
);
232
Usando coordenadas de textura
Um exemplo de modo limites de textura
Cobrir Fixar
233
Usando coordenadas de textura
Resumo
Texturas so um sistema de coordenadas lgico com
direes S (horizontal) e T (vertical)
No considere o tamanho verdadeiro, todas as
texturas tem largura e altura iguais a 1.0
As coordenadas da textura descrevem a forma do
fatiador de textura
Fornea as coordenadas de textura para
GeometryArray
Fornea os ndices de coordenadas de textura para
IndexedGeometryArray
234
Usando coordenadas de textura
Resumo
Uma Transformao de texture translada, rotaciona,
e escalona coordenadas de textura
Quando as coordenadas da textura estendem os
limites da imagem, elas podem cobrir (wrap) ou serem
fixadas (clamp)
Quando fixadas, o resto da fatia da textura colocada
em cor limite (boundary color)
Modos limites so estabelecidos em Texture
As transformaes de textura so estabelecidas em
TextureAttributes
235
Usando geometria raster
Motivao 236
Exemplo 237
Hierarquia da classe raster 238
Construindo geometria raster 239
Mtodos da classe Raster 240
Mtodos da classe Raster 241
Um exemplo de cdigo raster 242
Um exemplo raster 243
Resumo 244
236
Usando geometria raster
Motivao
Ns gostaramos de posicionar uma imagem 2D em
uma cena 3D
Posicione-a em um ponto 3D de coordenadas de
modelo
Faa este tamanho independente da distncia do
usurio para a forma
til para anotaes de textos, fantasmas, etc.
Nos chamamos de geometria raster
237
Usando geometria raster
Exemplo
[ ExRaster ]
238
Usando geometria raster
Hierarquia da classe Raster
Raster estende Geometry
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.NodeComponent
javax.media.j3d.Geometry
javax.media.j3d.Raster
239
Usando geometria raster
Construindo geometria raster
Raster descreve geometria para uma Shape3D,
incluindo
Um posicionamento 3D (anchor)
Localizado no canto superior esquerdo da imagem
Uma imagem e seu tipo
Cor da imagem, profundidade, ou ambos
Uma regio da imagem para copiar para a tela
240
Usando geometria raster
Mtodos da classe Raster
Mtodos da classe Raster estabelecem os dados da
imagem e tipo
Mtodos
Raster( )
void setImage( ImageComponent2D
image )
void setDepthComponent(
DepthComponent depth )
void setType( int flag )
Os tipos de imagem raster incluem:
RASTER_COLOR (default), RASTER_DEPTH, e
RASTER_COLOR_DEPTH
241
Usando geometria raster
Mtodos da classe Raster
Mtodos da classe Raster tambm estabelecem o
posicionamento (anchor) e a regio para usar a
imagem
Mtodos
void setPosition( Point3f pos )
void setSize( int width, int height
)
void setOffset( int x, int y )
void readRaster( Raster raster )
Leituras de um Raster somente podem ser feitas
no modo imediato
242
Usando geometria raster
Um exemplo de cdigo raster
Carregue a imagem da textura
TextureLoader myLoader = new TextureLoader(
"brick.jpg", this );
ImageComponent2D myImage = myLoader.getImage( );
Crie o Raster
Raster myRaster = new Raster( );
myRaster.setPosition( new Point3f( 1.0f, 0.0f,
0.0f ) );
myRaster.setType( Raster.RASTER_COLOR );
myRaster.setImage( myImage );
myRaster.setOffset( 0, 0 );
myRaster.setSize( 256, 256 );
Monte a forma
Shape3D myShape = new Shape3D( myRaster, myAppear
);
243
Usando geometria raster
Um exemplo raster
[ ExRaster ]
244
Usando geometria raster
Resumo
Raster cria uma imagem fantasma por posicionar
uma imagem 2D em uma posio de tela controlada
por uma posio de ncora 3D
245
Iluminando o ambiente
Motivao 246
Exemplo 247
Hierarquia da classe Light 248
Mtodos da classe Light 249
Criando luzes ambiente 250
Um exemplo de cdigo AmbientLight 251
Criando luzes direcionais 252
Um exemplo de cdigo DirectionalLight 253
Criando luzes pontuais 254
Usando atenuao de luzes pontuais 255
Um exemplo de cdigo PointLight 256
Crianddo luzes spot 257
Mtodos da classe SpotLight 258
Um exemplo de cdigo SpotLight 259
Usando luzes com limites de influncia 260
Criando limites de influncia 261
Ancorando limites de influncia 262
Mtodos da classe Light 263
Um exemplo de cdigo de limites de influncia 264
Um exemplo de limites de influncia 265
Luzes alcance (scoping) 266
Mtodos da classe Light 267
Um exemplo de cdigo alcance (scoping) 268
Um exemplo alcance (scoping) 269
Resumo 270
Resumo 271
246
Iluminando o ambiente
Motivao
Exemplos anteriores tem usado uma luz default
ligada a cabea do observador
Java 3D fornece quatro tipos de luzes para iluminar a
sua cena:
Ambient
Directional
Point
Spot
247
Iluminando o ambiente
Exemplo
[ ExHenge ]
248
Iluminando o ambiente
Hierarquia da classe Light
Todas luzes compartilham atributos herdados da classe
Light
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.Node
javax.media.j3d.Leaf
javax.media.j3d.Light
javax.media.j3d.AmbientLight
javax.media.j3d.DirectionalLight
javax.media.j3d.PointLight
javax.media.j3d.SpotLight
249
Iluminando o ambiente
Mtodos da classe Light
Mtodos na classe Light controlam atributos
comuns para todos os tipos de luzes:
Um estado habilitado de liga/desliga (on/off)
Uma cor
Um volume envolvente e o escopo controlando os
limites das formas que elas iluminam
Mtodos
void setEnable( boolean OnOff )
void setColor( Color3f color )
250
Iluminando o ambiente
Criando luzes ambiente
[ ExAmbientLight ]
AmbientLight estende
Light
Os raios de luz apontam em
todas as direes, inundando o
ambiente e iluminando as
formas equilibradamente
Mtodo
AmbientLight( )
251
Iluminando o ambiente
Um exemplo de cdigo AmbientLight
Crie a luz
AmbientLight myLight = new AmbientLight( );
myLight.setEnable( true );
myLight.setColor( new Color3f( 1.0f, 1.0f, 1.0f )
);
Estabelea seu limite de influncia
BoundingSphere myBounds = new BoundingSphere(
new Point3d( ), 1000.0 );
myLight.setInfluencingBounds( myBounds );
252
Iluminando o ambiente
Criando luzes direcionais
[
ExDirectionalLight
]
DirectionalLight
estende Light
Os raios de luz so
paralelos e apontam em
uma direo
Mtodos
DirectionalLight( )
void setDirection( Vector3f dir )
A direo default apontada (0.0, 0.0, -1.0)
253
Iluminando o ambiente
Um exemplo de cdigo DirectionalLight
Crie a luz
DirectionalLight myLight = new DirectionalLight(
);
myLight.setEnable( true );
myLight.setColor( new Color3f( 1.0f, 1.0f, 1.0f )
);
myLight.setDirection( new Vector3f( 1.0f, 0.0f,
0.0f ) );
Estabelea seu limite de influncia
BoundingSphere myBounds = new BoundingSphere(
new Point3d( ), 1000.0 );
myLight.setInfluencingBounds( myBounds );
254
Iluminando o ambiente
Criando luzes pontuais
[ ExPointLight ]
PointLight estende Light
Os raios de luz emitem
radialmente de um ponto em
todas as direes
Mtodos
PointLight( )
void setPosition( Point3f pos )
255
Iluminando o ambiente
Usando atenuao de luzes pontuais
As luzes pontuais so atenuadas:
Tal como a distncia cresce, o brilho da luz decresce
A atenuao controlada por trs coeficientes:
constante, linear, e quadrtico
brilho =
Intensidade_da_Luz
constante + linear*distncia +
quadrtico*distncia
2
Mtodo
void setAttenuation( Point3f atten
)
256
Iluminando o ambiente
Um exemplo de cdigo PointLight
Crie a luz
PointLight myLight = new PointLight( );
myLight.setEnable( true );
myLight.setColor( new Color3f( 1.0f, 1.0f, 1.0f )
);
myLight.setPosition( new Point3f( 0.0f, 1.0f,
0.0f ) );
myLight.setAttenuation( new Point3f( 1.0f, 0.0f,
0.0f ) );
Estabelea seu limite de influncia
BoundingSphere myBounds = new BoundingSphere(
new Point3d( ), 1000.0 );
myLight.setInfluencingBounds( myBounds );
257
Iluminando o ambiente
Criando luzes spot
[ ExSpotLight ]
SpotLight estende
PointLight
Os raios de luz emitem
radialmente de um ponto, dentro de
um cone
Varia o ngulo de abertura, ou
limitao do cone
Varia a concentrao para o foco
da luz spot
Mtodos
SpotLight( )
void setDirection( Vector3f dir )
A direo default apontada (0.0, 0.0, -1.0)
258
Iluminando o ambiente
Mtodos da classe SpotLight
Mtodos da classe SpotLight tambm
estabelecem a abertura do ngulo do cone e
concentrao
Mtodos
void setSpreadAngle( float angle )
void setConcentration( float concen
)
O ngulo de abertura varia de 0.0 at PI/2.0 radianos
Um valor de PI radianos faz a luz um PointLight
O default PI
Concentraes variam de 0.0 (sem foco) para 128.0
(focado)
O default 0.0
259
Iluminando o ambiente
Um exemplo de cdigo SpotLight
Crie a luz
SpotLight myLight = new SpotLight( );
myLight.setEnable( true );
myLight.setColor( new Color3f( 1.0f, 1.0f, 1.0f )
);
myLight.setPosition( new Point3f( 0.0f, 1.0f,
0.0f ) );
myLight.setAttenuation( new Point3f( 1.0f, 0.0f,
0.0f ) );
myLight.setDirection( new Vector3f( 1.0f, 0.0f,
0.0f ) );
myLight.setSpreadAngle( 0.785f ); // 45 degrees
myLight.setConcentration( 3.0f ); // Unfocused
Estabelea seu limite de influncia
BoundingSphere myBounds = new BoundingSphere(
new Point3d( ), 1000.0 );
myLight.setInfluencingBounds( myBounds );
260
Iluminando o ambiente
Usando luzes com limites de influncia
A iluminao da luz limitada a regio de influncia
As formas dentro da regio podem ser iluminadas
pela luz
Limites da luz:
Habilita o controle de luz em cenas grandes
Evita a sobreposio de luzes de uma cena ao usar
mltiplas luzes
Mantm o tempo de computao de iluminao
261
Iluminando o ambiente
Criando limites de influncia
A regio de influncia de uma luz limitada por um
volume:
Esfera, caixa, polytope, ou combinao usando
Bounds
Para fazer uma luz global, use uma esfera imensa
Por default, as luzes no tem limites de influncia e
nada est iluminado!
Erro comum: esquecer de estabelecer os limites de
influncia
262
Iluminando o ambiente
Ancorando os limites de influncia
O volume de limite de luz pode ser relativo a:
O sistema de coordenadas da luz
O volume centralizado na luz
Como a luz move, ento o volume move
O sistema de coordenadas limite da folha
O volume centralizado sobre um n folha em outra
parte do grafo de cena
Como o n folha move, ento o volume move
Se a luz move, o volume no
263
Iluminando o ambiente
Mtodos da classe Light
Mtodos na classe Light estabelecem os limites de
influncia
Mtodos
void setInfluencingBounds( Bounds
bounds )
void setInfluencingBoundingLeaf(
BoundingLeaf leaf )
264
Iluminando o ambiente
Um exemplo de cdigo limites de influncia
Estabelea limites relativos ao sistema de coordenadas da luz
PointLight myLight = new PointLight( );
myLight.setInfluencingBounds( myBounds );
Ou relativo ao sistema de coordenadas limite do n
TransformGroup myGroup = new TransformGroup( );
BoundingLeaf myLeaf = new BoundingLeaf( myBounds
);
myGroup.addChild( myLeaf );
. . .
PointLight myLight = new PointLight( );
myLight.setInfluencingBoundingLeaf( myLeaf );
265
Iluminando o ambiente
Um exemplo de limites de influncia
Large bounds Small bounds
[ ExLightBounds ]
266
Iluminando o ambiente
Luzes alcance (Scoping)
A iluminao da luz pode ter seu campo de atividade
para um ou mais grupos de formas
Formas dentro dos limites de influncia e dentro
daquele grupo so iluminadas
Por default, as luzes tem um alcance universal e
iluminam tudo dentro do seu limite de influncia
267
Iluminando o ambiente
Mtodos da classe Light
Mtodos da classe Light controlam a lista de
alcance
Mtodos
void setScope( Group group, int
index )
void addScope( Group group )
void insertScope( Group group, int
index )
void removeScope( int index )
268
Iluminando o ambiente
Um exemplo de cdigo alcance (scoping)
Construa um grupo de formas
TransformGroup myLightable = new TransformGroup(
);
Shape3D myShape = new Shape3D( myGeom, myAppear
);
myLightable.addChild( myShape );
Crie uma luz e adicione o grupo a sua lista do espao
DirectionalLight myLight = new DirectionalLight(
);
myLight.addScope( myLightable );
269
Iluminando o ambiente
Um exemplo alcance (scoping)
[ ExLightScope ]
270
Iluminando o ambiente
Resumo
Java 3D fornece quatro tipos de luzes:
AmbientLight
DirectionalLight
PointLight
SpotLight
Todas as luzes tem cor, podem ser ligadas de
desligadas, e tem limites de influncia e lista de
alcance
As luzes direcionais tem um sentido do alvo
Os pontos de luz tem uma posio e atenuao
As luzes spot tem um sentido do alvo, posio,
atenuao, e uma concentrao na propagao do cone
271
Iluminando o ambiente
Resumo
As luzes iluminam formas dentro de seus limites de
influncia
O default sem influncia, ento nada est
iluminado!
e dentro dos grupos na lista de alcance da luz
O default alcance universal, ento tudo est
iluminado (se dentro dos limites de influncia)
272
Construindo um universo virtual
Motivao 273
Olhando o contedo do ramo 274
Terminologia 275
Hierarquia da classe superestrutura grafo de cena 276
Mtodos da classe VirtualUniverse 277
Mtodos da classse Locale 278
Mtodos da classe Locale 279
Um exemplo de cdigo construindo um universo 280
Um exemplo de cdigo construindo um universo 281
Resumo 282
273
Construindo um universo virtual
Motivao
Ns necessitamos montar pedaos de grande
contedo
Construa os componentes separadamente
Monte-os dentro de um universo virtual (virtual
universe)
Ns necessitamos da superestrutura grafo de cena
(scene graph superstructure)
274
Construindo um universo virtual
Olhando o contedo do ramo
A superestrutura do universo virtual inclui a parcela
superior do grafo de cena
275
Construindo um universo virtual
Terminologia
Relembremos alguns termos que foram introduzidos
no incio deste curso
Virtual universe: uma coleo de grafos de cena
Tipicamente um universo por aplicao
Locale: uma posio no universo na qual se pe os
grafos de cena
Tipicamente um local por universo
Branch graph: um grafo de cena
Tipicamente vrios grafos de cena por locale
Ramos de contedo e de vista so ambos grafos de
cena (branch graphs)
276
Construindo um universo virtual
Hierarquia da classe superestrutura Scene
graph
Universes e locales so construidos usando a classe
superstrutura
Hierarquia da classe
java.lang.Object
javax.media.j3d.VirtualUniverse
javax.media.j3d.Locale
javax.media.j3d.Node
javax.media.j3d.Group
javax.media.j3d.BranchGroup
277
Construindo um universo virtual
Mtodos da classe VirtualUniverse
Mtodos na classe VirtualUniverse acessam a
lista de Locales
Mtodos
VirtualUniverse( )
Enumeration getAllLocales( )
int numLocales( )
278
Construindo um universo virtual
Mtodos da classe Locale
Mtodos na classe Locale posicionam o mundo
dentro de um VirtualUniverse
Mtodos
Locale( VirtualUniverse universe )
Locale( VirtualUniverse universe,
HiResCoord hiRes )
void setHiRes( HiResCoord hiRes )
279
Construindo um universo virtual
Mtodos da classe Locale
Os mtodos Locale tambm gerenciam a lista de
grafos de cena
Mtodos
void addBranchGraph( BranchGroup
branchGroup )
void removeBranchGraph( BranchGroup
branchGroup )
void replaceBranchGraph( BranchGroup
oldGroup, BranchGroup newGroup )
int numBranchGraphs( )
Enumeration getAllBranchGraphs( )
280
Construindo um universo virtual
Um exemplo de cdigo construindo um universo
Construa o universo
VirtualUniverse myUniverse = new VirtualUniverse(
);
Construa o local
Locale myLocale = new Locale( myUniverse );
Construa o ramo de grupo
BranchGroup myBranch = new BranchGroup( );
281
Construindo um universo virtual
Um exemplo de cdigo construindo um universo
Construa ns e grupos de ns
Shape3D myShape = new Shape3D( myGeom, myAppear
);
Group myGroup = new Group( );
myGroup.addChild( myShape );
Adicione-os ao ramo de grupo
myBranch.addChild( myGroup );
Adicione o ramo de grupo ao local
myLocale.addBranchGraph( myBranch );
282
Construindo um universo virtual
Resumo
Um VirtualUniverse contm tudo dentro de
um ou mais Locales
As posies Locale de um universo contm um ou
mais BranchGroups
Um BranchGroup contm um grafo de cena,
frequentemente com ramos separados para o contedo
e a informao da viso
283
Introduzindo o modelo de viso
Motivao 284
Olhando para a viso de um ramo 285
Coexistindo nos mundos fsicos e virtuais 286
Entendendo obrigaes e polticas 287
Entendendo a poltica de viso 288
Entendendo os displays room-mounted 289
Entendendo os displays room-mounted 290
Entendendo os displays room-mounted 291
Entendendo os displays room-mounted 292
Entendendo os displays room-mounted 293
Entendendo os displays head-mounted 294
Entendendo os displays head-mounted 295
Entendendo os displays head-mounted 296
Entendendo os displays head-mounted 297
Entendendo os displays head-mounted 298
Entendendo fsica para mapeamento virtual 299
Entendendo fsica para mapeamento virtual 300
Entendendo fsica para mapeamento virtual 301
Entendendo fsica para mapeamento virtual 302
Entendendo fsica para mapeamento virtual 303
Colocando todos juntos 304
Colocando todos juntos 305
Usando a poltica de juntar vises 306
Usando a cabea na poltica de juntar vises 307
Usando os ps na poltica de juntar vises 308
Usando a tela na poltica de juntar vises 309
Usando o modelo de viso Java 3D 310
Usando o modelo de viso Java 3D 311
Olhando para as classes modelo de viso 312
Olhando para as classes modelo de viso 313
Olhando para as classes modelo de viso 314
Olhando o que onde 315
Olhando o que onde 316
Olhando o que onde 317
Olhando o que onde 318
Olhando o que onde 319
Resumo 320
284
Introduzindo o modelo de viso
Motivao
Ns necessitamos o controle sobre a posio virtual e
a orientao do usurio
Navegar seu ponto de vista usando o mouse, ou
outro dispositivo de entrada
Ou mover o ponto de vista automaticamente num
excurso guiada
Ns chamamos tal ponto de vista do usurio de uma
plataforma da vista
Ns tambm necessitamos de uma abstrao
cuidadosa dos dispositivos de hardware
Suporta diferentes configuraes de display
Stereo, HMDs, portais multi-screen
Suporta rastreadores de cabea
285
Introduzindo o modelo de viso
Olhando para a viso de um ramo
Controles de viso so tipicamente colocados em um
ramo de viso (view branch) paralelo do grafo de cena
286
Introduzindo o modelo de viso
Coexistindo nos mundos fsicos e virtuais
Formas, ramos de grupos, locais e o virtual universo
definem o mundo virtual (virtual world)
Um usurio co-existe no mundo virtual e no mundo
fsico
O usurio tem uma posio e uma orientao no
mundo virtual
O usurio, e seu display, tem posies e orientaes
no mundo fsico (physical world)
A modelo de viso do Java 3D manipula o
mapeamento entre os mundos virtuais e fsico
287
Introduzindo o modelo de viso
Entendendo obrigaes e polticas
Uma srie de relacionamentos controla este
mapeamento entre mundos
Localizao do olho e relativa a cabea do usurio
Localizao da cabea relativa ao rastreador da
cabea
Rastreador da cabea relativo a base do rastreador
Base do rastreador relativo a o plano de imagem
(display)
. . . e assim, com variaes
Um sistema de reserva (constraint system) define
estes relacionamentos
Para um dado ambiente e uso, alguns
relacionamentos so constantes, enquanto outros
variam
A poltica do Java 3D seleciona sobre entre sistemas
de reserva padro e controlam como eles se adaptam
as trocas
288
Introduzindo o modelo de viso
Entendendo a poltica de viso
A poltica de viso (view policy) seleciona um de
dois sistemas de reserva
Displays room-mounted
Displays as quais suas localizaes so fixadas
CRTs, projetores de vdeo, walls multi-screen,
portais
Display head-mounted
Displays as quais suas localizaes sa trocadas tal
qual o usurio se move
HMDs
289
Introduzindo o modelo de viso
Entendendo os displays room-mounted
Em um display room-mounted, o usurio olha para o
display com uma localizao fixa relativa ao mundo
fsico
Desktop CRT Video wall Portal
290
Introduzindo o modelo de viso
Entendendo os displays room-mounted
Os componentes do mundo fsico incluem:
Cabea - o usurio!
Olho - um "olho central" na cabea do usurio
Placa da imagem - o display fsico
Rastreador de cabea - o ponto do rastreador na
cabea do usurio
Base do rastreador - o emiter do sistema de
rastreamento ou ponto de referncia
291
Introduzindo o modelo de viso
Entendendo os displays room-mounted
O sistema de reserva usa a localizao relativa do olho
em relao ao plano de imagem para computar a viso
correta de tudo que est visvel na pirmide formada
pelo ponto do olho at o plano de imagem (frustum)
Quando usado um rastreador de cabea, o ponto do
olho computado automaticamente
Quando no usado um rastreador de cabea, o ponto
do olho pode ser estabelecido manualmente
292
Introduzindo o modelo de viso
Entendendo os displays room-mounted
Para mapear do olho para o plano de imagem, o
sistema de reserva usa a cadeia de mapeamento do
sistema de coordenadas
293
Introduzindo o modelo de viso
Entendendo os displays room-mounted
Constantes na configurao:
(amarelo)
Corpo fsico
Olho-para-cabea
Cabea-para-rastreador de
cabea
Tela
Base do rastreador-para-
plano de imagem
Variam durante o uso:
(vermelho)
Rastreador de cabea-para-
base do rastreador
294
Introduzindo o modelo de viso
Entendendo os displays head-mounted
Em um display head-mounted , cada olho olha para
seu prprio display com uma localizao fixa relativa
a cabea do usurio
295
Introduzindo o modelo de viso
Entendendo os displays head-mounted
Os componentes do mundo fsico incluem:
Cabea - o usurio!
Olhos - olhos esquerdo e direito na cabea do usurio
Planos de imagem - um display fsico por olho
Rastreador de cabea - o ponto de rastreamento na
cabea do usurio
Base do rastreador - o emissor do sistema de
rastreamento ou ponto de referncia
296
Introduzindo o modelo de viso
Entendendo os displays head-mounted
O sistema de reserva usa as localizaes dos olhos
esquerdo e direito, relativas aos planos de imagens
esquerdo e direito, para computar a viso do frustums
corretos
297
Introduzindo o modelo de viso
Entendendo os displays head-mounted
Para mapear dos olhos esquerdos e direitos os seus
planos de imagens, o sistema de reserva usa uma
cadeia de mapeamento das coordenadas do sistema
298
Introduzindo o modelo de viso
Entendendo os displays head-mounted
Constantes na configurao:
(amarelo)
Corpo fsico
Olhos esquerdo/direito-para-
mapeamento da cabea
Cabea-para-rastreador de
cabea
Tela
Rastreador de cabea-para-
plano de imagem
esquerdo/direito
Variam durante o uso:
(vermelho)
Rastreador de cabea-para-
base do rastreador
299
Introduzindo o modelo de viso
Entendendo fsica para mapeamento
virtual
Recordando que o usurio co-existe nos mundos
virtual e fsico
O usurio tem fisicamente uma posio e orientao
O usurio tambm tem uma virtual posio e
orientao
Os displays rooms e head-mounted manipulam a
poltica de viso mapeando do corpo fsico do usurio
para a base do rastreador e planos de imagem
Para mapear deste mundo fsico paa o mundo virtual,
para ns adicionamos a cadeia do sistema de reserva:
Coexistncia da base do rastreador
Coexistncia da plataforma de viso
Plataforma de viso para o locale
Locale para o virtual universe
300
Introduzindo o modelo de viso
Entendendo fsica para mapeamento
virtual
Por exemplo, em um mundo virtual imagine que a
plataforma de visso um tapete mgico
O usurio pode andar sobre o tapete
O tapete voa sob o controle da aplicao
Define-se a origem da plataforma de viso no "nvel
terra", no centro do tapete
301
Introduzindo o modelo de viso
Entendendo fsica para mapeamento
virtual
No mundo fsico, imagine que o usurio est
posicionado em um portal
As imagens do mundo virtual so renderizadas sobre
trs lados
A posio do usurio rastreada dentro do portal
Define-se a origem do portal no nvel terra, no centro
do portal
302
Introduzindo o modelo de viso
Entendendo fsica para mapeamento
virtual
As configuraes fsicas dos dispositivos e a poltica
de viso do display room-mounted estabelecem:
Mapeamentos do olho para cabea, para o rastreador
de cabea, para a base do rastreador, para o plano de
imagem (Tela do portal)
A base do rastreador para coexistir transforma
mapas da base do rastreador para o centro do portal
Ou o que ponto de referncia voc preferir
Tal como o usurio se move, sua posio
computvel relativamente a esta coexistncia de frame
da referncia - o centro do portal
303
Introduzindo o modelo de viso
Entendendo fsica para mapeamento
virtual
No lado virtual, a o grafo de cena estabelece:
Mapeamento do centro de viso da plataforma, para
o locale, para o virtual universe
O centro da plataforma de viso co-existe com o
centro do portal (ou onde quer que a coexistncia
seleciona transformaes)
Juntos, estes mapeamentos fsico e virtual
estabelecem coexistncia
Movimentos no mundo fsico fornecem
peculiaridades correspondendo ao movimento no
mundo virtual
304
Introduzindo o modelo de viso
Colocando todos juntos
A poltica de viso do display room-mounted:
305
Introduzindo o modelo de viso
Colocando todos juntos
A poltica de viso do display head-mounted:
306
Introduzindo o modelo de viso
Usando a poltica de juntar vises
A poltica de juntar vises estabelece como a origem
da plataforma de viso posicionada relativa ao
usurio (i.e., como ela juntada a viso do usurio)
Nominal head
Nominal feet
Nominal screen
307
Introduzindo o modelo de viso
Usando a poltica de juntar vises
A nominal head posiciona a origem da plataforma de
viso na cabea do usurio
Conveniente para arranjos de conteudos ao redor da
cabea do usurio para displays heads-up
A maioria dos "velhos" modelos de viso
308
Introduzindo o modelo de viso
Usando a poltica de juntar vises
A nominal feet posiciona a origem da plataforma de
viso no p do usurio, no plano do cho
Conveniente para walk-throughs onde o p do
usurio pode tocar o cho virtual
309
Introduzindo o modelo de viso
Usando a poltica de juntar vises
A nominal screen posiciona a origem da plataforma
de viso no centro da tela
Habilita o usurio a ver objetos de um ponto de vista
timo
310
Introduzindo o modelo de viso
Usando o modelo de viso Java 3D
Ento, o modelo de viso composto de:
Uma poltica de viso para escolher um sistema de
reserva room ou head-mounted
Um conjunto de corpo fsico, ambiente fsico, e
parmetros de configurao de tela
Um conjunto de polticas para guiar o sistema de
reserva escolhido
Incluindo a potica de juntar vises
311
Introduzindo o modelo de viso
Usando o modelo de viso Java 3D
As polticas do mundo fsico e parmetros so
estabelecidos quando o sistema instalado e a
inicialmente configurado
Os programadores de aplicaes raramente
necessitam ajust-las
As poltiacas do mundo virtual e parmetros so
estabelecidos quando a aplicao inicia
O sistema de reserva mantm ento peculiaridades
nas relaes de coexistncia tanto quanto o usurio se
move
312
Introduzindo o modelo de viso
Olhando para as classes do modelo de
viso
Vamos olhar para as classes as quais esto
envolvidas no modelo de viso
A classe VirtualUniverse define o sistema de
coordenadas do universo
A classe Locale posiciona o ramo do grafo de cena
dentro daquele universo
A classe ViewPlatform (e a classe
Transform3D sobre ela) definem o ponto de viso
dentro daquele local
Ele define o frame de referncia para a posio e
orientao do usurio no mundo virtual
Pense ele como um tapete mgico
Podem existir muitas ViewPlatforms em um
grafo de cena
313
Introduzindo o modelo de viso
Olhando para as classes do modelo de
viso
A classe View o usurio virtual posicionado sobre
uma ViewPlatform
Podem existir muitos Views na mesma
ViewPlatform
A classe PhysicalBody descreve as dimenses do
usurio para ser usado pela View
Existe sempre um PhysicalBody para uma View
A classe PhysicalEnvironment descreve o
ambiente do usurio para ser usado por uma View
Existe sempre um PhysicalEnvironment para
uma View
314
Introduzindo o modelo de viso
Olhando para as classes do modelo de
viso
A classe Canvas3D seleciona a rea da tela na qual
desenha uma View
Toda View tem um ou mais Canvas3Ds
A classe Screen3D descreve o dispositivo display
fsico (plano de imagem) desenhada sobre uma
Canvas3D
A classe Canvas3D sempre tem uma Screen3D
para desenhar sobre ela
315
Introduzindo o modelo de viso
Olhando o que onde
E agora, a poltica do modelo de viso e parmetros
so encontrados nestas classes
A localizao e orientao do usurio controlada
por uma ViewPlatform:
Uma Transform3D sobre a ViewPlatform
move a plataforma sobre
A poltica de juntar vises alinha a origem da
plataforma com a tela , cabea ou ps do usurio
316
Introduzindo o modelo de viso
Olhando o que onde
As polticas de viso e parmetros so controladas
por uma View
A poltica de projeo seleciona projeo perspectiva
ou paralela
A poltica de viso seleciona sistema de reserva
display room- ou head-mounted
Vrias poltica de janelas controlam como a viso do
frustum se adaptam as trocas de parmetros de viso
317
Introduzindo o modelo de viso
Olhando o que onde
As dimenses do usurio fisico so descritas por um
PhysicalBody
Parmetros estabelecem posies dos olhos esquerdo
e direito e ouvidos
Parmetros tambm estabelecem a altura da nominal
head do cho, e do deslocamento nominal eye da
nominal screen
Uma transformao descreve a relao entre a cabea
e o rastreador de cabea
318
Introduzindo o modelo de viso
Olhando o que onde
Os displays do usurio, sensores de entrada, e sons
do ambiente so descritos por um
PhysicalEnvironment
Uma transformao descreve a relao de
coexistncia entre a base do rastreador
Um conjunto de entradas abstratas fornecem acesso
aos rastreadores
Um dispositivo de audio habilita som playback
319
Introduzindo o modelo de viso
Olhando o que onde
A rea de desenho selecionada por um Canvas3D
O dispositivo de tela fsico descrito por um
Screen3D (plano de imagem)
Uma transformao descreve a relao entre a base
do rastreador e o plano de imagem
Os parmetros estabelecem a altura e largura do
display fsico (em metros)
320
Introduzindo o modelo de viso
Resumo
Mundo virtual:
Uma ViewPlatform controla a posio e
orientao virtuais do usurio
Uma View estabelece a poltica de viso, etc.
Mundo fsico:
Uma PhysicalBody descrive o usurio
Uma PhysicalEnvironment descreve o
ambiente do usurio
Uma Canvas3D seleciona a regio a ser desenhada
Uma Screen3D descreve o dispositivo de tela
321
Vendo a cena
Motivao 322
Olhando para o ramo do grafo viso 323
Criando uma plataforma de viso (ViewPlatform) 324
Usando plataformas de viso (ViewPlatforms) 325
Estabelecendo o raio de ativao 326
Usando a poltica de juntar vises 327
Mtodos da classe ViewPlatform 328
Um exemplo de cdigo ViewPlatform 329
Usando vises 330
Estabelecendo a poltica de projees de vises 331
Estabelecendo a poltica de viso 332
Estabelecendo dados fsicos para a viso 333
Usando um Canvas3D 334
Mtodos da classe Canvas3D 335
Mtodos da classe Canvas3D 336
Usando uma Screen3D 337
Usando uma Screen3D 338
Descrevendo o corpo fsico do usurio 339
Descrevendo o corpo fsico do usurio 340
Descrevendo o ambiente fsico 341
Um exemplo de cdigo View 342
Usando poltica de janelas de vises 343
Usando a poltica de janelas de vises 344
Usando a poltica de janelas de vises 345
Usando a poltica de janelas de vises 346
Mtodos da classe View 347
Mtodos da classe View 348
Estabelecendo a poltica de escala de viso na tela 349
Estabelecendo a poltica de viso monoscpica 350
Usando uma configurao desktop 351
Usando uma configurao HMD 352
Usando uma configurao portal 353
Usando uma configurao wall 354
Usando mltiplas plataformas de vises 355
Usando mltiplas vises 356
Um exemplo de cdigo de bancada imersivo 357
Um exemplo de cdogo de bancada imersivo 358
Resumo 359
322
Vendo a cena
Motivao
Agora ns podemos olhar profundamente para as
classes e mtodos de modelos de viso
Todos tem valores defaults razoveis
Para sistemas de displays complexos, a configurao
do sistema gerente estabelece os valores defaults
Depois disso, as aplicaes no necessitam estar
cientes dos detalhes da configurao
323
Vendo a cena
Olhando para ramo do grafo viso
Vamos comear com a ViewPlatform, e o
trabalho de visualizar objetos
324
Vendo a cena
Criando uma plataforma de viso
(ViewPlatform)
Uma ViewPlatform define o ponto de viso
dentro da cena
Ele define o eixo de referncia para a posio e
orientao do usurio no mundo virtual
Pense nele como um tapete mgico no qual o usurio
est posicionado
Podem existir muitos ViewPlatforms no grafo de
cena
325
Vendo a cena
Usando plataformas de vises
(ViewPlatforms)
Uma ViewPlatform uma folha no grafo de cena
Ele pode ser transformado por um pai
TransformGroup
A interface do usurio e caractersticas da animao
podem modificar aquele TransformGroup para
mover a plataforma (voando o tapete mgico)
326
Vendo a cena
Estabelecendo o raio de ativao
Cada ViewPlatform tem um raio de ativao
(activation radius) que define a regio de interesse
Animation behaviors, sounds, backgrounds, fog, e
outros ns tem limites de volume (bounding volumes)
Quando o raio de ativao cruza-se com estes limites,
estes ns esto ativos
Backgrounds ou fog so ativados
Sounds e behaviors so programados
327
Vendo a cena
Usando a poltica de juntar vises
Cada ViewPlatform tem uma poltica de juntar
vises que determina como a Viewdo usurio
relativamente posicionada a origem da ViewPlatform
NOMINAL_HEAD
origem na cabea
do usurio
(default)
NOMINAL_FEET
origem no p do
usurio
NOMINAL_SCREEN
origem no centro da
tela
328
Vendo a cena
Mtodos da classe ViewPlatform
Mtodos na classe ViewPlatformestabelecem o
raio de ativao e a poltica de juntar vises
Mtodos
ViewPlatform( )
void setActivationRadius( float
radius )
void setViewAttachPolicy( int policy
)
Os valores de poltica incluem:NOMINAL_SCREEN,
NOMINAL_HEAD (default), e NOMINAL_FEET
329
Vendo a cena
Um exemplo de cdigo ViewPlatform
Crie um TransformGroup para dirigir a plataforma
TransformGroup viewGroup = new TransformGroup(
);
viewGroup.setCapability(
TransformGroup.ALLOW_TRANSFORM_WRITE );
Adicione uma ViewPlatform
ViewPlatform myPlatform = new ViewPlatform( );
myPlatform.setActivationRadius( 1000.0f );
myPlatform.setViewAttachPolicy( View.NOMINAL_HEAD
);
viewGroup.addChild( myPlatform );
Adicione-os ao ramo do grafo de viso BranchGroup
BranchGroup viewBranch = new BranchGroup( );
viewBranch.addChild( viewGroup );
myLocale.addBranchGraph( viewBranch );
330
Vendo a cena
Usando vises
Uma View representa o usurio na
ViewPlatform
Ela gerencia a renderizao da cena dentro da regio
da tela do ponto de vista do usurio
Aquela regio de tela uma Canvas3D (estende
AWT Canvas)
Tipicamente, adicione um Canvas3D para um
Frame Java, aponte ento uma View naquele canvas
Mtodos
View( )
void attachViewPlatform(
ViewPlatform vp )
void setCanvas3D( Canvas3D c3d )
331
Vendo a cena
Estabelecendo a poltica de projeo de
vises
A renderizao completa de uma View pode usar
PERSPECTIVE_PROJECTION (default) ou
PARALLEL_PROJECTION
Voc pode tambm controlar planos de corte
dianteiros e traseiros
Mtodos
void setProjectionPolicy( int policy
)
void setFrontDistance( double
distance )
void setBackDistance( double
distance )
332
Vendo a cena
Estabelecendo a poltica de viso
A poltica de viso da View seleciona o sistema de
reserva para ser usado pela configurao do display
SCREEN_VIEW: displays room-mounted (default)
HMD_VIEW: displays head-mounted
Mtodo
void setViewPolicy( int policy )
Desktop CRT Video wall
Portal HMD
333
Vendo a cena
Estabelecendo dados fsicos para a viso
Os mtodos View selecionam o corpo fsico e o
ambiente a ser usado com a poltica de viso
Mtodos
void setPhysicalBody( PhysicalBody
pb )
void setPhysicalEnvironment(
PhysicalEnvironment pe )
334
Vendo a cena
Usando um Canvas3D
Canvas3D estende a classe AWT Canvas para
sustentar:
Estreo
Buferizao dupla
Uma Screen3D
A classe Canvas3D descreve a regio da
Screen3D na qual desenha a View
A classe Screen3D descreve o dispositivo fsico de
tela (plano de imagem)
335
Vendo a cena
Mtodos da classe Canvas3D
Os mtodos em Canvas3D configuraram o uso do
Screen3D subjacente, incluindo a sustentao para
os mtodos estreos
Mtodos
Canvas3D( Configuration gc )
boolean getStereoAvailable( )
void setStereoEnable( boolean flag
)
boolean getDoubleBufferAvailable( )
void setDoubleBufferEnable( boolean
flag )
336
Vendo a cena
Mtodos da classe Canvas3D
Quando no usam rastreadores de cabea, os
mtodos em Canvas3D tambm estabelecem
manualmente as localizaes dos olhos esquerdo e
direito relativas ao plano de imagem
Mtodos
void setLeftManualEyeInImagePlate(
Point3d position )
void setRightManualEyeInImagePlate(
Point3d position )
337
Vendo a cena
Usando uma Screen3D
Os mtodos em Screen3D descrevem o dispositivo
fsico e a base do rastreador para a transformao do
plano de imagem
Mtodos
void setPhysicalScreenWidth( double
width )
void setPhysicalScreenHeight( double
height )
338
Vendo a cena
Usando uma Screen3D
Os mtodos em Screen3D tambm estabelecem
transformaes para posicionar a base do rastreador
relativamente a um plano de imagem simples (para
displays room-mounted) ou para os planos de imagens
esquerdo e direito (para displays head-mounted)
Mtodos
void setTrackerBaseToImagePlate(
Transform3D trans )
void setTrackerBaseToLeftImagePlate(
Transform3D trans )
void
setTrackerBaseToRightImagePlate(
Transform3D trans )
339
Vendo a cena
Descrevendo o corpo fsico do usurio
Os mtodos em PhysicalBody estabelecem as
posies dos olhos e ouvidos, e a altura do usurio
Mtodos
PhysicalBody( )
void setLeftEarPosition( Point3d
position )
void setRightEarPosition( Point3d
position )
void setLeftEyePosition( Point3d
position )
void setRightEyePosition( Point3d
position )
void setNominalEyeHeightFromGround(
double height )
340
Vendo a cena
Descrevendo o corpo fsico do usurio
Os mtodos em PhysicalBody tambm
estabelecem a posio do rastreador de cabea relativa a
cabea, e a posio da tela relativa aos olhos
Mtodos
void setHeadToHeadTracker(
Transform3D trans )
void
setNominalEyeOffsetFromNominalScreen(
double offset )
341
Vendo a cena
Descrevendo o ambiente fsico
Os mtodos em PhysicalEnvironment
estabelecem a coexistncia da transformao da base
do rastreador
Mtodos
PhysicalEnvironment( )
void setCoexistenceToTrackerBase(
Transform3D trans )
O PhysicalEnvironment tambm descreve o
conjunto de sensores de entrada disponveis, discutido
em outra seo
342
Vendo a cena
Um exemplo de cdigo View
Crie um Canvas3D com uma configurao default
(automaticamente criando um Screen3D)
Canvas3D myCanvas = new Canvas3D( null );
Crie um View e d a ele um Canvas3D
View myView = new View( );
myView.setCanvas3D( myCanvas );
E junte a ViewPlatform para a View
myView.attachViewPlatform( myPlatform );
Use defaults para o corpo fsico, o ambiente fsico, e
tranformaes misturadas
343
Vendo a cena
Usando poltica de janelas de vises
A poltica de redimencionamento de uma View
estabelecem trocas de vises em um
redimensionamento de janelas
PHYSICAL_WORLD
A mesma vista preenche a
janela
VIRTUAL_WORLD
Trocas de viso para ver
mais/menos
344
Vendo a cena
Usando poltica de janelas de vises
Uma poltica de movimento da View estabelece
como a viso troca no movimento da janela
PHYSICAL_WORLD
Mesma viso preenche a
janela
VIRTUAL_WORLD
Troca da viso para ver
esquerda/direita/acima/abaixo
345
Vendo a cena
Usando a poltica de janelas de vises
Quando usado rastreador de cabea, o sistema de
reserva automaticamente troca a viso frustum tal qual
a cabea do usurio se move
346
Vendo a cena
Usando a poltica de janelas de vises
Quando no for usado o rastreador de cabea, a poltica de ponto de olho
(eyepoint) da View, estabelece como ver as trocas no frustum no movimento da
janela
RELATIVE_TO_SCREENTroca
no frustum
RELATIVE_TO_WINDOW
No h troca no frustum
RELATIVE_TO_FIELD_OF_VIEW (default) habilita a aplicao para
estabelecer o campo de viso diretamente. O ponto do olho muda
consequentemente
347
Vendo a cena
Mtodos da classe View
Os mtodos View estabelecem estas polticas da
janela
Mtodos
void setWindowEyepointPolicy( int
policy )
void setWindowMovementPolicy( int
policy )
void setWindowResizePolicy( int
policy )
348
Vendo a cena
Mtodos da classe View
Quando usado RELATIVE_TO_FIELD_OF_VIEW
para poltica de janela de ponto de olho, voc pode
estabelecer o campo de viso da View
Mtodo
void setFieldOfView( double fovx )
349
Vendo a cena
Estabelecendo a poltica de escala de viso
na tela
Uma poltica de escala de viso (screen scale policy)
da View seleciona como o fator de escala da view
escolhido:
SCALE_EXPLICIT: estabelea ela usando
setScreenScale
SCALE_SCREEN_SIZE: derive ela do tamanho
fsico da tela (default)
Mtodos
void setScreenScalePolicy( int
policy )
void setScreenScale( double scale )
350
Vendo a cena
Estabelecendo a poltica de viso
monoscpica
Uma poltica de viso monoscpica (monoscopic
view policy) da View seleciona como uma viso de
uma imagem simples criada quando um Canvas3D
no est em modo estreo
LEFT_EYE_VIEW: renderiza do olho esquerdo
RIGHT_EYE_VIEW: renderiza do olho direito
CYCLOPEAN_EYE_VIEW: renderiza do "centro" do
olho, metade entre os olhos esquerdo e direito (default)
Mtodo
void setMonoscopicViewPolicy( int
policy )
351
Vendo a cena
Usando a configurao desktop
Use um simples Canvas3D para um desenho de
uma superfcie simples em uma configurao desktop
352
Vendo a cena
Usando uma configurao HMD
Use dois Canvas3D para desenho de superfcies
esquerda e direita em uma configurao HMD
353
Vendo a cena
Usando a configurao portal
Use trs Canvas3Ds para o desenho das superfcies
esquerda, frente e direita em uma configurao portal
354
Vendo a cena
Usando uma configurao wall
Use quatro ou mais Canvas3Ds para o desenho da
superfcie multi-telas (multi-screen) em uma
configurao wall
355
Vendo a cena
Usando mltiplas plataformas de vises
Um grafo de cena pode conter mltiplas
ViewPlatforms
Quando uma View juntada a plataforma, a cena
renderizada daquele ponto de vista
Movendo uma View de uma plataforma para outra
"teleporta" o usurio para um novo ponto de vista
356
Vendo a cena
Usando mltiplas vises
Uma ViewPlatform pode ter mltiplas Views
juntadas
Cada View renderiza a mesma cena desta plataforma
Voc poderia seguir a pista de mltiplos usurios,
cada um com sua prpria View naquela plataforma
357
Vendo a cena
Um exemplo de cdigo de bancada imersivo
Para um bancada imersiva, use canvas e screen simples
myView.setCanvas3D( myCanvas );
Use uma poltica de viso de display room-mounted:
myView.setViewPolicy( View.SCREEN_VIEW );
Junte viso da cabea do usurio:
myViewPlatform.setViewAttachPolicy(
View.NOMINAL_HEAD );
Use a poltica de janela virtual-world e o ponto de olho screen-
relative:
myView.setWindowResizePolicy( View.VIRTUAL_WORLD
);
myView.setWindowMovementPolicy(
View.VIRTUAL_WORLD );
myView.setWindowEyePointPolicy(
RELATIVE_TO_SCREEN );
358
Vendo a cena
Um exemplo de cdigo de bancada imersivo
Habilite o rastreador de cabea e posicione-o coexistindo com a base
do rastreador:
myView.setTrackingEnable( true );
myPhysEnv.setCoexistenceToTrackerBase( ident );
Localize a base do rastreador relativa a bancada:
Screen3D myScreen = myCanvas.getScreen3D( );
myScreen.setTrackerBaseToImagePlate( transform );
E configure o tamanho da tela e a poltica de escala:
myScreen.setPhysicalScreenHeight( height );
myScreen.setPhysicalScreenWidth( width );
myScreen.setScreenScalePolicy(
View.SCALE_EXPLICIT );
359
Vendo a cena
Resumo
Uma ViewPlatform posiciona a View do usurio
da cena
Uma View controla como renderizar a cena
Um Canvas3D seleciona a regio da tela na qual
uma View deve renderizar
Uma Screen3D descreve essa tela
Um PhysicalBody descreve o usurio
Um PhysicalEnvironment descreve o
ambiente do usurio
360
Construindo um universo simples
Motivao 361
Usando SimpleUniverse 362
Mtodos da classe SimpleUniverse 363
Um exemplo de cdigo SimpleUniverse 364
Resumo 365
361
Construindo um universo simples
Motivao
Voc pode criar universes, locales, branchs, view
platforms, views, e assim por diante por voc mesmo
Ou voc pode usar o utilitrio SimpleUniverse
para criar um conjunto padro para voc
Muito mais fcil e apropriado para a maioria de
aplicaes
362
Construindo um universo simples
Usando SimpleUniverse
Um SimpleUniverse encapsula uma
superestrutura comum
363
Construindo um universo simples
Mtodos da classe SimpleUniverse
Mtodos na classe SimpleUniverse constri o
universo e junta o contedo a ele
Mtodos
SimpleUniverse( Canvas3D canvas )
void addBranchGraph( BranchGroup
group )
364
Construindo um universo simples
Um exemplo de cdigo SimpleUniverse
Crie um Canvas3D com uma configurao default
(automaticamente criando uma Screen3D)
Canvas3D myCanvas = new Canvas3D( null );
Crie um SimpleUniverse e d para ele um Canvas3D
SimpleUniverse myUniverse = new SimpleUniverse(
myCanvas );
E junte seu ramo de contedo
myUniverse.addBranchGraph( myBranch );
365
Construindo um universo simples
Resumo
Um SimpleUniverse manipula a infraestrutura
de uma construo padro e componentes de
visualizao
VirtualUniverse
Locale
BranchGroup para visualizar objetos
TransformGroup para mover a plataforma de
viso
ViewPlatform
View
PhysicalBody
PhysicalEnvironment
366
Usando dispositivos de entrada
Motivao 367
Olhando componentes dos dispositivos de entrada 368
Mtodos da interface InputDevice 369
Usando sensores 370
Usando sensores 371
Usando sensores 372
Usando sensores 373
Hierarquia da classe Sensor 374
Mtodos da classe Sensor 375
Mtodos da classe Sensor 376
Mtodos da classe Sensor 377
Hierarquia da classe SensorRead 378
Mtodos da classe SensorRead 379
Resumo 380
367
Usando dispositivos de entrada
Motivao
H mais dispositivos de entrada alm do mouse:
Joysticks
Dispositivos com seis-graus-de-liberdade (Six-degree-
of-freedom devices) (6DOF) como Polhemus, Bird,
SpaceBall, Magellan, rastreadores ultrasnicos, etc.
Teclas, botes, botes deslizantes (sliders)
Lido de algum dispositivo fsico de entrada:
Use a extenso padro do dispositivo de srie
Use a API de rede
Use a interface Java-para-C
Java 3D fornece uma abstrao do dispositivo de
entrada:
Encapsula detalhes especficos do dispositivo atrs de
uma relao genrica
Habilita a integrao com pouco esforo de novos
dispositivos de entrada dentro das aplicaes existentes
de Java
368
Usando dispositivos de entrada
Olhando componentes dos dispositivos de
entrada
Uma implementao da interface InputDevice
fornece:
Uma descrio de um dispositivo contnuo
Inicializao, alerte para um valor, comece um valor,
um fim, etc.
Construo de um ou mais Sensors para acesso
abstrato aos detectores fsicos
Dispositivos podem ser:
Reais (rastreadores, valores da rede)
Virtuais (recuperado de um arquivo, gerado
computacionalmente)
369
Usando dispositivos de entrada
Mtodos da interface InputDevice
Implemente a interface InputDevice para um
novo dispositivo de entrada
Fornea mtodos para inicializar o dispositivo, e
obtenha dados
O resultado principal um ou mais novos Sensors
sensor que abstraem o dispositivo para o uso genrico
em outra parte em Java 3D
Mtodos
void initialize( )
void close( )
void processStreamInput( )
void pollAndProcessInput( )
void setProcessingMode( int mode )
int getSensorCount( )
Sensor getSensor( int sensorIndex )
370
Usando dispositivos de entrada
Usando sensores
Sensor representa uma entrada abstrata de 6DOF e
alguns botes/teclas associados
A abstrao do Sensor habilita a separao entre os
mundos fsicos e virtuais
Mapeia a posio fsica, a orientao, e o estado
abstratos para um valor 6DOF e um estado
Fornece mtodos genricos para acessar estes valores
Os sensores disponveis so controlados por
PhysicalEnvironment
Os sensores so construdos por implementaes de
baixo nvel de InputDevice
371
Usando dispositivos de entrada
Usando sensores
PhysicalEnvironment mantm uma lista de
sensores
Modelo plugboard: A aplicao atribui Sensors do
dispositivo de entrada s posies no vetor sensor
Cada um especialmente identificado por um ndice
vetor
A aplicao pode associar ndices do sensor com:
HeadIndex
LeftHandIndex
RightHandIndex
DominantHandIndex
NonDominantHandIndex
O sensor que est no HeadIndex usado para
rastreador de cabea, e assim por diante
372
Usando dispositivos de entrada
Usando sensores
Um Sensor controla os ltimos k valores lidos
como objetos SensorRead
Cada SensorRead contm:
Um time-stamp
Um valor 6DOF
Os estados das teclas
Um sensor pode retornar um Transform3D que
pode ser escrito diretamente para um
TransformGroup
373
Usando dispositivos de entrada
Usando sensores
As polticas de prognstico do sensor habilita um
sensor a predizer um futuro valor dado que:
O sensor associado com uma mo (uma luva (data
glove), etc.)
O sensor associado com a cabea (HMD, etc.)
374
Usando dispositivos de entrada
Hierarquia da classe Sensor
Sensor estende Object
Hierarquia da Classe
java.lang.Object
javax.media.j3d.Sensor
375
Usando dispositivos de entrada
Mtodos da classe Sensor
Os mtodos no Sensor obtm acesso ao dispositivo
de entrada . . .
Mtodos
Sensor( InputDevice device )
InputDevice getDevice( )
void setDevice( InputDevice device
)
int getSensorButtonCount( )
376
Usando dispositivos de entrada
Mtodos da classe Sensor
. . . e obtm a ltima entrada
Mtodos
SensorRead getCurrentSensorRead( )
int getSensorReadCount( )
void lastRead( Transform3D read )
void lastRead( Transform3D read, int
kth )
int lastButtons( )
int lastButtons( int kth )
long lastTime( )
long lastTime( int kth )
377
Usando dispositivos de entrada
Mtodos da classe Sensor
Os mtodos tambm estabelecem a poltica de
prognstico e obtm o valor futuro
Mtodos
void setPredictionPolilcy( int
policy )
void setPredictor( int predictor )
void getRead( Transform3D read )
void getRead( Transform3D read, long
deltaT )
A poltica de prognstico inclui: PREDICT_NONE
(default) e PREDICT_NEXT_FRAME_TIME
Prognsticos incluem: NO_PREDICTOR(default) ,
HEAD_PREDICTOR, e HAND_PREDICTOR
378
Usando dispositivos de entrada
Hierarquia da classe SensorRead
SensorRead estende Object e encapsula o
ltimos dados que vieram do dispositivo de entrada
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SensorRead
379
Usando dispositivos de entrada
Mtodos da classe SensorRead
Os mtodos na SensorRead obtm o estado da
tecla corrente e a transformao 3D
Mtodos
SensorRead( )
void get( Transform3D result )
int getButtons( )
long getTime( )
380
Usando dispositivos de entrada
Resumo
Para usar um dispositivo de entrada novo,
implemente uma interface InputDevice e fornea
mtodos para ler esse dispositivo
Fornea o acesso genrico de alto nvel a esse
dispositivo atravs de um Sensor
Um SensorRead contm uma leitura do Sensor
Use mtodos em SensorRead para obter a
transformao associada e o estado da tecla
381
Criando comportamentos
Motivao 382
Motivao 383
Hierarquia da classe Behavior 384
Criando comportamentos 385
Criando comportamentos 386
Mtodos da classe Behavior 387
Um exemplo de cdigo Behavior 388
Criando limites, planejando comportamento (behavior scheduling bounds) 389
Ancorando limites do planejamento 390
Mtodos da classe Behavior 391
Um exemplo de cdigo de limites do planejamento 392
Despertando um comportamento 393
Hierarquia da classe WakeupCriterion 394
Mtodos da classe WakeupCriterion 395
Despertando com um evento AWT 396
Despertando em um tempo decorrido 397
Despertando em uma coliso de forma 398
Despertando na proximidade do visor 399
Compondo critrios para despertar 400
Compondo critrios para despertar 401
Hierarquia da classe WakeupCondition 402
Mtodos da classe WakeupCondition 403
Mtodos da subclasse WakeupCondition 404
Um exemplo de cdigo WakeupCondition 405
Um exemplo de cdigo WakeupCondition 406
Um exemplo WakeupCondition 407
Resumo 408
382
Criando comportamentos
Motivao
Behavior a classe Java que faz trocas no grafo de
cena
Num sentido geral, sua aplicao inteira de Java
um comportamento
Java 3D fornece tambm uma classe Behavior
como uma classe base para os pequenos componentes
mudam a cena
Frequentemente um comportamento para cada forma
que est sendo animada
383
Criando comportamentos
Motivao
O comportamento do Java 3D suporta:
Suporta trocas de contedos arbitrrias -
comportamentos so justamente mtodos Java
Escala comportamentos para executar quando
necessrio
Habilita a composio dos comportamentos
independentes podendo executar paralelamente sem
interferir com os outros
Fornece dead reckoning bsico para execuo da
animao independente da velocidade do host
384
Criando comportamentos
Hierarquia da classe Behavior
Behavior estende Leaf
Sua aplicao estende Behavior mais para criar
um ou mais comportamentos para mudar contedo da
cena
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.Node
javax.media.j3d.Leaf
javax.media.j3d.Behavior
385
Criando comportamentos
Criando comportamentos
Todo comportamento (behavior) contm:
Um mtodo initialize chamado quando o
comportamento tornado vivo
Um mtodo chamado processStimulus quando
o comportamento desperta
Condies de despertar controlando quando o
prximo despertar
Respecificado em cada despertar
Planificando limites controlando planos
Quando o raio de ativao do observador
insterseciona os limites, o comportamento escalado
386
Criando comportamentos
Criando comportamentos
Um comportamento pode fazer qualquer coisa:
Execute computaes
Atualizam seu estado interno
Modificam o grafo de cena
Iniciam uma thread
Por exemplo, um comportamento de girar um prato
do radar para seguir um objeto:
Na iniciao, estabelea critrios iniciais da
excitao
Obtenha a posio do objeto
Crie uma transformao para re-orientar o prato do
radar
Estabelea o TransformGroup do prato do radar
Estabelea o prximo critrios da excitao
Retorne
387
Criando comportamentos
Mtodos da classe Behavior
Os mtodos na classe Behavior incluem aqueles
fornecidos nas suas subclasses, e um mtodo genrico
para habilitar ou desabilitar o comportamento
Mtodos
Behavior( )
void initialize( )
void processStimulus( Enumeration
criteria )
void setEnable( boolean onOff )
void wakeupOn( WakeupCondition
criteria )
388
Criando comportamentos
Um exemplo de cdigo Behavior
Estenda a classe Behavior e preencha os mtodos initialize e
processStimulus
public class MyBehavior extends Behavior {
private WakeupCriterion criteria;
public MyBehavior( ) {
// Do something on construction
. . .
criteria = new WakeupOnAWTEvent( . . . );
}
public void initialize( ) {
// Do something at startup
. . .
wakeupOn( criteria );
}
public void processStimulus( Enumeration
criteria ) {
// Do something on a wakeup
. . .
wakeupOn( criteria );
}
}
389
Criando comportamentos
Criando limites planejando o
comportamento (behavior scheduling
bounds)
Um comportamento necessita somente ser planejado
se o observador estiver prximo
O raio da ativao do observador interseciona seus
limites planejados
O limite do comportamento habilita que
comportamentos caros serem saltados se no
estiverem prximos
Um comportamento que planeja limites uma esfera
de volume limitado
Esfera, caixa, outros, ou a combinao
Para ter um comportamento global, use uma esfera
de limites enormes
Por default, os comportamentos no tm nenhum
limite programando e nunca so executados !
Erro comum: esquecer-se de ajustar planejamento de
limites
390
Criando comportamentos
Anchorando limites do planejamento
Um volume de limites de comportamento pode ser
relativa a:
O sistema de coordenadas do comportamento
Volume centrado na origem
Como a origem se move, ento o volume se move
O sistema de coordenada da folha do comportamento
(Bounding leaf)
O volume centrado no n da folha em outra parte no
grfo da cena
Tal como esse n da folha move, faz assim o volume
Se a origem do comportamento se mover, volume
no move
391
Criando comportamentos
Mtodos da classe Behavior
Os mtodos na classe Behavior estabelecem os
limites do planejamento (scheduling bounds)
Mtodos
void setSchedulingBounds( Bounds
bounds )
void setSchedulingBoundingLeaf(
BoundingLeaf leaf )
392
Criando comportamentos
Um exemplo de cdigo de limites do planejamento
Estabelea limites relativos ao sistema de coordenadas do
comportamento
Behavior myBeh = new MyBehavior( );
myBeh.setSchedulingBounds( myBounds );
Ou relativo ao sistema de coordenadas da folha do comportamento
(bounding leaf)
TransformGroup myGroup = new TransformGroup( );
BoundingLeaf myLeaf = new BoundingLeaf( bounds );
myGroup.addChild( myLeaf );
. . .
Behavior myBeh = new MyBehavior( );
myBeh.setSchedulingBoundingLeaf( myLeaf );
393
Criando comportamentos
Despertando um comportamento
Mesmo quando programado, um comportamento
executado somente quando o critrio de despertar
(wakeup criterion) satisfeito com:
Um nmero de frames ou os milissegundos terem
decorridos
Um comportamento ou um AWT manda um evento
Uma alterao de transformao em um
TransformGroup
Uma forma colide com uma outra forma
Uma plataforma de observador ou o incio pelo
sensor
Mltiplos critrios podem ser AND/ORed para dar
forma a condies de despertar
394
Criando comportamentos
Hierarquia da classe WakeupCriterion
A classe WakeupCriterion estende WakeupCondition para
fornecer mltiplos caminhos de despertar um comportamento
Hierarquia da Classe
java.lang.Object
javax.media.j3d.WakeupCondition
javax.media.j3d.WakeupCriterion
javax.media.j3d.WakeupOnActivation
javax.media.j3d.WakeupOnAWTEvent
javax.media.j3d.WakeupOnBehaviorPost
javax.media.j3d.WakeupOnCollisionEntry
javax.media.j3d.WakeupOnCollisionExit
javax.media.j3d.WakeupOnDeactivation
javax.media.j3d.WakeupOnElapsedFrames
javax.media.j3d.WakeupOnElapsedTime
javax.media.j3d.WakeupOnSensorEntry
javax.media.j3d.WakeupOnSensorExit
javax.media.j3d.WakeupOnTransformChange
javax.media.j3d.WakeupOnViewPlatformEntry
javax.media.j3d.WakeupOnViewPlatformExit
395
Criando comportamentos
Mtodos da classe WakeupCriterion
A base da classe WakeupCriterion fornece
somente um mtodo para perguntar se o despertar for
provocado
Cada uma das subclasses fornece construtores e
mtodos especficos para o critrio de despertar
Mtodos
WakeupCriterion( )
boolean hasTriggered( )
396
Criando comportamentos
Despertando com um evento AWT
Um comportamento pode ser despertado com um
evento AWT especificado
Para usar o mouse para rotacionar geometrias:
Desperte o comportamento pressionando, liberando
ou arrastando o mouse
Em cada evento de arrasto, calcule a distncia
relativa do mouse desde que foi pressionado e mapeie
ela em um ngulo de rotao
Crie uma transformao de rotao e escreva-a em
um TransformGroup
Mtodos
WakeupOnAWTEvent( int AWTid )
AWTEvent getAWTEvent( )
397
Criando comportamentos
Despertando em um tempo decorrido
Um comportamento pode ser despertado depois de
decorrer um nmero de frames ou milisegundos
Mtodos
WakeupOnElapsedFrames( int
frameCount )
int getElapsedFrameCount( )
Mtodos
WakeupOnElapsedTime( long
milliseconds )
long getElapsedFrameTime( )
398
Criando comportamentos
Despertando em uma coliso de forma
Um comportamento pode ser despertado quando uma
geometria de um shape3D:
Entra/sai de coliso com outra forma
Se move enquanto colide com outra forma
A deteco de coliso pode ser aproximada e rpida
pelo uso de volumes limites, no geometrias
Mtodos
WakeupOnCollisionEntry(
SceneGraphPath armingpath )
WakeupOnCollisionExit(
SceneGraphPath armingpath )
WakeupOnCollisionMovement(
SceneGraphPath armingpath )
SceneGraphPath getArmingPath( )
SceneGraphPath getTriggeringPath( )
399
Criando comportamentos
Despertando na proximidade do visor
A proximidade do observador pode despertar um
comportamento sobre:
Entrada/sada de ViewPlatform em uma regio
Mtodos
WakeupOnViewPlatformEntry( Bounds
region )
WakeupOnViewPlatformExit( Bounds
region )
Bounds getBounds( )
A proximidade do sensor pode despertar o
comportamento da mesma forma sobre:
Entrada/sada do sensor em uma regio
Mtodos
WakeupOnSensorEntry( Bounds region
)
WakeupOnSensorExit( Bounds region )
Bounds getBounds( )
400
Criando comportamentos
Compondo critrios para despertar
Um comportamento pode ser despertado quando um
conjunto de critrios ocorrer:
Os critrios so AND e OR juntos para formar
condies de despertar wakeup conditions
Por exemplo:
Despertar sobre qualquer de vrios eventos AWT
(pressionando, liberando ou arrastando o mouse)
Despertar na proximidade do visor OR depois de
algum tempo ter passado
401
Criando comportamentos
Compondo critrios para despertar
As condies de despertar podem ser complexas e
trocadas, por exemplo:
Em um jogo, o usurio deve pressionar duas teclas
dentro de um limite de tempo para abrir uma porta
Condies iniciais de despertar do comportamento
so:
O observador prximo da tecla 1 ou o observador
prximo da tecla 2
Depois que a tecla 1 pressionada, as condies
tornam-se:
O observador prximo da tecla 2 ou tempo decorrido
Se o tempo decorreu, as condies revertem para
trs, ao incio
Se a tecla 2 pressionada a tempo, o comportamento
envia o evento ao comportamento de despertar a
abertura da porta, ento sai sem reescalonar
402
Criando comportamentos
Hierarquia da classe WakeupCondition
A classe WakeupCondition estende Object e
fornece vrias subclasses para agrupar critrios de
despertar (wakeup criterion)
Hierarquia da Classe
java.lang.Object
javax.media.j3d.WakeupCondition
javax.media.j3d.WakeupAnd
javax.media.j3d.WakeupAndOfOrs
javax.media.j3d.WakeupOr
javax.media.j3d.WakeupOrOfAnds
403
Criando comportamentos
Mtodos da classe WakeupCondition
Os mtodos na base da classe WakeupCondition
inquirem somente sobre o critrio de despertar
agrupado
Cada uma das subclasses fornece construtores e
mtodos para agrupamentos especficos de despertar
Mtodos
WakeupCondition( )
Enumeration allElements( )
Enumeration triggeredElements( )
404
Criando comportamentos
Mtodos da subclasse WakeupCondition
A subclasse WakeupCondition possui
construes que usam vetores de
WakeupCriterion ou outras
WakeupConditions
Mtodos
WakeupAnd( WakeupCriterion[]
conditions )
WakeupAndOfOrs( WakeupOr[]
conditions )
WakeupOr( WakeupCriterion[]
conditions )
WakeupOrOfAnds( WakeupAnd[]
conditions )
405
Criando comportamentos
Um exemplo de cdigo WakeupCondition
Crie um evento AWT critrio de despertar
WakeupCriterion[] onMouseEvents =
new WakeupCriterion[2];
onMouseEvents[0] =
new WakeupOnAWTEvent(
MouseEvent.MOUSE_PRESSED );
onMouseEvents[1] =
new WakeupOnAWTEvent(
MouseEvent.MOUSE_RELEASED );
Combine junto aquele critrio
WakeupCondition onMouse =
new WakeupOr( onMouseEvents );
406
Criando comportamentos
Um exemplo de cdigo WakeupCondition
Crie o comportamento
Behavior myBeh = new MyBehavior( );
E estabelea as condies de despertar do comportamento e
limites de planejamento
BoundingSphere myBounds = new BoundingSphere(
new Point3d( ), 1000.0 );
myBeh.setSchedulingBounds( myBounds );
407
Criando comportamentos
Um exemplo WakeupCondition
[ Drag ]
408
Criando comportamentos
Resumo
Um Behavior uma classe base para conter:
Um mtodo initialize chamado quando feito
vivo
Um mtodo processStimulus chamado no
despertar
Um WakeupCriterion que define uma
condio especfica para a excitao do
comportamento, incluindo o tempo decorrido, os
eventos de AWT, etc..
Um WakeupCondition combina junto mltiplos
WakeupCriterion
Os comportamentos so escalonveis (se permitido)
quando o raio da ativao do visor cruza os limites que
pranejamento do comportamento
O default nenhum limite pranejado (no scheduling
bounds), assim nada programado!
409
Criando interpolador de comportamentos
Motivao 410
Usando interpolador mapeando valores 411
Mapeando tempo para alpha 412
Mapeando tempo para alpha 413
Construindo um-tiro e comportamentos cclicos 414
Hierarquia da classe Alpha 415
Mtodos da classe Alpha 416
Mtodos da classe Alpha 417
Tipos de interpoladores 418
Tipos de interpoladores 419
Usando interpoladores 420
Hierarquia da classe Interpolator 421
Mtodos da classe Interpolator 422
Mtodos da classe PositionInterpolator 423
Mtodos da classe RotationInterpolator 424
Mtodos da classe ScaleInterpolator 425
Mtodos da classe ColorInterpolator 426
Mtodos da classe TransparencyInterpolator 427
Mtodos da classe SwitchValueInterpolator 428
Um exemplo de cdigo RotationInterpolator 429
Um exemplo RotationInterpolator 430
Mtodos da classe PathInterpolator 431
Mtodos da classe PositionPathInterpolator 432
Mtodos da classe RotationPathInterpolator 433
Metodos da classe RotPosPathInterpolator 434
Mtodos da classe RotPosScalePathInterpolator 435
Resumo 436
410
Criando interpolador de comportamentos
Motivao
Muitos comportamentos simples podem ser
expressos como interpoladores
Variam um parmetro de incio a um valor do final
durante um intervalo de tempo
Transformaes, cores, switches
Java 3D fornece o comportamento interpolador
Habilitam implementaes otimizadas
Desde que elas so funes fechadas no tempo, eles
podem ser usados para dead-reckoning sobre uma rede
411
Criando interpolador de comportamentos
Usando interpolador mapeando valores
Um interpolador usa dois mapeamentos:
Tempo-para-Alpha (Time-to-Alpha)
Alpha um valor generalizado que varia de 0.0 a 1.0
sobre um intervalo de tempo
Alpha-para-Valor (Alpha-to-Value)
Diferentes tipos de interpoladores mapeiam
diferentes valores, tais como transformaes, cores,
switches
412
Criando interpolador de comportamentos
Mapeando tempo para alpha
Um gerador de alpha (alpha generator) calcula alfa
usando:
Tempo de disparo (trigger time)
Atraso de fase (Phase Delay) antes da troca incial de
alpha
Tempo crescente para aumentar alpha
Em-Um (At-One) tempo para a constante maior alpha
Tempo decrescente para diminuir alpha
Em-Zero (At-Zero) tempo para a constante menor
alpha
As fases crescentes e decrescentes podem
individualmente ser habilitadas ou desabilitadas e ter
sua acelerao controlada
Aumentando controles de rampa (Increasing ramp)
aumenta a acelerao
Diminuindo os controles de rampa (decreasing ramp)
diminui a acelerao
413
Criando interpolador de comportamentos
Mapeando tempo para alpha
414
Criando interpolador de comportamentos
Construindo um-tiro e comportamentos
cclicos
Este modelo de alpha generaliza diversos tipos
diferentes de comportamentos um-tiro one-shot e
cclicos
415
Criando interpolador de comportamentos
Hierarquia da classe Alpha
Alpha estende Object
Hierarquia da Classe
java.lang.Object
javax.media.j3d.Alpha
416
Criando interpolador de comportamentos
Mtodos da classe Alpha
Os mtodos Alpha constroem e controlam o incio e
o loop de alpha, ou obtm o valor corrente
Mtodos
Alpha( )
void setStartTime( long millisecs )
void setTriggerTime( long millisecs
)
void setLoopCount( int count )
void setMode( int mode )
float value( )
float value( long millisecs )
Os modos Alpha incluem INCREASING_ENABLE e
DECREASING_ENABLE para habilitar o uso de
pores de incremento e/ou decremento do envelope
alpha
417
Crinando interpolador de comportamentos
Mtodos da classe Alpha
Parmetros tambm podem ser estabelecidos com
mtodos Alpha
Mtodos
void setAlphaAtOneDuration( long
millisecs )
void setAlphaAtZeroDuration( long
millisecs )
void setDecreasingAlphaDuration(
long millisecs )
void setDecreasingAlphaRampDuration(
long millisecs )
void setIncreasingAlphaDuration(
long millisecs )
void setIncreasingAlphaRampDuration(
long millisecs )
void setPhaseDelayDuration( long
millisecs )
418
Criando interpolador de comportamentos
Tipos de interpoladores
Interpoladores simples mapeiam alpha a valores
entre o os valores de incio e final
Transformaes simples
PositionInterpolator,
RotationInterpolator, e
ScaleInterpolator
Cores e transparncia
ColorInterpolator e
TransparencyInterpolator
Valores de grupo Switch
SwitchValueInterpolator
419
Criando interpoladores de comportamento
Tipos de interpoladores
Interpoladores Path mapeiam alpha a valores ao
longo do caminho de dois ou mais valores
Transformaes simples
PositionPathInterpolator e
RotationPathInterpolator
Transformaes combinadas
RotPosPathInterpolator e
RotPosScalePathInterpolator
420
Criando interpolador de comportamentos
Usando interpoladores
Todos interpoladores especificam um destino (target)
dentro do qual escreveremos novos valores
Interpoladores de transformao usam um destino
TransformGroup
Um ColorInterpolator usa um destino
Material
Um TransparencyInterpolator usa um
destino TransparencyAttributes
Um SwitchValueInterpolator usa um
destino Switch
E assim por diante
421
Criando interpolador de comportamentos
Hierarqia da classe Interpolator
A classe Interpolator estende Behavior, e alm disso estendida para os
tipos diferentes de interpoladores
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.Node
javax.media.j3d.Leaf
javax.media.j3d.Behavior
javax.media.j3d.Interpolator
javax.media.j3d.ColorInterpolator
javax.media.j3d.PathInterpolator
javax.media.j3d.PositionPathInterpolator
javax.media.j3d.RotationPathInterpolator
javax.media.j3d.RotPosPathInterpolator
javax.media.j3d.RotPosScalePathInterpolator
javax.media.j3d.PositionInterpolator
javax.media.j3d.RotationInterpolator
javax.media.j3d.ScaleInterpolator
javax.media.j3d.SwitchValueInterpolator
javax.media.j3d.TransparencyInterpolator
422
Criando interpolador de comportamentos
Mtodos da classe Interpolator
Os mtodos no Interpolator estabeleceram
apenas o gerador do alfa para usar
As subclasses de Interpolator adicionam
mtodos para tipos especficos de interpoladores
Mtodos
Interpolator( )
void setAlpha( Alpha alpha )
Vamos olhar interpoladores simples primeiramente. .
. (eles so todos quase o mesmo)
423
Criando interpolador de comportamentos
Mtodos da classe PositionInterpolator
PositionInterpolator interpola linearmente
uma posio de uma posio de incio para posio de
trmino
Os mtodos em PositionInterpolator
estabelecem os eixos de translao, valores limites, e
destino
Estabelecem uma translao em um
TransformGroup
Mtodos
PositionInterpolator( Alpha alpha,
TransformGroup target )
void setAxisOfTranslation(
Transform3D axis )
void setEndPosition( float pos )
void setStartPosition( float pos )
void setTarget( TransformGroup
target )
424
Criando interpolador de comportamentos
Mtodos da classe RotationInterpolator
RotationInterpolator interpola linearmente
uma rotao de um ngulo de incio para um ngulo de
trmino
Os mtodo em RotationInterpolator
estabelecem o eixo de rotao, valores limites, e o
destino
Estabelecem a rotao em um TransformGroup
Mtodos
RotationInterpolator( Alpha alpha,
TransformGroup target )
void setAxisOfRotation( Transform3D
axis )
void setMaximumAngle( float angle )
void setMinimumAngle( float angle )
void setTarget( TransformGroup
target )
425
Criando interpolador de comportamentos
Mtodos da classe ScaleInterpolator
ScaleInterpolator interpolam linearmente os
valores de escala desde um valor de incio at um
valor de trmino
Os mtodos em ScaleInterpolator
estabelecem o eixo de escala, valores limites, e o
destino
Estabelecem a escala em um TransformGroup
Mtodos
ScaleInterpolator( Alpha alpha,
TransformGroup target )
void setAxisOfScale( Transform3D
axis )
void setMaximumScale( float scale )
void setMinimumScale( float scale )
void setTarget( TransformGroup
target )
426
Criando interpolador de comportamentos
Mtodos da classe ColorInterpolator
ColorInterpolator interpola linearmente uma
diffuse color (em um espao de cor RGB) de uma cor
de incio para uma cor de trmino
Os mtodos em ColorInterpolator
estabelecem os valores limites e o destino
Estabelecem a diffuse color em Material
Mtodos
ColorInterpolator( Alpha alpha,
Material target )
void setStartColor( Color3f color )
void setEndColor( Color3f color )
void setTarget( Material target )
427
Criando interpolador de comportamentos
Mtodos da classe
TransparencyInterpolator
TransparencyInterpolator interpola
linearmente uma transparncia desde um valor de
incio at um valor de trmino
Os mtodos em TransparencyInterpolator
estabelecem os valores limites e o destino
Estabelecem a transparncia em
TransparencyAttributes
Mtodos
TransparencyInterpolator( Alpha
alpha, TransparencyAttributes target
)
void setMaximumTransparency( float
trans )
void setMinimumTransparency( float
trans )
void setTarget(
TransparencyAttributes target )
428
Criando interpolador de comportamentos
Mtodos da classe
SwitchValueInterpolator
SwitchValueInterpolator interpola
linearmente um valores de ndice de filhos (child
index) de um incio de ndice a um trmino de ndice
Os mtodos em SwitchValueInterpolator
estabelecem os valores limites e destino
Estabelecem a escolha de filho em um Switch
Mtodos
SwitchValueInterpolator( Alpha
alpha, Switch target )
void setFirstChildIndex( int index
)
void setLastChildIndex( int index )
void setTarget( Switch target )
(Beleza! Isto tudo dos interpoladores simples)
429
Criando interpolador de comportamentos
Um exemplo de cdigo RotationInterpolator
Crie um TransformGroup para animar
TransformGroup myGroup = new TransformGroup( );
Crie um gerador de um alpha
Alpha upRamp = new Alpha( );
upRamp.setIncreasingAlphaDuration( 10000 );
upRamp.setLoopCount( -1 ); // loop forever
Crie e estabelea um interpolador de rotao
RotationInterpolator mySpinner = new
RotationInterpolator( upRamp, myGroup );
mySpinner.setAxisOfRotation( new Transform3D( )
);
mySpinner.setMinimumAngle( 0.0f );
mySpinner.setMaximumAngle( (float)(Math.PI * 2.0)
);
Estabelea os limites de planejamento e adicione-o a cena
mySpinner.setSchedulingBounds( bounds );
myGroup.addChild( spinner );
430
Criando interpolador de comportamentos
Um exemplo RotationInterpolator
[ SphereMotion ]
431
Criando interpolador de comportamentos
Mtodos da classe PathInterpolator
Os mtodos em PathInterpolator estabelecem
o gerador de alpha ao uso e os "ns" usados para o
trajeto
Os ns so os valores alpha especficos que
correspondem a especficas posies, rotaes, etc. ao
longo de um trajeto
As interpolaes so feitas entre ns, quando
mapeados a correspondentes interpolaes de posio,
rotao, etc.
As subclasses de PathInterpolator adicionam
mtodos para tipos especficos de interpoladores do
trajeto
Mtodos
PathInterpolator( Alpha alpha,
float[] knots )
void setKnot( int index, float knot
)
Vamos olhar vrios interpoladores de trajeto. . . (eles
so todos quase o
mesmo)
432
Criando interpolador de comportamentos
Mtodos da classe
PositionPathInterpolator
PositionPathInterpolator interpola a
posio ao longo de um trajeto
Os mtodos em PositionPathInterpolator
estabelecem os eixos de translao, trajeto, e destino
Estabelecem uma translao em um
TransformGroup
Mtodos
PositionPathInterpolator( Alpha
alpha, TransformGroup target,
Transform3D axis, float[] knots,
Point3f[] positions )
void setAxisOfTranslation(
Transform3D axis )
void setPosition( int index, Point3f
pos )
void setTarget( TransformGroup
target )
433
Criando interpolador de comportamentos
Mtodos da classe
RotationPathInterpolator
RotationPathInterpolator interpola uma
rotao ao longo de um trajeto
Os mtodos em RotationPathInterpolator
estabelecem os eixos de rotao, trajeto, e destino
Estabelecem a rotao em um TransformGroup
Mtodos
RotationPathInterpolator( Alpha
alpha, TransformGroup target,
Transform3D axis, float[] knots,
Quat4f[] quats )
void setAxisOfRotation( Transform3D
axis )
void setQuat( int index, Quat4f quat
)
void setTarget( TransformGroup
target )
434
Criando interpolador de comportamentos
Mtodos da classe RotPosPathInterpolator
RotPosPathInterpolator interpola a posio
e rotao ao longo de um trajeto
Os mtodos em RotPosPathInterpolator
estabelecem o eixo de translao, trajeto, e destino
Estabelecem a translao e rotao em um
TransformGroup
Mtodos
RotPosPathInterpolator( Alpha alpha,
TransformGroup target, Transform3D
axis, float[] knots, Quat4f[] quats,
Point3f[] positions )
void setAxisOfRotPos( Transform3D
axis )
void setPosition( int index, Point3f
pos )
void setQuat( int index, Quat4f quat
)
void setTarget( TransformGroup
target )
435
Criando interpolador de comportamentos
Mtodos da classe
RotPosScalePathInterpolator
RotPosScalePathInterpolator interpola
posio, rotao, e escala ao longo de um trajeto
Os mtodos em
RotPosScalePathInterpolator estabelecem
o eixo de translao, trajeto, e destino
Estabelecem a translao, rotao, e escala em um
TransformGroup
Mtodos
RotPosScalePathInterpolator( Alpha
alpha, TransformGroup target,
Transform3D axis, float[] knots,
Quat4f[] quats, Point3f[] positions,
float] scales )
void setAxisOfRotPosScale(
Transform3D axis )
void setPosition( int index, Point3f
pos )
void setQuat( int index, Quat4f quat
)
void setScale( int index, float
scale )
void setTarget( TransformGroup
target )
436
Criando interpolador de comportamentos
Resumo
Um comportamento do Interpolator varia um
valor sobre o tempo dois mapeamentos
Tempo-para-alpha
Alpha-para-valor
Um gerador Alpha mapeia tempo para um valor do
alfa que varie 0,0 a 1,0 atravs de diversos estgios
Os tipos especficos do interpolador usam um
gerador do alpha, e um n de alvo para variar a
posio, a rotao, a cor, a transparncia, etc..
437
Usando comportamentos especializados
Motivao 438
Hierarquia da classe Specialized behavior 439
Usando comportamentos billboard 440
Usando comportamentos billboard 441
Usando modos de alinhamento billboard 442
Mtodos da classe Billboard 443
Usando comportamentos nvel-de-detalhe (level-of-detail) 444
Mtodos da classe LOD 445
Mtodos da classe DistanceLOD 446
Resumo 447
438
Usando comportamentos especializados
Motivao
Como com interpoladores, alguns comportamentos
so assim to comuns que so fornecidos pelo Java 3D
Billboard auto-rotao das formas a face do
observador
Switching entre formas os nveis de detalhe (levels of
detail) baseados na distncia do observador
439
Usando comportamentos especializados
Hierarquia da classe Specialized behavior
Todos comportamentos especializados so extenses
de Behavior
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.Node
javax.media.j3d.Leaf
javax.media.j3d.Behavior
javax.media.j3d.Billboard
javax.media.j3d.LOD
javax.media.j3d.DistanceLOD
440
Usando comportamentos especializados
Usando comportamentos billboard
Um Billboard um comportamento especializado
que:
Segue o ViewPlatform
Gera uma rotao sobre um eixo central de modo que
o eixo-Z aponte na plataforma
Escreve esta transformao para um alvo
TransformGroup
441
Usando comportamentos especializados
Usando comportamento billboard
O observador vai para a
direita. . .
. . . e o behavior
imediatamente rotaciona
a forma
442
Usando comportamentos especializados
Usando modos de alinhamento billboard
A rotao Billboard pode ser sobre:
Um eixo para pivotar o TransformGroup
Um ponto para arbitrariamente rotacionar o
TransformGroup
A rotao faz os grupos do eixo-Y paralelos ao eixo-
Y do observador
443
Usando comportamentos especializados
Mtodos da classe Billboard
Os mtodos em Billboard estabelecem o modo
de alinhamento, eixo de rotao ou ponto, e o alvo
O modo de alinhamento default sobre o eixo Y
Mtodos
Billboard( )
void setAlignmentMode( int mode )
void setAlignmentAxis( Vector3f axis
)
void setRotationPoint( Point3f point
)
void setTarget( TransformGroup group
)
Os modos de alinhamento incluem
ROTATE_ABOUT_AXIS (default) e
ROTATE_ABOUT_POINT
444
Usando comportamentos especializados
Usando comportamentos nvel-de-detalhe
(level-of-detail)
O Nvel-de-detalhe (Level-of-Detail) (LOD) um
comportamento especializado que:
Segue a ViewPlatform
Calcula a distncia para a forma
Mapeia a distncia para um filho escolhido do grupo
Switch
A classe abstrata LOD generaliza os comportamentos
nvel-de-detalhe
A classe DistanceLOD implementa a distncia
baseada na escolha do nvel-de-detalhe
445
Usando comportamentos especializados
Mtodos da classe LOD
Os mtodos em LOD gerenciam a lista dos grupos
Switch baseado sobre a distncia do observador
Mtodos
LOD( )
void setSwitch( Switch switch, int
index )
void addSwitch( Switch switch )
void insertSwitch( Switch switch,
int index )
void removeSwitch( int index )
446
Usando comportamentos especializados
Mtodos da classe DistanceLOD
Os mtodos em DistanceLOD estabelecem as
distncias nas quais a troca de detalhe pode ocorrer
Mtodos
DistanceLOD( )
void setDistance( int whichLOD,
double distance )
447
Usando comportamentos especializados
Resumo
Billboard automaticamente rotaciona um
TransformGroup de modo que seu eixo-Z aponte
sempre para o observador
DistanceLOD automaticamente troca filhos em um
grupo Switch baseado sobre a distncia do
observador
448
Escolhendo formas
Motivao 449
Exemplo 450
Usando a API picking 451
Onde est a API? 452
Mtodos da classe Node 453
Mtodos das classes Locale e BranchGroup 454
Tipos de PickShapes 455
Hierarquia da classe PickShape 456
Mtodos da classe PickShape 457
Mtodos da classe PickRay 458
Mtodos da classe PickSegment 459
Mtodos da classe PickPoint 460
Mtodos da classe PickBounds 461
Obtendo os resultados de escolha (Pick Results) 462
Hierarquia da classe SceneGraphPath 463
Mtodos da classe SceneGraphPath 464
Usando o mouse para escolha 465
Um exemplo de cdigo de escolha (Picking) 466
Um exemplo de escolha (Picking) 467
Resumo 468
449
Escolhendo formas
Motivao
A seleo essencial a interatividade
Sem uma habilidade de selecionar objetos, voc no
pode manipul-los
A API picking permite selecionar objetos na cena
Ela suporta vrias formas da seleo
Ela pode relatar a primeira, qualquer uma, todas, ou
todos os itens selecionados
450
Escolhendo formas
Exemplo
[ PickWorld ]
451
Escolhendo formas
Usando a API picking
A API Java 3D divide a escolha em duas parcelas:
Controle: clicando com um mouse 2D ou movendo
um wand (basto) 6DOF
Seleo: achando formas que se encontram no
critrio de procura
A seperao habilita mtodos de interao
intercambiveis
A API foi projetada para velocidade
Escolhendo produtos somente nos limites
Servios fornecem suporte de escolha mais refinado
452
Escolhendo formas
Onde est a API?
A API est distribuida entre um nmero de classes . .
.
Habilite a capacidade de escolha (pickability) de um
n via mtodos em Node
Inicia e escolha usando mtodos em Locale ou
BranchGroup
Metodos de escolha (pick methods) tomam como
argumentos um PickShape
PickBounds, PickPoint, PickRay,
PickSegment
Um mtodo de escolha retornam um ou mais
SceneGraphPaths
453
Escolhendo formas
Mtodos da classe Node
Mtodos em Node habilitam a capacidade de
escolha (pickability)
Mtodos
void setPickable( boolean onOff )
boolean getPickable( )
454
Escolhendo formas
Mtodos das classes Locale e
BranchGroup
Os mtodos em Locale ou BranchGroup iniciam
a escolha em seus filhos
Os mtodos so idnticos para ambas as classes
Mtodos
SceneGraphPath[ ] pickAll( PickShape
pickShape )
SceneGraphPath[ ] pickAllSorted(
PickShape pickShape )
SceneGraphPath pickAny( PickShape
pickShape )
SceneGraphPath pickClosest(
PickShape pickShape )
455
Escolhendo formas
Tipos de PickShapes
A escolha interseciona uma PickShape com um
volume limite de forma com capacidade de escolha
(pickable)
PickRay dispara um raio de uma posio, em uma
direo
A escolha ocorre para limites de forma que o raio
atingir
PickSegment dispara um raio ao longo de um
segmento de raio entre duas posies
A escolha ocorre para limites de forma que o
segmento de raio intersecionar
PickPoint checa a cena em uma posio
A escolha ocorre para limites de forma que
contiverem a posio
PickBounds checa a cena um uma posio, em um
volume limite
A escolha ocorre para limites de forma que
intersecionarem o volume limite
456
Escolhendo formas
Hierarquia da classe PickShape
PickShape estende Object
Este mais estendido para vrios tipos de escolha de
formas (pick shapes)
Hierarquia da Classe
java.lang.Object
javax.media.j3d.PickShape
javax.media.j3d.PickBounds
javax.media.j3d.PickPoint
javax.media.j3d.PickRay
javax.media.j3d.PickSegment
457
Escolhendo formas
Mtodos da classe PickShape
PickShape no fornece mtodos alm dele
Os tipos de forma de escolha estendem PickShape
Mtodo
PickShape( )
458
Escolhendo formas
Mtodos da classe PickRay
Os mtodos em PickRay estabelecem a posio e a
direo de mira usada para a escolha de interseo
Mtodos
PickRay( )
PickRay( Point3d pos, Vector3d dir
)
void set( Point3d pos, Vector3d dir
)
459
Escolhendo formas
Mtodos da classe PickSegment
Os mtodos em PickSegment estabelecem as
posies de incio e final para o segmento de raio
usado para escolha de interseo
Mtodos
PickSegment( )
PickSegment( Point3d start, Point3d
end )
void set( Point3d start, Point3d end
)
460
Escolhendo formas
Mtodos da classe PickPoint
Os mtodos em PickPoint estabelecem a posio
usada para escolha de interseo
Mtodos
PickPoint( )
PickPoint( Point3d pos )
void set( Point3d pos )
461
Escolhendo formas
Mtodos da classe PickBounds
Os mtodos em PickBounds estabelecem o limite
de volume usado para a escolha de interseo
Mtodos
PickBounds( )
PickBounds( Bounds bounds )
void set( Bounds bounds )
462
Escolhendo formas
Obtendo os resultados de escolha (Pick
Results)
Os mtodos de escolha em Locale ou
BranchGroup devolvem um ou mais
SceneGraphPaths
Cada SceneGraphPath contm:
Um Node para a forma que foi escolhida
Um Locale sobre ele em um grafo de cena
Uma lista dos Nodes das formas escolhidas para o
Locale
Uma transformao mundo-para-forma (world-to-
shape)
463
Escolhendo formas
Hierarquia da classe SceneGraphPath
SceneGraphPath estende Object
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphPath
464
Escolhendo formas
Mtodos da classe SceneGraphPath
Os mtodos em SceneGraphPath obtm a forma
(objeto) escolhido, o local sobre ele, a tranformao
para ele, e os ns no caminho entre o local e a forma
Mtodos
SceneGraphPath( )
Node getObject( )
Locale getLocale( )
Node getNode( int index )
int nodeCount( )
Transform3D getTransform( )
465
Escolhendo formas
Usando o mouse para escolha
Crie um comportamento que desperta sobre eventos
do mouse
Em uma liberao de mouse
Construa um PickRay da viso que passa atravs
do ponto do mouse 2D da tela
Inicie a escolha para encontrar todos os sucessos de
escolha, classificado do mais perto para o mais longe
Obtenha o primeiro sucesso nos dados devolvidos
Faa algo quela forma escolhida
(Re)declare interesse em eventos do mouse
466
Escolhendo formas
Um exemplo de cdigo de escolha (Picking)
Crie um raio de escolha apontado usando dados da tela do
mouse
PickRay myRay = new PickRay( rayOrigin,
rayDirection );
Inicie a escolha que comea em Locale
SceneGraphPath[ ] results =
myLocale.pickAllSorted( myRay );
Obtenha a primeira forma (a mais prxima) dos resultados
Node pickedObject = results[0].getObject( );
467
Escolhendo formas
Um exemplo de escolha (Picking)
[ PickWorld ]
468
Escolhendo formas
Resumo
A escolha (Picking) seleciona formas apontadas pelo
usurio
A fonte do ponto pode ser qualquer coisa
(frequentemente o mouse)
A capacidade de escolha (Pickability) permitida,
baseada por n
A escolha olha para a interseo de uma
PickShape com volumes limites de formas
PickBounds, PickPoint, PickRay, and
PickSegment,
A escolha inicializada sobre um Locale ou
BranchGroup
A escolha devolve um ou mais SceneGraphPaths
para as formas que tiveram sucesso na escolha
469
Criando fundos
Motivao 470
Exemplo 471
Tipos de fundos (backgrounds) 472
Hierarquia da classe Background 473
Usando cores de fundo 474
Usando imagens de fundo 475
Usando geometrias de fundo 476
Mtodos da classe Background 477
Um exemplo de cdigo de cor de fundo 478
Um exemplo de cor de fundo 479
Um exemplo de cdigo de imagem de fundo 480
Um exemplo de imagem de fundo 481
Um exemplo de cdigo de geometria de fundo 482
Usando limites de aplicao de fundos 483
Criando limites da aplicao 484
Ancorando limites da aplicao 485
Mtodos da classe Background 486
Um exemplo de cdigo de limites da aplicao 487
Resumo 488
470
Criando fundos
Motivao
Voc pode adicionar um fundo (background) para
fornecer o contexto para contedos em primeiro plano
Use fundos para :
Estabelecer uma cor do cu
Adicionar nuvens, estrelas, montanhas, perfs de
cidade
Criar um mapa do ambiente
471
Criando fundos
Exemplo
[
ExBackgroundColor
]
[ ExBluePrint ]
472
Criando fundos
Tipos de fundos (backgrounds)
Java 3D fornece trs tipos de fundos:
Cor constante
Imagem lisa
Geometrias
Todos os tipos so construdos sobre um n
Background com:
Uma cor, imagem, ou geometria
Um volume limite controlando quando o fundo
ativado
473
Criando fundos
Hierarquia da classe Background
Todas as caractersticas do fundo so controladas
usando Background
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.Node
javax.media.j3d.Leaf
javax.media.j3d.Background
474
Criando fundos
Usando cores de fundo
Um n Background pode estabelecer uma cor
simples de fundo
Preenche o canvas com a cor
A mesma cor para todas as direes do observador e
nveis de iluminao
Se voc deseja um gradiente de cores, use a
geometria de fundo
475
Criando fundos
Usando imagens de fundo
Um n Background pode estabelecer uma imagem
de fundo
Preenche o canvas com a imagem
Uma imagem superior esquerda para o canvas
superior esquerda
Para preencher o canvas, use uma imagem do
tamanho do canvas
Imagem se sobrepe sobre a cor de fundo
Mesmas imagens para todas direes do observador e
nveis de iluminao
Se voc quer um mapa do ambiente, use geometria
de fundo
476
Criando geometrias
Usando geometrias de fundo
Um n Background pode estabelecer a geometria
A geometria cerca o observador em uma distncia
"infinita"
Enquanto o observador gira, eles v partes diferentes
da geometria
O observador nunca pode se mover mais perto da
geometria
A geometria deve estar em uma esfera unitria
A geometria no iluminada pelo uso das luzes da
cena
Use geometrias de fundo para:
Criar cu e gradiente de cor da terra
Construa montranhas ou perfs de cidade
Faa mapas do ambiente (QuickTimeVR)
477
Criando fundos
Mtodos da classe Background
Os mtodos em Background estabelecem a cor,
imagem, ou geometria
Mtodos
Background( )
void setColor( Color3f color )
void setImage( ImageComponent2D
image )
void setGeometry( BranchGroup group
)
478
Criando fundos
Um exemplo de cdigo de cor de fundo
Crie o fundo
Background myBack = new Background( );
myBack.setColor( new Color3f( 0.3f, 0.0f, 0.0f )
);
Estabelea os limites da aplicao
BoundingSphere myBounds = new BoundingSphere(
new Point3d( ), 1000.0 );
myBack.setApplicationBounds( myBounds );
479
Criando fundos
Um exemplo de cor de fundo
[ ExBackgroundColor ]
480
Criando fundos
Um exemplo de cdigo de imagem de fundo
Carregue uma imagem de textura
ImageComponent2D myImage = myLoader.getImage( );
Crie um fundo
Background myBack = new Background( );
myBack.setImage( myImage );
Estabelea os limites da aplicao
BoundingSphere myBounds = new BoundingSphere(
new Point3d( ), 1000.0 );
myBack.setApplicationBounds( myBounds );
481
Criando fundos
Um exemplo de imagem de fundo
[
ExBackgroundImage
]
[ ExBluePrint ]
482
Criando fundos
Um exemplo de cdigo de geometria de fundo
Crie uma geometria de fundo
BranchGroup myBranch = createBackground( );
Crie um fundo
Background myBack = new Background( );
myBack.setGeometry( myBranch );
Estabelea os limites da aplicao
BoundingSphere myBounds = new BoundingSphere(
new Point3d( ), 1000.0 );
myBack.setApplicationBounds( myBounds );
483
Criando fundos
Usando limites de aplicao de fundos
Um fundo aplicado quando:
O raio de ativao do observador intersecta seu limite
de aplicao (application bounds)
Se mltiplos fundos esto ativos, o mais prximo
usado
Se no existem fundos ativos, o fundo preto
Os limites de fundo habilitam diferentes fundos para
diferentes reas da cena
484
Criando fundos
Criando limites da aplicao
Um limite de fundo de uma aplicao um volume
limitado
Esfera, caixa, outros tipos, ou combinao
Para fazer um fundo global, use uma esfera enorme
de limite
Por default, fundos no tem nenhum limite da
aplicao e nunca aplicado!
Erro comum: esquecer-se de ajustar limites da
aplicao
485
Criando fundos
Ancorando limites da aplicao
Um volume limite do fundo pode ser relativo a:
Ao sistema de coordenadas do fundo
O volume centralizado na origem
Tal como a origem se move, assim que faz o volume
O sistema de coordenadas do limite da folha
(Bounding leaf)
O volume centralizado no n da folha em outra
parte no grfico da cena
Tal como os movimentos desse n da folha, assim
faz o volume
Se a origem do fundo se mover, volume no se move
486
Criando fundos
Mtodos da classe Background
Os mtodos em Background estabelecem os
limites da aplicao
Mtodos
void setApplicationBounds( Bounds
bounds )
void setApplicationBoundingLeaf(
BoundingLeaf leaf )
487
Criando fundos
Um exemplo de cdigo limites da aplicao
Estabelea os limites relativos ao sistema de coordenadas do fundo
Background myBack = new Background( );
myBack.setApplicationBounds( myBounds );
Ou relativo ao sistema de coordenadas do limite da folha (bounding
leaf)
TransformGroup myGroup = new TransformGroup( );
BoundingLeaf myLeaf = new BoundingLeaf( myBounds
);
myGroup.addChild( myLeaf );
. . .
Background myBack = new Background( );
myBack.setApplicationBoundingLeaf( myLeaf );
488
Criando fundos
Resumo
Background estabelece a cor, imagem. ou
geometria do fundo
Os fundos so ativados quando o raio de ativao do
observador intersecta os limites de aplicao do fundo
O default no aplicao de limites (no application
bounds) ento nunca toma efeito
489
Trabalhando com fog
Motivao 490
Hierarquia da classe Fog 491
Mtodos da classe Fog 492
Entendendo efeitos Fog 493
Usando fog exponencial 494
Mtodos da classe ExponentialFog 495
Um exemplo de cdigo ExponentialFog 496
Um exemplo ExponentialFog 497
Usando fog linear 498
Mtodos da classe LinearFog 499
Um exemplo de cdigo LinearFog 500
Um exemplo LinearFog 501
Um exemplo depth cueing 502
Usando limites de influncia de fog e escopo 503
Mtodos da classe Fog 504
Um exemplo de cdigo de limites de influncia 505
Recortando formas nevoentas 506
Hierarquia da classe Clip 507
Recortando formas 508
Usando limites de aplicao de recorte 509
Recortando formas 510
Mtodos da classe Clip 511
Um exemplo de cdigo Clip 512
Um exemplo Clip 513
Resumo 514
Resumo 515
490
Trabalhando com fog
Motivao
A nvoa (fog) aumenta o realismo e esvazia a cena
O fog tambm torna obscuras formas distantes,
habilitando voc a deslig-las e renderizar a cena mais
rpido
Java 3D fornece dois tipos de fog:
Exponential
Linear
491
Trabalhando com fog
Hierarquia da classe Fog
Todos os tipos de fog compartilham atributos herdados
da classe Fog
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.Node
javax.media.j3d.Leaf
javax.media.j3d.Fog
javax.media.j3d.ExponentialFog
javax.media.j3d.LinearFog
492
Trabalhando com fog
Mtodos da classe Fog
Ambos os tipos de fog possuem:
Uma cor (o default preto)
Um volume limitante e o escopo controlando os
limites de formas a afetar
Mtodo
void setColor( Color3f color )
493
Trabalhando com fog
Entendendo efeitos fog
O fog afeta cor de formas, no perfs de forma
Formas distantes possuem cor de fog, mas ainda possuem
perfil definido
Ajuste a cor do fundo cor da nvoa ou sua cena ficar
estranha!
Sem fog Fog iluminado Fog no fundo
494
Trabalhando com fog
Usando fog exponencial
ExponentialFogestende a classe Fog
A espessura aumenta exponencialmente com a
distncia
Use fog exponencial para criar fog espesso, realstico
Varie a densidade do fog para controlar espessura
effect = e
(-density * distance)
color = effect * shapeColor + (1-effect) * fogColor
495
Trabalhando com fog
Mtodos da classe ExponentialFog
Os mtodos em ExponentialFog estabelecem a
densidade do fog
Mtodos
ExponentialFog( )
void setDensity( float density )
A densidade do fog varia de 0.0 (sem fog) e mais
(fog denso)
496
Trabalhando com fog
Um exemplo de cdigo ExponentialFog
Crie o fog
ExponentialFog myFog = new ExponentialFog( );
myFog.setColor( new Color3f( 1.0f, 1.0f, 1.0f )
);
myFog.setDensity( 1.0f );
Estabelea os limites de influncia
BoundingSphere myBounds = new BoundingSphere(
new Point3d( ), 1000.0 );
myFog.setInfluencingBounds( myBounds );
497
Trabalhando com fog
Um exemplo ExponentialFog
Bruma Fog iluminado
Fog pesado Fog preto
[ ExExponentialFog ]
498
Trabalhando com fog
Usando fog linear
LinearFogestende a classe Fog
A espessura aumenta linearmente com a distncia
Use fog linear para criar mais facilmente fog
controlado, embora menos realstico
Estabelea as distncias de frente e fundo para
controlar a densidade
effect = (back - distance) / (back - front)
color = effect * shapeColor + (1-effect) * fogColor
499
Trabalhando com fog
Mtodos da classe LinearFog
Os mtodos em LinearFog estabelecem as
distncias de frente e fundo do fog
Mtodos
LinearFog( )
void setFrontDistance( double front
)
void setBackDistance( double back )
O default da distncia da frente 0.0
O default da distncia de fundo 1.0
500
Trabalhando com fog
Um exemplo LinearFog
Crie o fog
LinearFog myFog = new LinearFog( );
myFog.setColor( new Color3f( 1.0f, 1.0f, 1.0f )
);
myFog.setFrontDistance( 1.0 );
myFog.setBackDistance( 30.0 );
Estabelea os limites de influncia
BoundingSphere myBounds = new BoundingSphere(
new Point3d( ), 1000.0 );
myFog.setInfluencingBounds( myBounds );
501
Trabalhando com fog
Um exemplo LinearFog
Distncia separada da
extenso
Distncia fecha junto
[ ExLinearFog ]
502
Trabalhando com fog
Um exemplo depth cueing
Para depth-cueing, use fog linear preto
Estabelea a distncia da frente como o centro da
forma
Estabelea a distncia de fundo como o fundo da
forma
Depth cueing desligado Depth cueing ligado
[ ExDepthCue ]
503
Trabalhando com fog
Usando limites de influncia de fog e
escopo
Os efeitos de fog so limitados a um volume e
possuem como escopo uma lista de grupos
Idntico a influncia e escopo da iluminao
Por default, fog no tm limites de influncia e no
afeta nada!
Erro comum: esquecer de estabelecer os limites de
influncia
Por default, fog tm escopo universal e afeta tudo
dentro dos limites de influncia
504
Trabalhando com fog
Mtodos da classe Fog
Os mtodos em Fog estabelecem o limite de
influncia e a lista de escopo
Mtodos
void setInfluencingBounds( Bounds
bounds )
void setInfluencingBoundingLeaf(
BoundingLeaf leaf )
void setScope( Group group, int
index )
void addScope( Group group )
void insertScope( Group group, int
index )
void removeScope( int index )
505
Trabalhando com fog
Um exemplo de cdigo de limites de influncia
Estabelea limites relativos ao sistema de coordenadas do sistema do
fog
LinearFog myFog = new LinearFog( );
myFog.setInfluencingBounds( myBounds );
Ou relativo ao sistema de coordenadas de limite da folha
TransformGroup myGroup = new TransformGroup( );
BoundingLeaf myLeaf = new BoundingLeaf( myBounds
);
myGroup.addChild( myLeaf );
. . .
LinearFog myFog = new LinearFog( );
myFog.setInfluencingBoundingLeaf( myLeaf );
506
Trabalhando com fog
Recortando formas nevoentas
As formas obscurecidas pelo fog ainda so
desenhadas
Para aumentar a performance, voc pode recortar as
formas distantes usando um n Clip
Voc pode recortar tambm sem usar fog
O fog ajuda a cobrir os recortes mais abruptos
507
Trabalhando com fog
Hierarquia da classe Clip
Clip estende Leaf
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.Node
javax.media.j3d.Leaf
javax.media.j3d.Clip
508
Trabalhando com fog
Recortando formas
Recortar formas ausentes, ou as partes das formas,
mais afastado do observador que a distncia de fundo
(back distance)
Tambm chamada de plano de recorte mais distante
(far clipping plane)
Recortando pode ser obscurecida usando a nvoa
linear
A distncia de fundo de fog = Distncia do fundo de
recorte
509
Trabalhando com fog
Usando limites de aplicao de recorte
Um recorte aplicado quando:
O raio de ativao do observador intersecta seu limite
de aplicao (application bounds)
Se mltiplos recortes esto ativos, o mais prximo
usado
Se no existem recortes ativos, a View da distncia
do objeto mais longe usada
Recortes habilitam diferentes limites de planos de
recorte para diferentes reas da cena
510
Trabalhando com
Recortando formas
Um limite de aplicao de recorte um volume
limitado
Esfera, caixa, outros tipos, ou combinao
Para fazer um recorte global, use uma esfera imensa
limitando
Por default, o recorte no tem limites de aplicao e
no afeta nada!
Erro comum: esquecer de estabelecer os limites da
aplicao
511
Trabalnando com fog
Metodos da classe Clip
Os mtodos em Clip estabelecem a distncia de
recorte e limites da aplicao
Mtodos
Clip( )
void setBackDistance( double back )
void setApplicationBounds( Bounds
bounds )
void setApplicationBoundingLeaf(
BoundingLeaf leaf )
512
Trabalhando com fog
Um exemplo de cdigo Clip
Crie um recorte
Clip myClip = new Clip( );
myClip.setBackDistance( 30.0 );
Estabelea os limites da aplicao
BoundingSphere myBounds = new BoundingSphere(
new Point3d( ), 1000.0 );
myClip.setApplicationBounds( myBounds );
513
Trabalhando com fog
Um exemplo Clip
[ ExClip ]
514
Trabalhando com fog
Resumo
ExponentialFog cria um fog que aumenta sua
densidade exponencialmente com a distncia para o
usurio
LinearFog cria um fog que aumenta sua densidade
linearmente com a distncia para o usurio
Ambos tipos de fog possuem cor e limites de
influncia
Clip recorta formas distantes atrs da distncia de
recorte e possui limites de aplicao
515
Trabalhando com fog
Resumo
O fog afeta formas dentro dos limites de influncia
O default sem influncia, ento nada afetado!
e dentro dos grupos na lista de escopo
O default escopo universal, ento tudo afetado (se
dentro dos limites de influncia)
O recorte ativado quando o raio de ativao do
observador intersecta o limite de aplicao do n de
recorte
O default sem limites de aplicao (no application
bounds), ento nada tem efeito
516
Construindo formas texto
Motivao 517
Exemplo 518
Construindo um texto 3D 519
Construindo uma fonte 3D 520
Hierarquia das classes FontExtrusion e Font3D 521
Mtodos da classe FontExtrusion 522
Um exemplo de cdigo FontExtrusion 523
Mtodos da classe Font3D 524
Um exemplo de cdigo Font3D 525
Hierarquia da classe Text3D 526
Mtodos da classe Text3D 527
Mtodos da classe Text3D 528
Um exemplo de cdigo Text3D 529
Um exemplo Text3D 530
Resumo 531
517
Construindo formas texto
Motivao
O Text3D constroi geometria de texto 3D para uma
Shape3D
Use para fazer anotaes, sinais, logos animados, etc.
Voc pode construir seu prprio texto 3D de
tringulos e quadrilteros
O Text3D faz isto para voc
518
Construindo formas texto
Exemplo
[ ExText ]
519
Construindo formas texto
Construindo um texto 3D
Contruir um texto 3D um processo de mltiplos
passos:
1. Selecione uma fonte 2D com
java.awt.Font
2. Descreva a extruso da forma 2D com
java.awt.Shape em uma FontExtrusion
3. Crie uma fonte 3D pela extruso da fonte 2D ao
longo da forma da extruso com um Font3D
4. Crie um texto 3D usando uma string e uma
Font3D em um Text3D
520
Construindo formas texto
Construindo uma fonte 3D
Crie uma fonte 3D varrendo um fonte 2D ao longo
de uma forma de extruso 2D
521
Construindo formas texto
Hierarquia das classes FontExtrusion e
Font3D
FontExtrusion especifica a forma de extruso e
Font3D especifica a fonte
Hierarquia da Classe
java.lang.Object
javax.media.j3d.FontExtrusion
javax.media.j3d.Font3D
522
Construindo formas texto
Mtodos da classe FontExtrusion
Os mtodos na classe FontExtrusion selecionam
a extruso
Mtodos
FontExtrusion( )
void setExtrusionShape( Shape
extrusionShape )
523
Construindo formas texto
Um exemplo de cdigo FontExtrusion
Para uma extruso simples, use o default:
FontExtrusion myExtrude = new FontExtrusion( );
Isto cria uma forma de extruso em linha reta de 0,2 de
profundidade
524
Construindo formas texto
Mtodos da classe Font3D
Os mtodos em Font3D constroem a fonte 3D de
uma fonte 2D e uma extruso
Mtodos
Font3D( Font font, FontExtrusion
shape )
GeometryStripArray[] getAsTriangles(
int glyphCode )
Bounds getBounds( int glyphCode )
525
Construindo formas texto
Um exemplo de cdigo Font3D
Comee com uma fonte 2D
Font my2DFont = new Font(
"Arial", // font name
Font.PLAIN, // font style
1 ); // font size
Faa uma extruso simples
FontExtrusion myExtrude = new FontExtrusion( );
Ento construa a fonte 3D
Font3D my3DFont = new Font3D( my2DFont, myExtrude
);
526
Construindo formas texto
Hierarquia da classe Text3D
Text3D extende Geometry para descrever uma
geometria texto 3D para uma Shape3D
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.NodeComponent
javax.media.j3d.Geometry
javax.media.j3d.Text3D
527
Construindo formas texto
Mtodos da classe Text3D
Os mtodos em Text3D selecionam a string de
texto e a fonte 3D
Mtodos
Text3D( )
void setString( String string )
void setFont3D( Font3d font )
528
Construindo formas texto
Mtodos da classe Text3D
Mtodos adicionais em Text3D selecionam a
posio de incio, alinhamento, espaamento de
caracteres, e caminho dos caracteres
Mtodos
void setPosition( Point3f position
)
void setAlignment( int alignment )
void setCharacterSpacing( float
spacing )
void setPath( int Path )
Tipos de alinhamento incluem ALIGN_FIRST
(default), ALIGN_LAST, e ALIGN_CENTER
Os caminhos de caracteres incluem PATH_LEFT,
PATH_RIGHT (default), PATH_DOWN, e PATH_UP
529
Construindo forma texto
Um exemplo de cdigo Text3D
Constoi um texto 3D dizendo "Hello!", iniciando com uma fonte 2D e
extrudando para construir uma fonte 3D
Font my2DFont = new Font(
"Arial", // font name
Font.PLAIN, // font style
1 ); // font size
FontExtrusion myExtrude = new FontExtrusion( );
Font3D my3DFont = new Font3D( my2DFont, myExtrude
);
Ento construa a geometria de texto 3D usando a fonte
Text3D myText = new Text3D( );
myText.setFont3D( my3DFont );
myText.setString( "Hello!" );
Monte a forma
Shape3D myShape = new Shape3D( myText, myAppear
);
530
Construindo forma texto
Um exemplo Text3D
[ ExText ]
531
Construindo formas texto
Resumo
Uma extruso de fonte define a profundidade de um
texto 3D
Uma fonte 3D combina uma extruso com uma fonte
2D para fazer 3D character glyphs
Uma geometria texto (3D text) construida usando
uma fonte 3D e uma string de texto
532
Controlando a aparncia das texturas
Motivao 533
Combinando texturas e cores de formas 534
Combinando texturas usando alpha 535
Usando modos de texturas 536
Usando modos de texturas 537
Usando modos de texturas 538
Usando modos de texturas 539
Mtodos da classe TextureAttributes 540
Um exemplo de cdigo de modos de texturas 541
Usando texturas no modo mip-map 542
Usando filtro de miniaturizao de texturas 543
Usando filtro de ampliao de texturas 544
Mtodos da classe Texture 545
Um exemplo de cdigo de filtro de textura 546
Um exemplo de filtro de textura 547
Resumo 548
533
Controlando a aparncia das texturas
Motivao
As cores da imagem da textura podem substituir,
modular, ou misturar com cores de formas
Diferentes modos de textura so teis para
diferentses efeitos
Alguns so mais rpidas de desenhar que do que
outros
Diferentes imagens de textura podem ser usadas em
distncias diferentes entre a forma e do usurio
Use resoluo baixa em imagens para formas
distantes
Isto conhecido como Mip-mapping
534
Controlando a aparncia das texturas
Combinando texturas e cores de formas
Uma imagem da textura pode conter:
Um cor RGB (red-green-blue) para cada pixel
Uma transparncia, ou um valor alpha para cada
pixel
Tipicamente, a cor da imagem modulam as cores das
formas
As partes escuras protegidas da forma usam uma
textura escurecida, etc.
535
Controlando a aparncia das texturas
Combinando texturas usando alpha
Alpha blending uma combinao linear de um valor
para outro com alpha indo de 0.0 para 1.0:
Value = (1.0-alpha)*Value0 +
alpha*Value1
Valores da textura alpha podem controlar a
combinao de cores
Os valores da cor da textura podem fazer a cor
spectral filtrada, usando a cor como trs valores do
alfa
536
Controlando a aparncia das texturas
Usando modos de texturas
O modo de textura em TextureAttributes
controla como os pixels de textura afetam a cor da
forma
REPLACE A cor da textura substitui completamente
a cor material da forma
DECAL A cor da textura combinada como um
decalque no alto da cor material da forma
MODULATEA cor da textura modula (filtra) a cor
material da forma
BLEND A cor da textura combina a cor material
da forma com uma arbitrria cor de
combinao (blend color)
537
Controlando a aparncia das texturas
Usando modos de texturas
Modo Cor resultante
Transparncia
resultante
REPLACE T
rgb
T
a
DECAL S
rgb
*(1-
T
a
)+T
rgb
*T
a
S
a
MODULATE S
rgb
*T
rgb
S
a
*T
a
BLEND S
rgb
*(1-
T
rgb
)+B
rgb
*T
rgb
S
a
*T
a
Onde:
S
rgb
a cor da forma que textura mapeada
S
a
o alfa da forma que textura mapeada
T
rgb
a cor do pixel da textura
T
a
o alpha do pixel da textura
B
rgb
a cor de combinao da forma
B
a
o alpha combinado da forma
538
Controlando a aparncia das texturas
Usando modos de texturas
REPLACE DECAL
MODULATE com branco BLEND com verde
539
Controlando a aparncia das texturas
Usando modos de texturas
No uso tpico:
Use REPLACE para texturas emissivas
Texturas incandescentes "neon"
Texturas onde a iluminao pintada
Use MODULATE em uma forma branca para texturas
sombreadas
Muitas texturas tm superfcies sombreadas
Use BLEND em uma forma colorida para texturas
colorizadas
Colorizadas com uma escala de cinza para madeira,
mrmore, etc.
540
Controlando a aparncia das texturas
Mtodos da classe TextureAttributes
Os mtodos em TextureAttributes
estabelecem o modo de textura e a cor da combinao
REPLACE o modo default
Preto a cor de combinao default
Mtodos
void setTextureMode( int mode )
void setTextureBlendColor( Color4f
color )
Modos de texturas incluem MODULATE, DECAL,
BLEND, e REPLACE (default)
541
Controlando a aparancia das texturas
Um exemplo de cdigo de modos de texturas
Crie TextureAttributes
TextureAttributes myTA = new TextureAttributes(
);
Estabelea o modo de textura para MODULATE
myTA.setTextureMode( Texture.MODULATE );
Estabelea os atributos de textura em uma Appearance
Appearance myAppear = new Appearance( );
myAppear.setTextureAttributes( myTA );
542
Controlando a aparncia das texturas
Usando texturas no modo mip-map
O mip-mapping uma tcnica de anti-aliasing que
usa diferentes verses de texturas (nveis) para
diferentes distncias do observador
Voc pode ter qualquer nmero de nveis
O nvel 0 a base da imagem usada quando o
observador est em close
Mip-maps podem ser computados automaticamente
de uma imagem base:
Use o modo mip-mapping de BASE_LEVEL
Ou voc pode especificar cada nvel de imagem
explcitamente:
Use o modo mip-mapping mode de
MULTI_LEVEL_MIPMAP
543
Controlando a aparncia das texturas
Usando filtro de miniaturizao
Um filtro de miniaturizao (minification filter)
controla como a textura interpolada quando mapeia
um pixel da cena para mltiplos pixels de textura
(texels)
FASTEST Use o mtodo mais rpido
NICEST Use o mtodo mais belo
BASE_LEVEL_POINT Use o texel mais prximo
no mapeamento nvel 0
BASE_LEVEL_LINEAR Interpolando bilinearmente
4 texels mais prximos no
mapeamento nvel 0
MULTI_LEVEL_POINT Use o texel mais prximo
em mapeamentos mip-
mapped
MULTI_LEVEL_LINEARInterpolando bilinearmente
4 texels mais prximos em
mapaementos mip-mapped
544
Controlando a aparncia das texturas
Usando filtros de ampliao de texturas
Um filtro de ampliao (magnification filter)
controla como a textura interpolada quando mapeado
um pixel da cena para menos que um texels
FASTEST Use o mtodo mais rpido
NICESET Use o mtodo mais belo
BASE_LEVEL_POINT Use o texel mais prximo no
mapeamento nvel 0
BASE_LEVEL_LINEARInterpolando bilinearmente
4 texels mais prximos no
mapeamento nvel 0
545
Controlando a aparncia das texturas
Mtodos da classe Texture
Os mtodos na classe Texture controlam mip-
mapping e filtros
BASE_LEVEL o modo default para mip-map
BASE_LEVEL_POINT o filtro default
Mtodos
void setMipMapMode( int mode )
void setMinFilter( int minFilter )
void setMagFilter( int maxFilter )
546
Controlando a aparncia das texturas
Um exemplo de cdigo filtro de textura
Carregue a imagem de textura
TextureLoader myLoader = new TextureLoader(
"brick.jpg", this );
ImageComponent2D myImage = myLoader.getImage(
);
Crie uma Texture2D usando a imagem, e ligue-a
Texture2D myTex = new Texture2D( );
myTex.setImage( 0, myImage );
myTex.setEnable( true );
Estabelea os tipos de filtros
myTex.setMagFilter( Texture.BASE_LEVEL_POINT );
myTex.setMinFilter( Texture.BASE_LEVEL_POINT );
Crie uma Appearance e estabelea uma textura nela
Appearance myAppear = new Appearance( );
myAppear.setTexture( myTex );
547
Controlando a aparncia das texturas
Um exemplo de filtro de textura
BASE_LEVEL_POINT
Sem interpolao
BASE_LEVEL_LINEAR
Interpolao linear de 4
vizinhos mais prximos
548
Controlando a aparncia das texturas
Resumo
O modo de textura (texture mode) controla como a
cor de textura e valores alpha REPLACE, MODULATE,
BLEND, ou DECAL com uma cor de forma
O mip-mapping usa diferentes verses (nveis) de
uma imagem a distncias diferentes do observador
Filtros de Miniaturizao (Minification) e Ampliao
(Magnification) controlam como pixels de texturas
individuais, ou vizinhos contributem para uma imagem
549
Adicionando som
Motivao 550
Exemplo 551
Tipos de sons 552
Hierarquia da classe Sound 553
Carregando dados de som 554
Hierarquia da classe MediaContainer 555
Mtodos da classe MediaContainer 556
Olhando para os envelopes de som 557
Olhando para os envelopes de som 558
Looping sons 559
Controlando sons 560
Mtodos da classe Sound 561
Usando sons de fundo 562
Mtodos da classe BackgroundSound 563
Um exemplo de cdigo BackgroundSound 564
Usando pontos de sons 565
Variando o ganho com a distncia 566
Mtodos da classe PointSound 567
Um exemplo de cdigo PointSound 568
Um exemplo de cdigo PointSound 569
Usando sons de cone 570
Variando o ganho com a distncia 571
Variando o ganho e freqencia com ngulo 572
Mtodos da classe ConeSound 573
Um exemplo de cdigo ConeSound 574
Um exemplo de cdigo ConeSound 575
Estabelecendo os limites de influncia 576
Mtodos da classe Sound 577
Um exemplo de som 578
Controlando as verses de som 579
Habilitando playback contnuo 580
Priorizando sons 581
Mtodos da classe Sound 582
Resumo 583
550
Adicionando som
Motivao
Voc pode adicionar sons para seu ambiente:
Sons localizados - sons com uma posio
Interfaces de som do usurio (clicks, alertas)
Sonorizar os dados
Sons de jogos (rajada de laser, rosnados de monstros)
Sons de fundo - sons enchendo um ambiente
Sons de apresentao (narrao)
Sons ambientes (ondas do oceano, vento)
Msica de fundo
551
Adicionando som
Exemplo
[ ExSound ]
552
Adicionando som
Tipos de sons
O Java 3D fornece trs tipos de sons:
Background
Point
Cone
Todos trs tipos de sons tem:
Dados de som para tocar
Um ganho inicial (volume total)
Parmetros de looping
Prioridade playback
Limites de influncia (tal qual behavior)
553
Adicionando som
Hierarquia da classe Sound
Todos os sons compartilham atributos herdados de
Sound
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.Node
javax.media.j3d.Leaf
javax.media.j3d.Sound
javax.media.j3d.BackgroundSound
javax.media.j3d.PointSound
javax.media.j3d.ConeSound
554
Adicionando som
Carregando dados de som
Ns de som tocam dados de som (sound data)
descrevendo uma forma de onda digital
Os dados so carregados por uma
MediaContainer de
Um arquivo no disco ou na Web
Os formatos de arquivos tpicos de sons incluem:
AIF: formato padro cross-platform
AU: formato padro da Sun
WAV: formato padro de PC
555
Adicionando som
Hierarquia da classe MediaContainer
A classe MediaContainer fornece funcionalidade
para carregar arquivos de sons dados a URL ou o
caminho (path) do arquivo
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.NodeComponent
javax.media.j3d.MediaContainer
556
Adicionando som
Mtodos da classe MediaContainer
Os mtodos na classe MediaContainer
selecionam o caminho do arquivo ou a URL para o
arquivo de som
Estabelecem a URL provocando o carregamento do
som
Mtodos
MediaContainer( )
void setUrl( String path )
void setUrl( URL url )
557
Adicionando som
Olhando para os envelopes de som
Os arquivos de som possuem um Envelope interno de
amplitude com trs estgios:
Attack: o incio do som
Sustain: o corpo do som
Release: a deteriorao do final do som
558
Adicionando som
Olhando para os envelopes de som
O envelope parte dos dadosde som carregados pela
MediaContainer
Estabelece os envelopes de som usando um editor de
som
A amplitude no inclinada pelo Java 3D
559
Adicionando som
Looping sons
Para sustentar (sustain) um som, voc pode repetir
entre dois pontos do lao (loop points)
Autores usam um editor de som
Eles usualmente agrupam o estgio de sustentao
(Sustain)
Se no existem pontos de lao, o default para o lao
o loop inteiro
Os laos podem executar um nmero de vezes, ou
para sempre
560
Adicionando som
Controlando sons
Os sons podem ser habilitados ou desabilitados
Habilitando o som faz ele escalvel (schedulable)
O som iniciar se os limites de influncia do som
cruzar o raio de ativao do observador
O volume total pode ser controlado com um fator da
multiplicao do ganho
561
Adicionando som
Mtodos da classe Sound
Os mtodos na classe Sound selecionam os dados
do som, ligam o som, estabelecem seu volume,
repetem o som playback
Por default, os sons so desabilitados, tendo um
ganho de 1.0, e no so repetidos
Mtodos
void setSoundData( MediaContainer
sound )
void setEnable( boolean onOff )
void setInitialGain( float amplitude
)
void setLoop( int count )
Repeties especiais (loop) com valores:
Um 0 conta loops 0 vezes (toca por uma vez)
Um -1 conta loops para sempre
562
Adicionando som
Usando sons de fundo
BackgroundSound estende a classe Sound
As ondas de sons de fundo vem de todas as direes,
enchendo o ambiente com um volume constante
Idia similar tal como AmbientLight
Use sons de fundo para:
Sons de apresentao (narrao)
Sons ambiente (ondas de oceano, vento)
Msica de fundo
Voc pode ter mltiplos sons de fundo tocando
563
Adicionando som
Mtodos da classe BackgroundSound
BackgroundSound no adiciona nenhum mtodo
adicional alm daqueles do Sound
Mtodo
BackgroundSound( )
564
Adicionando som
Um exemplo de cdigo BackgroundSound
Carregue dados de som
MediaContainer myWave = new MediaContainer(
"canon.wav" );
Crie o som
BackgroundSound mySound = new BackgroundSound( );
mySound.setSoundData( myWave );
mySound.setEnable( true );
mySound.setInitialGain( 1.0f );
mySound.setLoop( -1 ); // Loop forever
Estabelea os limites de influncia
BoundingSphere myBounds = new BoundingSphere(
new Point3d( ), 1000.0 );
mySound.setSchedulingBounds( myBounds );
565
Adicionando som
Usando pontos de sons
PointSound estende a classe Sound
As ondas de som emitem radialmente do ponto em
todas as direes
Idia similar tal como em PointLight
Use pontos de som para simular sons locais tais
como:
Interfaces de som do usurio (clicks, alertas)
Sonorizao dos dados
Sons de jogos (rajada de laser, rosnados de monstros)
Voc pode ter mltiplos pontos de som tocando
566
Adicionando som
Variando o ganho com a distncia
As ondas do ponto de som so atenuadas
(attenuated):
a amplitude diminui tal com o observador se afasta
A atenuao controlada por uma lista de pares de
valores:
A distncia (distance) da posio do som
Ganho (Gain) nesta distncia
567
Adicionando som
Mtodos da classe PointSound
Os mtodos em PointSound estabelecem a
posio do som e a atenuao
A posio default (0.0,0.0,0.0) sem atenuao
Mtodos
PointSound( )
void setPosition( Point3f pos )
void setDistanceGain( Point2f[]
atten )
568
Adicionando som
Um exemplo de cdigo PointSound
Carregue os dados do som
MediaContainer myWave = new MediaContainer(
"willow1.wav" );
Crie um vetor de atenuao
Point2f[] myAtten = {
new Point2f( 100.0f, 1.0f ),
new Point2f( 350.0f, 0.5f ),
new Point2f( 600.0f, 0.0f )
};
569
Adicionando som
Um exemplo de cdigo PointSound
Crie o som
PointSound mySound = new PointSound( );
mySound.setSoundData( myWave );
mySound.setEnable( true );
mySound.setInitialGain( 1.0f );
mySound.setLoop( -1 ); // Loop forever
mySound.setPosition( new Point3f( 0.0f, 1.0f,
0.0f ) );
mySound.setDistanceGain( myAtten );
Estabelea os limites de influncia
BoundingSphere myBounds = new BoundingSphere(
new Point3d( ), 1000.0 );
mySound.setSchedulingBounds( myBounds );
570
Adicionando som
Usando sons de cone
ConeSound estende a classe PointSound
As ondas de som emitem radialmente de um ponto
em uma direo restrita a um cone
Idia similar tal como em SpotLight
Use sons de cone para simular sons locais dirigidos
tais como:
Alto-falantes altos
Instrumentos musicais
Voc pode ter mltiplos cones de som tocando
571
Adicionando som
Variando o ganho com a distncia
ConeSound estende PointSound suporte para
atenuao
PointSound usa uma lista de pares de ganho de
distncia que aplica para todas as direes
ConeSound usa duas listas de pares de ganho de
distncia que aplica nas direes para frente e para trs
A direo do alvo do cone a direo da frente
Se nenhuma lista traseira for dada, a lista da frente
usada
572
Adicionando som
Variando o ganho e frequncia com o
ngulo
As fontes de som de mundo real emitem em uma
direo
O ganho de volume (gain) e frequncia contida
variam com o ngulo
A atenuao angular ConeSound simula este efeito
com uma lista de triplas ngulo-ganho-filtro (angle-
gain-filter)
ngulo (angle) da direo da frente do cone
Ganho (gain) para aquele ngulo
Filtro (Cutoff frequency) para um filtro low-pass
nesse ngulo
573
Adicionando som
Mtodos da classe ConeSound
Os mtodos em ConeSound apontam o som,
estabelecem seu ganho na distncia para frente e para
trs e controlam a atenuao angular
Por default, os sons de cone so apontados na direo
positiva do Z sem distncia ou atenuao angular
Mtodos
ConeSound( )
void setDirection( Vector3f dir )
void setDistanceGain( Point2f[]
front, Point2f[] back )
void setBackDistanceGain( Point2f[]
back )
void setAngularAttenuation(
Point3f[] atten )
Os ngulos de atenuao esto entre os limites de 0.0
at PI radianos
574
Adicionando som
Um exemplo de cdigo ConeSound
Carregue os dados do som
MediaContainer myWave = new MediaContainer(
"willow1.wav" );
Crie vetores de atenuao
Point2f[] myFrontAtten = {
new Point2f( 100.0f, 1.0f ),
new Point2f( 350.0f, 0.5f ),
new Point2f( 600.0f, 0.0f )
};
Point2f[] myBackAtten = {
new Point2f( 50.0f, 1.0f ),
new Point2f( 100.0f, 0.5f ),
new Point2f( 200.0f, 0.0f )
};
Point3f[] myAngular = {
new Point3f( 0.000f, 1.0f, 20000.0f ),
new Point3f( 0.785f, 0.5f, 5000.0f ),
new Point3f( 1.571f, 0.0f, 2000.0f ),
};
575
Adicionando som
Um exemplo de cdigo ConeSound
Crie o som
ConeSound mySound = new ConeSound( );
mySound.setSoundData( myWave );
mySound.setEnable( true );
mySound.setInitialGain( 1.0f );
mySound.setLoop( -1 ); // Loop forever
mySound.setPosition( new Point3f( 0.0f, 1.0f,
0.0f ) );
mySound.setDirection( new Vector3f( 0.0f, 0.0f,
1.0f ) );
mySound.setDistanceGain( myFrontAtten,
myBackAtten );
mySound.setAngularAttenuation( myAngular );
Estabelea os limites de influncia
BoundingSphere myBounds = new BoundingSphere(
new Point3d( ), 1000.0 );
mySound.setSchedulingBounds( myBounds );
576
Adicionando som
Estabelecendo os limites de influncia
Um som ouvido (se ele est tocando) quando:
O raio de ativao do observador cruza com seu
limite de influncia (scheduling bounds)
Mltiplos sons podem estar ativos de uma vez
Idntico ao limite do behavior
Os limites do som habilitam diferentes sons para
diferentes reas da cena
Por default, os sons no tem limites de influncia e
nunca so ouvidos!
Erro comum: esquecer de estabelecer os limites de
influncia
577
Adicionando som
Mtodos da classe Sound
Os mtodos na classe Sound estabelecem os limites
de influncia
Mtodos
void setSchedulingBounds( Bounds
bounds )
void setSchedulingBoundingLeaf(
BoundingLeaf leaf )
578
Adicionando som
Um exemplo de som
[ ExSound ]
579
Adicionando som
Controlando as verses de som
Quando voc desabilita o som:
Permite que a verso deixe terminar o som que toca,
sem mais laos adicionais
Desabilita a verso para par-la imediatamente
Verso habilitada Verso desabilitada
580
Adicionando som
Habilitando playback contnuo
Quando um som for no programado (movimentos
do observador fora dos limites de influncia):
Permita o playback contnuo de mant-lo sendo
silencioso
Ele recomea, em andamento se escalado novamente
Desabilita o playback contnuo para saltar o
silencioso playback
Ele comea no incio se escalado outra vez
Habilitao Contnua Desabilitao Contnua
581
Adicionando som
Priorizando sons
O hardware e o software de sons limitam o nmero
de sons simultneos
O pior caso 4 sons pontos/cone e 7 sons de fundo
(background)
Voc pode priorizar seus sons
Uma prioridade baixa de som pode ser
temporariamente emudecida quando um som de alta
prioridade necessita ser tocado
582
Adicionando som
Mtodos da classe Sound
Os mtodos na classe Sound controlam a verso,
playback contnuo, e a prioridade
Por default, a verso, o playback contnuo ou
desabilitado, e a prioridade 1.0
Mtodos
void setReleaseEnable( boolean onOff
)
void setContinuousEnable( boolean
onOff )
void setPriority( float ranking )
583
Adicionando som
Resumo
Todos os sons usam dados de sons de um
MediaContainer
Para todos os sons voc pode lig-lo ou deslig-lo,
estabelecer seu ganho, estilo de verso, estilo de
playback contnuo, looping, prioridade, e limites de
influncia
BackgroundSound cria um som emitido para
todos os lugares, enchendo a rea com som
PointSound cria um som que emitido de uma
posio, radialmente em todas as direes, com
atenuao na distncia
ConeSound cria uma som que emitido de um
posio para um direo a frente, com atenuao na
distncia e no ngulo
Os sons so ouvidos (se esto tocando) quando o raio
de ativao do observador cruza com os limites de
influncia do som
O default sem limites de influncia (no scheduling
bounds), ento nada escutado!
584
Controlando o som do ambiente
Motivao 585
Hierarquia da classe Soundscape 586
Estabelecendo os limites da aplicao soundscape 587
Mtodos da classe Soundscape 588
Tipos de atributos aurais 589
Hierarquia da classe AuralAttributes 590
Controlando a reverberao 591
Controlando a reverberao 592
Mtodos da classe AuralAttributes 593
Controlando o atraso do som com a distncia 594
Controlando a filtragem de frequncia com a distncia 595
Mtodos da classe AuralAttributes 596
Controlando a mudana Doppler 597
Mtodos da classe AuralAttributes 598
Um exemplo de cdigo AuralAttributes 599
Resumo 600
585
Controlando o som do ambiente
Motivao
A classe Sound controla as caractersticas do som
Para aumentar o realismo, voc pode controlar as
caractersticas do ambiente tambm
Use soundscapes e aural attributes para
Adicionar reverberao (ecos)
Use diferentes reverberaes para cmodos
diferentes
Controlar o lanamento da mudana doppler
Controlar a filtragem de frequncia com a distncia
586
Controlando o som do ambiente
Hierarquia da classe Soundscape
Todas as caractersticas soundscape so controladas
usando Soundscape
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.Node
javax.media.j3d.Leaf
javax.media.j3d.Soundscape
587
Controlando o som do ambiente
Estabelecendo limites da aplicao
soundscape
Um Soundscape afeta o som quando:
O raio de ativao do observador cruza seu limite de
influncia (application bounds)
Idntico aos limites da aplicao de fundos
(background)
Se mltiplos soundscapes esto ativos, usado o
mais prximo
Se o est ativo o soundscapes, sem reverberao,
filtragem, ou mudana dopler toma efeito
Por default, o soundscapes no tem limites de
aplicao, e nunca so aplicados!
Erro comum: esquecer de estabelecer os limites da
aplicao
588
Controlando o som do ambiente
Mtodos da classe Soundscape
Os mtodos na classe Soundscape estabelecem os
atributos aurais e limites da aplicao
Mtodos
Soundscape( )
void setApplicationBounds( Bounds
bounds )
void setApplicationBoundingLeaf(
BoundingLeaf leaf )
void setAuralAttributes(
AuralAttributes aural )
589
Controlando o som do ambiente
Tipos de atributos aurais
A API Java 3D fornece trs tipos de atributos aurais:
Reverberao (eco)
Filtragem de distncia
Doppler Shift
Todos os tipos de atributos aurais so controlados
com um n AuralAttributes
590
Controlando o som do ambiente
Hierarquia da classe AuralAttributes
Todas caractersticas de atributos aurais so
controladas usando AuralAttributes
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObject
javax.media.j3d.NodeComponent
javax.media.j3d.AuralAttributes
591
Controlando o som do ambiente
Controlando a reverberao
No mundo real, existe o som da dureza de paredes,
cho, etc.
Se a dureza da superfcie alta, ns escutaremos
como um eco perfeito
Se ela macia, algumas frequncias so absorvidas
O conjunto de todos os ecos Reverberao
(Reverberation)
A API Java 3D fornece um modelo simplificado de
reverberao
Os sons eco depois de um tempo de atraso de
reverberao (reverb delay)
A atenuao do eco controlada por um coeficiente
de reflexo (reflection coefficient)
Os ecos param depois de um contador de
reverberao (reverb order)
592
Controlando o som do ambiente
Controlando a reverberao
A reverberao usa um loop realimentado:
Cada eco uma passada ao redor do loop de
realimentao
593
Controlando o som do ambiente
Mtodos da classe AuralAttributes
Os mtodos na classe AuralAttributes
controlam a reverberao
Todos os valores so zero por default
Mtodos
AuralAttributes( )
void setReverbDelay( float delay )
void setReflectionCoefficient( float
coeff )
void setReverbOrder( int order )
Um valor de -1 para o contador de reverberao
(reverb order) repete ecos at eles se extinguirem
594
Controlando o som do ambiente
Controlando o atraso de som com a
distncia
Quando o som inicia a tocar, existe um atraso antes
de ele ser ouvido
Este atraso o tempo do som viajar da fonte at o
ouvinte
A velocidade default para o som de 0.344
metros/millisegundo
Voc pode escalar para mais ou para menos usando
rolloff
Valores entre 0.0 <= 1.0 diminuem a velocidade do
som
Valores > 1.0 aumentam a velocidade do som
Um valor 0.0 emudece o som
595
Controlando o som do ambiente
Controlando a filtragem de frequncia
com a distncia
Um atributo ganho (gain) controla o volume total
As ondas de som so filtradas (filtered), diminuindo
sua frequncia principal de acordo com o observador,
se este se move ao longe
A atenuao controlada por uma lista de pares de
valores:
A distncia (distance) da posio do som
Filtro (Cutoff frequency) para um filtro low-pass
naquela distncia
596
Controlando o som do ambiente
Mtodos da classe AuralAttributes
Os mtodos ma classe AuralAttributes
controlam ganho, filtragem, e rolloff
Por default, no existe filtro e ganho e rolloff so 1.0
Mtodos
void setAttributeGain( float gain )
void setRolloff( float rolloff )
void setDistanceFilter( Point2f[]
atten )
597
Controlando o som do ambiente
Controlando a mudana Doppler
A mudana Doppler varia o lanamento do som de
acordo com o movimento do som ou do observador
Estabelea um fator de escala de velocidade
(velocity scale factor) para escalar a velocidade
relativa entre o som e o observador
Um fator de escala de frequncia (frequency scale
factor) acentua ou diminui o efeito
598
Controlando o som do ambiente
Mtodos da classe AuralAttributes
Os mtodos na classe AuralAttributes
controlam a frequncia e a velocidade escaladas pela
mudana Doppler
Por default, frequncias so escaladas por 1.0 e a
velocidade por 0.0
Mtodos
void setFrequencyScaleFactor( float
scale )
void setVelocityScaleFactor( float
scale )
599
Controlando o som do ambiente
Um exemplo de cdigo AuralAttributes
Estabelea os atributos aurais
AuralAttributes myAural = new
AuralAttributes( );
myAural.setReverbDelay( 2.0f );
myAural.setReverbOrder( -1 ); //
Until dies out
myAural.setReflectionCoefficient(
0.2f ); // dampen
Crie o soundscape
Soundscape myScape = new
Soundscape( );
myScape.setAuralAttributes(
myAural );
Estabelea os limites de influncia
BoundingSphere myBounds = new
BoundingSphere(
new Point3d( ), 1000.0 );
myScape.setApplicationBounds(
myBounds );
600
Controlando o som do ambiente
Resumo
Soundscape apia um conjunto de
AuralAttributes para serem aplicados dentro de
uma rea de influncia
AuralAttributes controla a reverberao, a
filtragem da distncia, e a mudana Doppler dentro
daquela rea
O soundscapes aplicado quando o raio de ativao
do observador cruza o limite de influncia do
soundscape
O default sem limites de influncia (no application
bounds), ento nada afetado!
601
Concluses
Onde encontrar mais 602
Introduo a Programao com Java 3D 603
602
Concluses
Onde encontrar mais
A especificao Java 3D
http://www.javasoft.com/products/java-media/3D/
Ou . . .
The Java 3D API Specification
por Henry Sowizral, Kevin Rushforth, Michael
Deering
publicado por Addison-Wesley
O site da Sun Java 3D
http://www.sun.com/desktop/java3d

You might also like