7/22/2019 Introduo a Programao Com Java 3D
1/155
Introduo a Programao com Java 3DAutores Tradutor
Henry A. Sowizral (Organizador)
[email protected] Microsystems, Inc.
Jos Remo Ferreira
Brega
Fundao E. E. S.Rocha
David R. Nadeau
[email protected]://www.sdsc.edu/~nadeauSan Diego Supercomputer
Center University of California atSan 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 deaplicaes complexas 3D, e ao mesmo tempo, habilitar implementao eficiente e rpidasobre uma variedade de plataformas, desde PCs at workstations. Usando o Java 3D,desenvolvedores de software podem construir aplicaes cross-platform que constroem ascenas 3D por programa, ou por carregadores 3D de VRML, OBJ, e/ou outros arquivosexternos. 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 classeJava 3D, uso de padres tpicos, caminhos de evitar erros comuns, animao e tcnicas deprojeto de cenas, e truques para aumentar a performance e o realismo.
Introduo a Programao com Java 3D
PrefcioBem vindo a estas notas de curso! Estas notas de curso foram escritas para dar-lhe umavista geral rpida, prtica, dirigida a exemplos de Java 3D, a API cross-platformgrfica para Java. Para fazer este, ns inclumos quase 600 pginas do material docurso 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 cursoOs 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 deaplicaes de Java 3D de exemplo. Clicando no nome do arquivo debaixo de uma imagemtraz acima uma janela que mostra o arquivo de fonte de Java que gerou a imagem. Osarquivos fonte de Java contm os comentrios extensivos que fornecem a informao sobre astcnicas que o arquivo ilustra.Compilar e executar o arquivo do exemplo de Java com uma linha de comando trazem acimauma aplicao de Java que ilustra uma caracterstica de Java 3D. A maioria tais de aplicaesincluem os menus e as outras opes da interao com que voc pode explorar caractersticasde Java 3D.
As notas do curso fornecem uma vista geral de Java 3D. Ns recomendamos que voc invistaem um livro de Java 3D para comear a cobertura completa da linguagem. Um dos autores docurso 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. Aresposta : As partes destas notas de curso so o copyright (c) 1999 pelo henry A. Sowizral, eo copyright (c) 1999 por David R. Nadeau. Os usurios e a posse destas notas de curso soconcedidos por este meio um copyright e uma licena no exclusiva, livre de royalties dapatente 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. Estematerial 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 seuprprio curso de Java 3D. Voc pode traduzir estas notas em outras lnguas e voc pode afixarcpias destas notas em seu prprio Web site, por muito tempo com a observao de copyrightacima includa tambm. Voc no pode, entretanto, vender estas notas do tutorial para obterlucro 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 tentare fazer as anotaes livres de bugs, mas se algo ocorrer, ns gostaramos de repar-lo antesque outros estejam confundidos por nosso erro.
ContatoDavid R. Nadeau
University of California
NPACI/SDSC, MC 05059500 Gilman DriveLa Jolla, CA 92093-0505
(619) 534-5062FAX: (619) 534-5152
[email protected]://www.sdsc.edu/~nadeau
TradutorJos Remo Ferreira Brega
Fundao de Ensino Eurpides Soares da Rocha
Av. Higino Muzzi Filho, 529Campus UniversitrioMarlia - SP
(14) 421-0833 Ramal 353FAX (14) 423-2516
7/22/2019 Introduo a Programao Com Java 3D
2/155
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-202Palo Alto, CA 94303-4900
UPS, Fed Ex: 14 Network CircleMenlo Park, CA, 94025
Email [email protected]
Henry Sowizral um Engenheiro Coordenador na Sun Microsystems onde oarquiteto principal da API Java. Suas reas de interesse incluem a realidade virtual,visualizao de grandes modelos, e simulao distribuda e simultnea. Ensinou cursosem tpicos incluindo os sistemas especialistas e realidade virtual em confernciasincluindo COMPCON, Supercomputing, VRAIS, e SIGGRAPH. O Henry ensinouJava 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 daUniversidade da Califrnia, de Irvine, e de um M.Phil. e de um Ph.D. de Cincia daComputao da universidade de Yale.
David R. Nadeau
Ttulo Cients ta Principal
Afiliao San Diego Supercomputer Center (SDSC)University of California, San Diego (UCSD)
Endereo NPACI/SDSC, MC 05059500 Gilman DriveLa Jolla, CA 92093-0505
Email [email protected]
Home page http://www.sdsc.edu/~nadeau
Dave Nadeau um cientista principal no centro de supercomputao de San Diego, emum centro de pesquisa nacional especializado na cincia computacional e naengenharia, situada no campus da universidade de Califrnia, San Diego. Suas reas deinteresse incluem a visualizao cientfica e realidade virtual, ensinou Java 3D eVRML em conferncias mltiplas including SIGGRAPH, Eurographics,Supercomputing, WebNet, WMC/SCS, VRAIS, e visualization.
Dave um co-autor do The VRML 2.0 SourcebookJohn Wiley & Sons. Est ligado aum B.S. na engenharia aeroespacial da University of Colorado, Boulder, um M.S. naengenharia mecnica na Purdue University, e est no programa de Ph.D. na EngenhariaEltrica e de Computao na University of California, San Diego
Introduo a Programao com Java 3D
Usando exemplos JavaEstas notas de curso incluem dzias de aplicaes separadas de Java que ilustram o usode Java 3D. O cdigo de fonte para estas aplicaes includo nos arquivos comextenses do nome de arquivo .java.O byte-code compilado para estes arquivos deJava no includo! Para usar estes exemplos, voc necessitar compilarprimeiramente as aplicaes.
Compilando Java
O cdigo de fonte para todos os exemplos de Java 3D est na pasta dos exemplos. Asimagens, o som, e os arquivos da geometria usadas por estes exemplos so contidos tambmdentro da mesma pasta. Um arquivo README.txt na pasta lista as aplicaes de Java 3Dincludas 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 emhttp://www.javasoft.com.
Os arquivos class Java 3D class files esto disponveis em forma livre de Sun Microsystemsem 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 si te emhttp://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 deMicrosoft, de Symantec, e de outros. Uma lista moderna de produtos disponveis de Java estdisponvel no Web site de Developer.com emhttp://www.developer.com/directories/pages/dir.java.html.
Uma vez possuindo os arquivos class da API Java e um compilador de Java, voc podecompilar os arquivos fornecidas de Java. Infelizmente, ns no podemos dar-lhe sentidosexplcitos em como a faa i sto. Cada plataforma e compilador de Java so diferentes. Vocter 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 umarquivo 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.
7/22/2019 Introduo a Programao Com Java 3D
3/155
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 321Construindo 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 2Programao do Curso 3Escopo do Curso 4
2
Bem-vindo
Introduco ao Java3D
Bem-vindo ao Curso
7/22/2019 Introduo a Programao Com Java 3D
4/155
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 deAvanado de texturas, Somambiente
4
Bem-vindo
Escopo do Curso
Introduzir os conceitos e terminologia de Java3D
Discutir importantes classes Java3D
Ilustrar como escrever aplicaes ou applets emJava3D
Discutir padres de utilizao, tcnicas e truques
5
Introduo
O que Java 3D? 6O que Java 3D? 7O que Java 3D faz? 8O que Java 3D faz? 9Em que reas de aplicao pode-se usar Java 3D? 10Exemplos: Visualizao Cientifica 11Exemplos: Dados Abstratos (Financeiro) 12Exemplos: Aprendizado Mdico 13Exemplos: CAD 14Exemplos: Anlises 15Exemplos: Animaes 16
Exemplos: 3D Logos 17Exemplos: Visualizao Cientifica 18Que software eu preciso para usar Java 3D? 19Que hardware eu preciso para usar Java 3D? 20Como eu executo uma aplicao/applet Java 3D? 21Como Java 3D se compara como outras APIs? 22Resumo 23
6
Introduo
O que Java 3D?
Java 3D uma API (Application ProgrammingInterface)3D grfica interativa para construo deaplicaes e applets em Java Uma maneira de desenvolver e apresentar contedo3D 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/22/2019 Introduo a Programao Com Java 3D
5/155
7
Introduo
O que Java 3D?
Aumente a base de programao
Pense em objetos . . .no em vrtices
Pense em contedo . . .no em processo derenderizao
8
Introduo
O que Java 3D faz?
Fornece uma API java no proprietria independentede plataforma Integra-se com outras APIs Java: processamento deimagens, fontes, desenhos 2D, interfaces do usurio,
etc. Habilita o desenvolvimento de aplicaes de altonvel O autor mantm o foco no contedo, no narenderizao 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 quandodisponvel
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
7/22/2019 Introduo a Programao Com Java 3D
6/155
11
Introduo
Exemplos: Visualizao Cientfica
12
Introduo
Exemplos: Dados Abstratos (Financeiros)
13
Introduo
Exemplos: Aprendizado Mdico
14
Introduo
Exemplos: CAD
7/22/2019 Introduo a Programao Com Java 3D
7/155
15
Introduo
Exemplos: Anlises
16
Introduo
Exemplos: Animaes
17
Introduo
Exemplos: 3D Logos
18
Introduo
Exemplos: Visualizao Cientfica
Browserpara AnatomiaUniversidade deMassachusets e
Brigham Women'sHospital
VisualizaoColaborativa
Space Science eEngineering Center
(SSEC)
7/22/2019 Introduo a Programao Com Java 3D
8/155
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 eSolaris
A verso Linux est disponvel
Outras verses, de outras plataformas, sodisponibilizadas 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 paraPC 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 oJava plug-inno Netscape ou Internet Explorer Inclua o applet em uma pgina Web O Java plug-in automaticamente faz os downloads doJDK 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 deestado de hardware em baixo nvel Fornecem e requeremcontrole detalhado OpenGL, Direct3D, game enginesde baixo nvel APIs "mais recentes" focam no controle de contedoem alto nvel Fornecem alguma otimizao na renderizao Java 3D VRML SGI OpenInventor, Optimizer/Cosmo3D (sendodescontinuado) SGI-Microsoft "Fahrenheit"
7/22/2019 Introduo a Programao Com Java 3D
9/155
23
Introduo
Resumo
Java 3D uma API de alto nvel para a construode aplicaes e applets 3D interativas em Java
Escreva uma vez, rode em qualquer lugar . . . em3D!!
24
Construindo um contedo 3D com um grafo de cena
Construindo um grafo de cena 25Um exemplo grafo de cena 26
Esquematizando um diagrama grafo de cena 27Exemplos de criao de grandes cenas 28Construindo um grafo de cena 29Processando um grafo de cena 30
Examplos de caractersticas de Java 3D 31Exemplos de caractersticas de Java 3D 32Exemplos de caractersticas de Java 3D 33
Usando a terminologia grafo de cena 34Base da hierarquia da classe grafo de cena 35
Construindo um grafo de cena 36Construindo um grafo de cena 37
Usando terminologia universo 38Usando terminologia ramo (branch) 39
Esquematizando um diagrama de universo 40Hierarquia da classe Superstructure 41Construindo um universo 42Construindo um universo 43
Construindo o contedo da cena 44Carregando o contedo da cena de arquivos 45Construindo a superestrutura grafo de cena 46
Esquematizando um diagrama de universo simples47Exemplo HelloWorld 48
Um exemplo de cdigo HelloWorld 49Um exemplo de cdigo HelloWorld 50Um exemplo de cdigo HelloWorld 51Um exemplo de cdigo HelloWorld 52Exemplo HelloWorld 53
Compondo um n vivo 54
Verificando se o n est vivo 55Compilando um grafo de cena 56
Compilando um grafo de cena 57Controlando capacidades de acesso 58
Controlando capacidades de acesso 59Controlando capacidades de acesso60Controlando capacidades de acesso61
Resumo 62Resumo 63Resumo 64
25
Construindo um contedo 3D com um gafo de cena
Construindo um grafo de cena
Um grafo de cena uma "rvore-famlia" contendoos dado da cena "Filhos" so as formas, luzes, sons, etc. "Pais" so grupos de filhos e outros pais Isso define um agrupamento hierrquicode 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 debrinquedo:
Inicie com as partes sobrea mesa
Monte as partesrelacionadas
Junte todas as partes finalizando o avio
7/22/2019 Introduo a Programao Com Java 3D
10/155
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 cenapode clarificar o projetoe facilitar o desenvolvimentodo 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 grandenmero de formas
Landing gear192 shapes
Boom box11,000 shapes
29
Construindo um contedo 3D com um gafo de cena
Construindo um grafo de cena
Grafos de cena so construdos a partir decomponentes 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 derenderizao A ordem de renderizao est acima do Java 3D
Java 3D usa threads separadas, independentes eassncronas para: Renderizao grafica "Renderizao" de som Animao "execuo de comportamento (behavior)" Gerenciamento de dispositivos de entrada Gerao de eventos (deteco de colises)
7/22/2019 Introduo a Programao Com Java 3D
11/155
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, etamanho 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 deatributos para um n Geometria da forma Cor da forma Dados de som para tocar
7/22/2019 Introduo a Programao Com Java 3D
12/155
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, ediferentes tipos de tudo isso levam a . . . hierarquia daclasse Java 3D
Hierarquia da Classe
java.lang.Objectjavax.media.j3d.SceneGraphObjectjavax.media.j3d.Nodejavax.media.j3d.Groupjavax.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, cadaum em sua prprio grafo de cena Construa os componentes separadamente Monte-os dentro de um recipiente comum: ouniverso 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 degrafos de cena Tipicamente um universo por aplicao Local (locale): uma posio no universo em que sepe os grafos de cena Tipicamente um local por universo Grafo ramo (Branch graph): um grafo de cena
Tipicamente vrios ramos (branch graphs) por local
7/22/2019 Introduo a Programao Com Java 3D
13/155
39
Construindo um contedo 3D com um grafo de cena
Usando terminologia ramo (branch)
Os grafos de cena so tipicamente divididos em doistipos de ramos de grafos (branch graphs): Ramo de contedo (Content branch): formas, luzes, eoutros contedos Tipicamente mltiplos ramos por local Ramo de vista (View branch): informao devisualizao Tipicamente uma por universo Esta diviso opcional: Contedo e informao de visualizao podem serintercaladas 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 contergrafos de cena
41
Construindo um contedo 3D com um grafo de cena
Hierarquia da classe Superstructure
Universos e locais so classes superestruturas pororganizao de contedo
Hierarquia da Classe
java.lang.Objectjavax.media.j3d.VirtualUniversejavax.media.j3d.Locale
javax.media.j3d.Nodejavax.media.j3d.Groupjavax.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( );
7/22/2019 Introduo a Programao Com Java 3D
14/155
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 estabelecehabilitao para construir contedos 3D complexos Construa o contedo diretamente dentro da suaaplicao Java Carregue o contedo de arquivos Faa ambos A classe File loaderhabilita a leitura de contedosde 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 Utilityajudam a automatizar operaes comuns Implementedas sobre Java 3D
A classe til SimpleUniverseconstroi um arranjo comum declasses universo, local, e vista
SimpleUniverse mySimple = new SimpleUniverse(myCanvas );mySimple.addBranchGraph( myBranch );
7/22/2019 Introduo a Programao Com Java 3D
15/155
47
Construindo um contedo 3D com um grafo de cena
Esquematizando um diagrama de universo
simples
A classe SimpleUniverse encapsula umasuperestrura comum
48
Construindo um contedo 3D com um grafo de cena
Exemplo HelloWorld
Vamos construir um cubo multicolorido e gir-losobre 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( );}
7/22/2019 Introduo a Programao Com Java 3D
16/155
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 (permitindodesenho)
BranchGroup myBranch = new BranchGroup( );myBranch.addChild( myShape );myLocale.addBranchGraph( myBranch ); // feitovivo!
Removendo o ramo de grafo do local, reverte o efeitomyLocale.removeBranchGraph( myBranch );// naovivo
7/22/2019 Introduo a Programao Com Java 3D
17/155
55
Construindo um contedo 3D com um grafo de cena
Verificando se o n est vivo
Um mtodo sobre a classe SceneGraphObjectpergunta 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 BranchGroupcompilao 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 antesde 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 oacesso a leitura e escrita Leia ou escreva qualquer atributo antesdo n estarvivo ou compilado As capacidades controlam o acesso enquantoo nest vivo ou compilado
Mantenha o nmero de capacidades pequena assim oJava 3D pode fazer mais otimizaes durante acompilao
7/22/2019 Introduo a Programao Com Java 3D
18/155
59
Construindo um contedo 3D com um grafo de cena
Controlando capacidades de acesso
Mtodos em SceneGraphObjectestabelecem/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 eescrita Usualmente a capacidade separada para cadaatributo de um n Os ns tambm herdam capacidades das classes dos
pais Cada capacidade tem um nome em letras maisculas Por exemplo, Shape3Dinclui 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 capacidadeshabilitadas
myShape.setAppearance( newAppear ); // permitido
Mas voc no pode trocar atributos para os quais voc no tem ascapacidades estabelecidas
myShape.setGeometry( newGeom ); // error!
62
Construindo um contedo 3D com um grafo de cena
Resumo
Um grafo de cena uma hierarquia de grupos deformas, luzes, sons, etc.
Sua aplicao constroi o grafo de cena usandoclasses e mtodos Java 3D
A implementao Java 3D usa o grafo de cena atrsda cena para renderizar formas, tocar sons, executar
animaes, etc.
7/22/2019 Introduo a Programao Com Java 3D
19/155
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 degrafo(branch graph) num universo Um ramo de grafo(branch graph) um grafo decena Um n(node) um tem em um grafo de cena Um componente de n (node component) pacote deatributos para um n
64
Construindo um contedo 3D com um grafo de cena
Resumo
Adicionando um ramo de grafo a um local torna o nvivoe possibilitando o seu desenho Compilandoum ramo de grafo otimiza para umarenderizao mais rpida AsCapacidades controlam o acesso aos atributos do
n depois de o n estarvivo ou compilado Poucas capacidades habilitam mais otimizaes
65
Construindo formas 3D
Motivao 66Exemplo 67Hierarquia da classe Shape3D 68
Mtodos da classe Shape3D 69Construindo geometrias usando coordenadas 70
Construindo geometrias usando coordenadas 71Usando o sistema de coordenadas da mo direita 72Usando ordem de coordenadas 73Usando ordem de coordenadas 74Definindo vrtices 75Definindo vrtices 76
Construindo geometrias 77Hierarquia da classe GeometryArray 78Mtodos da classe GeometryArray 79Mtodos da classe GeometryArray 80Construindo diferentes tipos de geometria 81
Construindo um PointArray 82Um exemplo de cdigo PointArray 83
Construindo um LineArray 84Um exemplo de cdigo LineArray 85
Construindo um TriangleArray 86Um exemplo de cdigo TriangleArray 87
Construindo um QuadArray 88Um exemplo de cdigo QuadArray 89
Construindo geometrias limpas 90Hierarquia da classe GeometryStripArray 91
Construindo um LineStripArray 92Construindo um TriangleFanArray 93Construindo um TriangleStripArray 94Construindo uma geometria indexada 95
Hierarquia da classe IndexedGeometryArray 96Mtodos da classe IndexedGeometryArray 97Mtodos da classe IndexedGeometryArray 98
Exemplo Gearbox 99
Resumo 100Resumo 101Resumo 102
66
Contruindo formas 3D
Motivao
O n folha Shape3Dconstri um objeto 3D com: Geometry: A forma ou estrutura da forma Appearance: A cor, transparncia, e sombra da forma Java 3D suporta mltiplas geometrias ecaractersticas de aparncia
Comecemos pela geometria depois a aparncia
7/22/2019 Introduo a Programao Com Java 3D
20/155
67
Construindo formas 3D
Exemplo
[ GearBox]
68
Construindo formas 3D
Hierarquia da classe Shape3D
A classe Shape3Dextende a classe Leaf
Hierarquia da Classe
java.lang.Objectjavax.media.j3d.SceneGraphObjectjavax.media.j3d.Nodejavax.media.j3d.Leafjavax.media.j3d.Shape3D
69
Construindo formas 3D
Mtodos da classe Shape3D
Mtodos da Shape3D fixam a geometria e osatributos de aparncia
Mtodos
Shape3D( )
Shape3D( Geometry geometry,Appearance appearance )
void setGeometry( Geometry geometry)
void setAppearance( Appearanceappearance )
70
Construindo formas 3D
Construindo geometrias usando
coordenadas
Construindo geometrias como um jogo de "ligarpontos" Posicione "pontos" nas coordenadas 3D Conecte os pontos para formar as formas 3D Por exemplo, para construir uma pirmide inicie comcinco coordenadas
7/22/2019 Introduo a Programao Com Java 3D
21/155
71
Construindo formas 3D
Construindo geometrias usando
coordenadas
Termine a pirmide conectando os pontos paraformar tringulos
1. 2.
3. 4.
72
Construindo formas 3D
Usando o sistema de coordenadas de mo
direita
As coordenadas 3D so dadas no sistema decoordenadas 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 dafrente renderizado A ordem de numerao do polgono determina quallado a frente Muitos polgonos somente necessitam de um ladorenderizado 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 permetrodo polgono na ordem dada para os vrtices (counter-clockwise) Seu dedo indica a frente do polgono
7/22/2019 Introduo a Programao Com Java 3D
22/155
75
Construindo formas 3D
Definindo vrtices
Um vrticedescreve um canto de um polgono econtm: Uma coordenada 3D Uma cor Uma coordenada textura Um vetor normalde iluminao A coordenada 3D no vrtice necessria, o resto soopcionais
76
Construindo formas 3D
Definindo vrtices
O vrtice normal define a informao da superfciepara iluminao Mas a ordem de giro de coordenadas define opolgono da frente e de verso, ento este ltimo lado retirado Se voc deseja iluminar a sua geometria, voc deveespecificar o vrtice normal de iluminao Normais de iluminao devem ser em unidades decomprimento
77
Construindo formas 3D
Construindo geometrias
Java 3D possui mltiplos tipos de geometrias queusam coordenadas 3D: Pontos, linhas, tringulos; e quadrilteros Texto estrudado 3D Tipo de imagem Raster Construtores geomtricos diferem no que elesconstroem, e como voc indica ao Java 3D para
constru-los Vamos olhar para os pontos, linhas, tringulos; equadrilteros primeiro . . .
78
Construindo formas 3D
Hierarquia da classe GeometryArray
Todos os tipos de geometrias so derivados deGeometry GeometryArrayextende ela para construirpontos, linhas, tringulos; e quadrilteros
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObjectjavax.media.j3d.NodeComponentjavax.media.j3d.Geometryjavax.media.j3d.GeometryArray
7/22/2019 Introduo a Programao Com Java 3D
23/155
79
Construindo formas 3D
Mtodos da classe GeometryArray
Mtodos genricos na classe GeometryArrayfixam 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 aceitamfloat, double, Point3f; e Point3d
Variantes dos mtodos de coordenadas aceitamfloateVector3f
80
Construindo formas 3D
Mtodos da classe GeometryArray
Mtodos genricos na classe GeometryArraytambm fixam cores e coordenadas de textura Sero discutidos na seo aparncia da forma (shapeappearance)
Mtodosvoid setColor( int index, * color )
void setColors( int index, * color)
void setTextureCoordinate( intindex, * texCoord )
void setTextureCoordinates( intindex, * texCoord )
Variantes dos mtodos cor aceitam byte, float,
Color3f, Color4f, Color3b, Color4b; eVector3f Variantes dos mtodos de coordenadas de texturaaceitam float, Point2f; e Point3f
81
Construindo formas 3D
Construindo diferentes tipos de geometria
Existem 14 tipos de disposio de geometriasagrupadas como: Geometrias simples: PointArray, LineArray, TriangleArray, eQuadArray Geometrias limpas: LineStripArray, TriangleStripArray, e
TriangleFanArray Geometrias indexadas simples: IndexedPointArray, IndexedLineArray,IndexedTriangleArray, eIndexedQuadArray Geometrias indexed limpas: IndexedLineStripArray,IndexedTriangleStripArray, eIndexedTriangleFanArray Vamos olhar para os tipos de geometrias simplesprimeiro . . .
82
Construindo formas 3D
Construindo um PointArray
Um PointArrayconstripontos Um ponto para cada vrtice O tamanho dos pontospodem ser controlados pelosatributos de aparncia da
formaHierarquia da Classe
java.lang.Objectjavax.media.j3d.SceneGraphObjectjavax.media.j3d.NodeComponentjavax.media.j3d.Geometryjavax.media.j3d.GeometryArrayjavax.media.j3d.PointArray
7/22/2019 Introduo a Programao Com Java 3D
24/155
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 PointArraye 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 constrilinhas Entre cadaparde vrtices O comprimento e o estilo da
linha podem ser controladaspelos atributos de aparnciada forma
Hierarquia da Classe
java.lang.Objectjavax.media.j3d.SceneGraphObjectjavax.media.j3d.NodeComponentjavax.media.j3d.Geometryjavax.media.j3d.GeometryArrayjavax.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 TriangleArrayconstri tringulos Entre cada triplade vrtices a renderizao pode sercontrolada pelos atributos deaparncia da forma
Hierarquia da Classe
java.lang.Objectjavax.media.j3d.SceneGraphObjectjavax.media.j3d.NodeComponentjavax.media.j3d.Geometryjavax.media.j3d.GeometryArrayjavax.media.j3d.TriangleArray
7/22/2019 Introduo a Programao Com Java 3D
25/155
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 TriangleArraye fixe as coordenadas dos vrtices enormais
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 contriquadrilteros Entre cada qudrupladevrtices
A renderizao pode sercontrolada pelos atributos deaparncia da forma
Hierarquia da Classe
java.lang.Objectjavax.media.j3d.SceneGraphObjectjavax.media.j3d.NodeComponentjavax.media.j3d.Geometryjavax.media.j3d.GeometryArrayjavax.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 Geometriaslimpas (Strip geometry) usam mltiplosvrtices 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 decoordenadas de textura (opcionalmente) Voc fornece a lista de comprimento limpa (striplength list) Cada lista de entrada d o nmero de vrticesconsecutivos para serem ligados
7/22/2019 Introduo a Programao Com Java 3D
26/155
91
Construindo formas 3D
Hierarquia da classe GeometryStripArray
GeometryStripArrayestende GeometryArrayparaconstruir linhas e tringulos limpos
Hierarquia da Classe
java.lang.Objectjavax.media.j3d.SceneGraphObjectjavax.media.j3d.NodeComponentjavax.media.j3d.Geometryjavax.media.j3d.GeometryArrayjavax.media.j3d.GeometryStripArrayjavax.media.j3d.LineStripArrayjavax.media.j3d.TriangleFanArrayjavax.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 osvrtices
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 TriangleFanArraye fixe as coordenadas dos vrtices enormais 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
);
7/22/2019 Introduo a Programao Com Java 3D
27/155
94
Construindo formas 3D
Construindo um TriangleStripArray
Crie listas de coordenadas 3D e normais de iluminao para osvrtices
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 dosvrtices e normais de iluminao
TriangleStripArray myTris = newTriangleStripArray( 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 paralinhas e tringulos adjacentes Geometrias simples e limpas requerem coordenadas,normais de iluminao, cores, e coordenadas detexturas redundantes A geometria indexedusa ndicesjuntamente com alista usual de coordenadas, normais de iluminao, etc.
ndices selecionam coordenadas para usar da sua lista Use a coordenada multiplas vezes, mas fornece-asomente uma Indices tambm so usados para normais deiluminao, cores, e coordenadas de textura
96
Construindo formas 3D
Hierarquia da classe IndexedGeometryArray
IndexedGeometryArray estende GeometryArraypara construirpontos, linhas, tringulos, e quadrilteros IndexedGeometryStripArrayestende IndexedGeometryArraypara construir linhas e tringulos limpos indexed
Hierarquia da Classe
java.lang.Objectjavax.media.j3d.SceneGraphObjectjavax.media.j3d.NodeComponentjavax.media.j3d.Geometryjavax.media.j3d.GeometryArrayjavax.media.j3d.IndexedGeometryArrayjavax.media.j3d.IndexedGeometryStripArrayjavax.media.j3d.IndexedLineStripArrayjavax.media.j3d.IndexedTriangleFanArrayjavax.media.j3d.IndexedTriangleStripArray
javax.media.j3d.IndexedLineArrayjavax.media.j3d.IndexedPointArrayjavax.media.j3d.IndexedQuadArrayjavax.media.j3d.IndexedTriangleArray
7/22/2019 Introduo a Programao Com Java 3D
28/155
7/22/2019 Introduo a Programao Com Java 3D
29/155
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 degeometria, incluindo: Geometria raster, discutida mais tarde Geometria text, discutida nas notas finais (seo 5)
103
Controlando a aparncia
Motivao 104Exemplo 105Hierarquia da classe Appearance 106
Introduzindo os atributos de aparncia 107Hierarquia da classe Appearance attributes 108
Mtodos da classe Appearance 109Usando atributos de cor 110
Mtodos da classe ColoringAttributes 111Um exemplo de cdigo ColoringAttributes 112
Usando atributos de materiais 113Usando cores dos materiais 114
Mtodos da classe Material 115Um exemplo de cdigo atibutos de materiais 116
Usando cores das coordenadas 117Usando ndices de cores das coordenadas 118Colorindo coordenadas 119
Usando atributos de transparncia 120Usando modos de transparncia 121Mtodos da classe TransparencyAttributes 122Um exemplo de cdigo TransparencyAttributes123
Usando atributos de pontos e linhas 124Mtodos da classe PointAttributes 125Mtodos da classe LineAttributes 126Um exemplo de cdigo PointAttributes 127Um exemplo de cdigo LineAttributes 128
Usando atributos de polgonos 129Mtodos da classe PolygonAttributes 130Um exemplo de cdigo PolygonAttributes 131
Usando atributos de renderizao 132Mtodos da classe RenderingAttributes 133Um exemplo de cdigo RenderingAttributes 134
Exemplo de aparncia 135Resumo 136Resumo 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
7/22/2019 Introduo a Programao Com Java 3D
30/155
105
Controlando a aparncia
Exemplo
[ ExAppearance]
106
Controlando a aparncia
Hierarquia da classe Appearance
A classe Appearance especifica como renderizar ageometria da forma
Hierarquia da Classe
java.lang.Objectjavax.media.j3d.SceneGraphObjectjavax.media.j3d.NodeComponentjavax.media.j3d.Appearance
107
Controlando a aparncia
Introduzindo os atributos de aparncia
Os atributos da aparncia so agrupados dentro devrios 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.Objectjavax.media.j3d.SceneGraphObjectjavax.media.j3d.NodeComponentjavax.media.j3d.ColoringAttributesjavax.media.j3d.LineAttributes
javax.media.j3d.PointAttributesjavax.media.j3d.PolygonAttributesjavax.media.j3d.RenderingAttributesjavax.media.j3d.TextureAttributesjavax.media.j3d.TransparencyAttributesjavax.media.j3d.Materialjavax.media.j3d.TexCoordGenerationjavax.media.j3d.Texture
7/22/2019 Introduo a Programao Com Java 3D
31/155
109
Controlando a aparncia
Mtodos da classe Appearance
Mtodos da classe Appearancefixam exatamentequais atributos usar Fixam somente aqueles que voc precisa, partindo orestante dos seus valores default
MtodosAppearance( )
void setColoringAttributes(ColoringAttributescoloringAttributes )
void setMaterial( Material material)
void setTransparencyAttributes(TransparencyAttributestransparencyAttributes )
void setLineAttributes(LineAttributes lineAttributes )
void setPointAttributes(PointAttributes pointAttributes )
void setPolygonAttributes(PolygonAttributes polygonAttributes)
void setRenderingAttributes(RenderingAttributesrenderingAttributes )
110
Controlando a aparncia
Usando atributos de cor
ColoringAttributescontrola: Cor intrnsica (usada quando a iluminao estdesabilitada) Modelo de sombreamento (flat ou Gouraud) Use atributos de cor quando a forma nosombreada Pontos, linhas, e polgonos emissivos
Evite clculos custosos de sombreamento
111
Controlando a aparncia
Mtodos da classe ColoringAttributes
Mtodos da classe ColoringAttributesselecionam a cor e o modelo de sombreamento A cor default branca, e o modelo de sombreamentodefault SHADE_GOURAUD
Mtodos
ColoringAttributes( )
void setColor( Color3f color )void setShadeModel( int model )
Os modelos de sombras incluem: SHADE_FLAT eSHADE_GOURAUD(default) Os modelos de sombra FASTEST e NICEST soselecionados automaticamente como o mais rpido, eos modelos de melhor qualidade ficam disponveis
7/22/2019 Introduo a Programao Com Java 3D
32/155
112
Controlando a aparncia
Um exemplo de cdigo ColoringAttributes
Crie ColoringAttributes para fixar uma cor intrnsica e ummodelo 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
Materialcontrola: 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 colorfixa a principal cor do sombreamento,atenuando (em cima - esquerda) Specular colore shininess factorfazem a formaaparentar brilho (em baixo - direita) Emissive colorfaz a forma aparentar incandescncia(em cima - direita)
115
Controlando a aparncia
Mtodos da classe Material
Mtodos da classe Materialfixam cores desombreamento e ligam e desligam os efeitos deiluminao Os valores defaults incluem cores brancas diffuseespecular, a cor emissivepreta, (0.2,0.2,0.2) a corambient, shininess de 64.0, e iluminao habilitada
MtodosMaterial( )
void setAmbientColor( Color3f color)
void setEmissiveColor( Color3f color)
void setDiffuseColor( Color3f color)
void setSpecularColor( Color3f color)
void setShininess( float shininess)
void setLightingEnable( booleanstate )
7/22/2019 Introduo a Programao Com Java 3D
33/155
116
Controlando a aparncia
Um exemplo de cdigo Material attributes
Crie Materialpara 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 coordenadageomtrica no GeometryArray Cores das coordenadas sobrepe os atributos de cor,na cor diffuse do material
Mtodosvoid 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 ondice de cores em IndexedGeometryArray
Mtodos
void setColorIndex( int index, intvalue )
void setColorIndices( int index,
int[] value )
119
Controlando a aparncia
Colorindo coordenadas
As cores das coordenadas so interpoladas ao longode linhas ou atravs de polgonos
7/22/2019 Introduo a Programao Com Java 3D
34/155
120
Controlando a aparncia
Usando atributos de transparncia
TransparencyAttributescontrola: A quantidade de transparncia (0.0 = opaco, 1.0 =invisvel) O modo de transparncia (screen_door, blend,nenhum)
121
Controlandoaaparncia
U
sandomodosdetransparncia
OmododetransparnciaselecionaentretransparnciasSCREEN_
DOOR
ouBLENDED
SCREEN_
DO
OR
BLENDED
122
Controlando a aparncia
Mtodos da classe TransparencyAttributes
Mtodos da classe TransparencyAttributesfixam a transparncia Por default, a transparncia 0.0 (opaca) com omodo de transparncia FASTEST
Mtodos
TransparencyAttributes( )
void setTransparency( floattransparency )
void setTransparencyMode( int mode)
Os modos de transparncia incluem:SCREEN_DOOR, BLENDED, NONE,FASTEST(default), e NICEST Os modos de transparncia FASTESTeNICESTautomaticamente selecionam os modo maisrpido e o modo de melhor qualidade disponveis
123
Controlando aparncia
Um exemplo de cdigo TransparencyAttributes
Crie TransparencyAttributespara fixar a quantidade detransparncia e o modo
TransparencyAttributes myTA = newTransparencyAttributes( );
myTA.setTransparency( 0.5f );myTA.setTransparencyMode(TransparencyAttributes.BLENDED );
Crie Appearance, fixe os atributos de transparncia, e monte aforma
Appearance myAppear = new Appearance( );myAppear.setTransparencyAttributes( myTA );Shape3D myShape = new Shape3D( myGeom, myAppear);
7/22/2019 Introduo a Programao Com Java 3D
35/155
124
Controlando a aparncia
Usando atributos de pontos e linhas
PointAttributescontrola: Tamanho do ponto (em pixels) Point anti-aliasing
LineAttributescontrola:
A largura da linha (em pixels) O padro de linha Line anti-aliasing
125
Controlando a aparncia
Mtodos da classe PointAttributes
Mtodos da classe PointAttributesselecionama maneira que os pontos so renderizados Por default, o tamanho do ponto 1.0 e o anti-aliasing est desabilitado
MtodosPointAttributes( )
void setPointSize( float size )
void setPointAntialiasingEnable(boolean state )
126
Controlando a aparncia
Mtodos da classe LineAttributes
Mtodos na classe LineAttributesselecionam amaneira 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, ePATTERN_DASH_DOT
127
Controlando a aparncia
Um exemplo de cdigo PointAttributes
Crie PointAttributespara 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);
7/22/2019 Introduo a Programao Com Java 3D
36/155
128
Controlando a aparncia
Um exemplo de cdigo LineAttributes
Crie LineAttributespara 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
PolygonAttributescontrola: 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 daclassePolygonAttributesselecionam a maneiraque os polgonos so renderizados Por default, as faces traseiras so culled, os polgonosso 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 depreenchimento
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);
7/22/2019 Introduo a Programao Com Java 3D
37/155
132
Controlando a aparncia
Usando atributos de renderizao
RenderingAttributescontrola: 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 RenderingAttributescontrolam a maneira que tudo renderizado Por default, o depth buffer est habilitado epermitindo escrita, e a funo alpha test est ALWAYScom o valor 0.0 alpha test
Mtodos
RenderingAttributes( )
void setDepthBufferEnable( booleanstate )
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, eGREATER_OR_EQUAL
134
Controlando a aparncia
Um exemplo de cdigo RenderingAttributes
Crie RenderingAttributespara fixar os modos depth e alpha
RenderingAttributes myRA = newRenderingAttributes( );
myRA.setDepthBufferEnable( false );myRA.setAlphaTestFunction(RenderingAttributes.NEVER );
Crie Appearance, fixe os atributos de renderizao, e monte aforma
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
Unlitpolygons
Unlitlines
Unlit points
7/22/2019 Introduo a Programao Com Java 3D
38/155
136
Controlando a aparncia
Resumo
Appearanceagrupa juntamente os atributos deaparncia 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 GeometryArraye 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 139Introduzindo tipos de agrupamento 140
Hierarquia da classe Group 141Criando grupos 142
Mdodos da classe Group 143Um exemplo de cdigo Group 144
Criando grupos branch (galhos) 145Mtodos da classe BranchGroup 146Um exemplo de cdigo BranchGroup 147
Resumo 148
139
Agrupando formas
Motivao
Recordando que um grafo de cena uma hierarquiade 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
7/22/2019 Introduo a Programao Com Java 3D
39/155
7/22/2019 Introduo a Programao Com Java 3D
40/155
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 Groupe cria um branchgraph (uma ramificao do grafo), o maior ramo nografo de cena Pode ser ligado a um Locale(ouSimpleUniverse) Pode ser compilado Pode ser um filho de qualquer n de agrupamento Pode se separar dos seus pais (se este pai tem aapropriada capacidadehabilitada)
Adicionando um BranchGroupa um Localefazele viver Uma vez vivo ou compilado, as trocas so confinadaspara aqueles habilitados por capacidades
146
Agrupando formas
Mtodos da classe BranchGroup
Em acrscimo aos mtodos do Group,BranchGroupprovm compilao e controle dasociedade
Mtodos
BranchGroup( )
void compile( )
void detach( )
147
Agrupando formas
Um exemplo de cdigo BranchGroup
Construa um localenum 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 groupao locale
myLocale.addBranchGraph( myBranch );
7/22/2019 Introduo a Programao Com Java 3D
41/155
148
Agrupando formas
Resumo
Todos os grupos podem ter filhos, adicionados,inseridos e removidos Todos os grupos podem ter qualquer nmero defilhos Groupfaz mais nada Todos os filhos so renderizados Renderizados em qualquer ordem BranchGrouppode compilar os filhos pararenderizao mais rpida Todos os filhos so renderizados Renderizados em qualquer ordem
149
Transformando formas
Motivao 150Usando sistemas de coordenadas 151
Usando sistemas de coordenadas 152Usando sistemas de coordenadas 153
Criando grupos de transformao 154Hierarquia da classe TransformGroup 155Mtodos da classe TransformGroup 156
Criando uma transformao 3D 157
Hierquia da classe Transform3D 158Mtodos da classe Transform3D 159Conformando pelas restries Transform3D 160
Reestabelecendo uma transformao 161Transladando um sistema de coordenadas 162
Um exemplo de cdigo TransformGroup 163Rotacionando um sistema de coordenadas 164
Um exemplo de cdigo TransformGroup 165Escalonando um sistema de coordenadas 166
Um exemplo de cdigo TransformGroup 167Modificando partes das transformaes 168Transformando vetores e pontos 169Resumo 170
150
Transformando formas
Motivao
Por default, todas formas so construidas dentro deum compartilhado sistema de coordenadas do mundo(world coordinate system) Um TransformGroupconstri um novo sistemade coordenadas para seus filhos, relativoao seu pai Translatepara trocar a posio relativa Rotatepara trocar a orientao relativa
Scalepara trocar o tamanho relativo Podem ser usados combinados As formas construidas no novo sistema decoordenadas so relativas a ele Se voc transladar o sistema de coordenadas, asformas tambm se movem
151
Transformando formas
Usando sistemas de coordenadas
Lembre-se do avio de brinquedo . . . suas partes socontrudas cada uma, em seu prprio sistema de coordenadas
7/22/2019 Introduo a Programao Com Java 3D
42/155
152
Transformando formas
Usando sistemas de coordenadas
Essas partes so montadas, conduzindo a forma filhadentro 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 arbitrariamenteaninhadaspara incluir um TransformGroupdentro de outro
Transformaes "fecham" a geometria (aninhandoem profundidade no grafo de cena) so aplicadasprimeiro
155
Transformando formas
Hierarquia da classe TransformGroup
TransformGroupestende Groupe constri umsistema de coordenadas para seus filhos
Hierarquia da Classe
java.lang.Objectjavax.media.j3d.SceneGraphObjectjavax.media.j3d.Node
javax.media.j3d.Groupjavax.media.j3d.BranchGroupjavax.media.j3d.OrderedGroupjavax.media.j3d.DecalGroup
javax.media.j3d.SharedGroupjavax.media.j3d.Switchjavax.media.j3d.TransformGroup
7/22/2019 Introduo a Programao Com Java 3D
43/155
7/22/2019 Introduo a Programao Com Java 3D
44/155
160
Transformando formas
Conformando pelas restries
Transform3D
Uma transformao 3D deve ser affine No h uma diviso homognea equivalente aperspectiva, tal como para os espaos hiperblicos
Uma transformao 3D deve ser congruente se usadoem um TransformGroupacima de umaViewPlatform
No escalamento no-uniformedo ponto de vista(viewpoint)ViewPlatformser discutido mais adiante nocurso
161
Transformando formas
Reestabelecendo uma transformao
Reestabelecendo a transformao para indentidadefaz 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 suasformas Uma direoVector3d 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 formaTransformGroup myGroup = new TransformGroup( );
myGroup.setTransform( myTrans3D );myGroup.addChild( myShape );
7/22/2019 Introduo a Programao Com Java 3D
45/155
164
Transformando formas
Rotacionando um sistema de coordenadas
A rotao orienta o sistema de coordenadas e suasformas Rotacione sobre X, Y, ou Z por um ngulo Rotacione sobre um eixo arbitrrio
Mtodosvoid 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 30graus (0.52 radianos)
Transform3D myTrans3D = new Transform3D( );myTrans3D.rotZ( 0.52 ); // 30 degrees
Crie um grupo de transformao (transform group), estabelea atransformao, 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 decoordenadas e suas formas Use uma fator de escala individual para umescalonamento uniforme Use fatores de escala X, Y, e Z para umescalonamento no uniforme
Mtodosvoid 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 formaTransformGroup myGroup = new TransformGroup( );
myGroup.setTransform( myTrans3D );myGroup.addChild( myShape );
7/22/2019 Introduo a Programao Com Java 3D
46/155
168
Transformando formas
Modificando partes das transformaes
Modifiquepartesde uma transformao existente Abandone o resto da transformao no afetada Usadas para combinar translaes, rotaes, eescalonamento
Mtodosvoid 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 ascoordenadas de geometria e vetores atravs de cadaTransform3D Voc pode usar os mtodos Transform3Dparafazer este processamento nos seus prprios pontos e
vetores
Mtodos
void transform( Point3d inout )
void transform( Point3d in, Point3dout )
void transform( Vector3d inout )
void transform( Vector3d in,Vector3d out )
170
Transformando formas
Resumo
Transform3D descreve translao, rotao eescalonamento
Uma transformao pode ser construida a partir deuma matriz 4x4, ou por mtodos de ajuda
TransformGroup cria um novo sistema de
coordenadas para seus filhos, transformados por umTransform3D Todos os filhos so renderizados Renderizados em qualquer ordem
171
Usando grupos de finalidades especiais
Motivao 172Hierarquia da classe Group 173
Criando grupos ordenados (ordered) 174Criando grupos decalque (decal) 175
Mtodos das classes OrderedGroup e DecalGroup 176Um exemplo de cdigo DecalGroup 177
Criando grupos switch 178Mtodos da classe Switch 179Selecionando um filho switch 180Um exemplo de cdigo Switch 181Um exemplo de cdigo Switch 182
Um exemplo de cdigo Switch 183Um exemplo Switch 184
Criando grupos compartilhados (shared) 185Exemplo 186
Ligando aos grupos compartilhados 187Hierarquia das classes SharedGroup e Link 188
Mtodos da classe SharedGroup 189Mtodos da classe Link 190
Um exemplo de cdigo SharedGroup 191Um exemplo SharedGroup 192
Resumo 193Resumo 194Resumo 195
7/22/2019 Introduo a Programao Com Java 3D
47/155
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 daclasse Group
Hierarquia da Classe
java.lang.Object
javax.media.j3d.SceneGraphObjectjavax.media.j3d.Nodejavax.media.j3d.Groupjavax.media.j3d.BranchGroupjavax.media.j3d.OrderedGroupjavax.media.j3d.DecalGroup
javax.media.j3d.SharedGroupjavax.media.j3d.Switchjavax.media.j3d.TransformGroup
174
Usando grupos de finalidades especiais
Criando grupos ordenados (ordered)
Um OrderedGroupestende Groupe garante queseus filhos so renderizados na ordem doprimeiro aoltimo Ao contrrio de Group, BranchGroup, etc.
175
Usando grupos de finalidades especiais
Criando grupos decalque (decal)
DecalGroupestende OrderedGroupe renderizafilhos na ordemprimeiro 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 pistade decolagem do aeroporto) Bom para evitar artefatos de luta (Z-fightingartifacts)
7/22/2019 Introduo a Programao Com Java 3D
48/155
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 superfciebsica
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
Switchestende Group e seleciona nenhum, um oumltiplos filhos para renderizar ou processar A escolha do filho pode ser por um nmero, ou porum 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 emqualquer ordem
179
Usando grupos de finalidades especiais
Mtodos da classe Switch
Em adio aos mtodos da classe Group, osmtodos da classe Switchhabilitam o controle derenderizao 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 seremtrocados enquanto ele estiver vivo ou compilado
7/22/2019 Introduo a Programao Com Java 3D
49/155
180
Usando grupos de finalidades especiais
Selecionando um filho switch
Selecione qual filho a ser renderizado por: Passando seu ndice de filho parasetWhichChild( ) Ou passando valores especiais: No renderizando filhos: CHILD_NONE Renderizando todos os filhos: CHILD_ALL
Ouselecionando um conjunto de filhos com um bitmask Um valor de CHILD_MASKhabilita o uso demscara Estabelea um membro de Java BitSet para cadafilho 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 );
7/22/2019 Introduo a Programao Com Java 3D
50/155
184
Usando grupos de finalidades especiais
Um exemplo Switch
[ ExSwitch ]
185
Usando grupos de finalidades especiais
Criando grupos compartilhados (shared)
SharedGroupestende Grouppara criar um grupode formas que podem ser compartilhadas (usasmltiplas 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 SharedGroupafetam todas asreferncias a ele
Podem ser compilados anteriormente a referenci-loem 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
7/22/2019 Introduo a Programao Com Java 3D
51/155
188
Usando grupos de finalidades especiais
Hierarquia das classes SharedGroup e
Link
Linkestende Leafpara um ponto doSharedGroup
Hierarquia da Classe
java.lang.Objectjavax.media.j3d.SceneGraphObjectjavax.media.j3d.Nodejavax.media.j3d.Leafjavax.media.j3d.Link
189
Usando grupos de finalidades especiais
Mtodos da classe SharedGroup
Em adio aos mtodos da classe Group,SharedGroupadiciona mtodos de compilao
Mtodos
SharedGroup( )
void compile( )
190
Usando grupos de finalidades especiais
Mtodos da classe Link
Mtodos na classe Link selecionam os gruposcompartilhados para serem ligados
Mtodos
Link( )
Link( SharedGroup group )
void setSharedGroup( SharedGroupgroup )
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 SharedGroupe adicione as formas a ele
SharedGroup myShared = new SharedGroup( );myShared.addChild( myShape );
Compile o SharedGrouppara 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 );
7/22/2019 Introduo a Programao Com Java 3D
52/155
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 defilhos Groupfaz nada mais que Todos filhos renderizados Renderizados em alguma ordem BranchGrouppode compilar seus filhos para umarenderizao 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 dasformas em cima de uma forma bsica Todos filhos renderizados Renderizados na ordem do primeiro para o ltimo Switchseleciona nenhum, um, ou mltiplos filhospara renderizar ou processar Seleciona os filhos a serem renderizados Renderizam em alguma ordem
195
Usando grupos de finalidades especiais
Resumo
SharedGroupcria um grupo de formascompartilhadas Todos filhos renderizados, se o grupo referenciadopor um n vivo link Renderizados em alguma ordem Os ns SharedGroup nunca so localizadosdiretamente no grafo de cena vivo
Pontos Linkpara o grupo compartilhado para umgrafo de cena vivo Qualquer nmero de ligaes para o mesmo grupocompartilhado
7/22/2019 Introduo a Programao Com Java 3D
53/155
196
Introduzindo mapeamento de texturas
Motivao 197Exemplo 198Usando atributos de aparncia de texturas 199
Usando atributos de aparncia de texturas 200Hierarquia da classe Texture 201Mtodos da classe Texture 202Um exemplo de cdigo Texture2D 203Um exemplo de textura 204
Preparando para mapeamento de texturas 205Hierarquia da classe ImageComponent 206Mtodos da classe ImageComponent2D 207
Carregando imagens de texturas 208Um exemplo de cdigo TextureLoader 209Um exemplo TextureLoader 210
Resumo 211
197
Introduzindo mapeamento de texturas
Motivao
Voc pode modelar todos detalhes de cada forma 3Dda sua cena Isto requer uma soma enorme de esforo demodelagem 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 degeometrias 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 deatributos visuais mltiplos para uma forma Controle de cor e transparncia (discutidos na seoanterior) Material ColoringAttributes TransparencyAttributes
Controle de renderizao (discutidos na seoanterior) PointAttributes LineAttributes PolygonAttributes RenderingAttributes Controle de textura Texture TextureAttributes TexCoordGeneration
7/22/2019 Introduo a Programao Com Java 3D
54/155
200
Introduzindo mapeamento de texturas
Usando atributos de aparncia de texturas
Os controles de atributos de textura esto divididosentre poucos componentes de ns Texture Seleciona a imagem da textura e controla os atributosbsicos de mapeamento TextureAttributes Controla oa atributos de mapeamento avanados TexCoordGeneration Automaticamente geram coordenadas de textura, sevoc no as forneceu (muitos usurios fornecem suasprprias)
201
Introduzindo mapeamento de texturas
Hierarquia da classe Texture
Texture a classe bsica para dois componentesde n que selecionam a imagem para ser usada Texture2D:uma imagem padro 2D Texture3D: um volume de imagens 3D
Hieraruia da Classejava.lang.Objectjavax.media.j3d.SceneGraphObjectjavax.media.j3d.NodeComponentjavax.media.j3d.Texturejavax.media.j3d.Texture2Djavax.media.j3d.Texture3D
202
Introduzindo mapeamento de texturas
Mtodos da classe Texture
Mtodos nas classes Texturee Texture2Dselecionam a imagem, e mudam o mapeamento detexturas 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 Appearancee coloque a textura nela
Appearance myAppear = new Appearance( );myAppear.setTexture( myTex );
Monte a forma
Shape3D myShape = new Shape3D( myText, myAppear);
7/22/2019 Introduo a Programao Com Java 3D
55/155
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 TextureLoaderpara carregar aquele arquivo Um ImageComponentpara conter a imagemcarregada O qual usado mudado no padroBufferedImage
206
Introduzindo mapeamento de texturas
Hierarquia da classe ImageComponent
ImageComponent a base da classe para doisrecipientes de imagens: ImageComponent2D pega uma imagem 2D ImageComponent3D pega um volume de imagens 3D
Hierarquia da Classe
java.lang.Objectjavax.media.j3d.SceneGraphObjectjavax.media.j3d.NodeComponentjavax.media.j3d.ImageComponentjavax.media.j3d.ImageComponent2Djavax.media.j3d.ImageComponent3D
207
Introduzindo mapeamento de texturas
Mtodos da classe ImageComponent2D
Mtodos da classe ImageComponent2Destabelecem a imagem a ser colocada
Mtodos
ImageComponent2D( int format,BufferedImage image )
void set( BufferedImage image )
7/22/2019 Introduo a Programao Com Java 3
Top Related