Introdução a Programação Com Java 3D

download Introdução a Programação Com Java 3D

of 155

Transcript of Introdução a Programação Com Java 3D

  • 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

    [email protected]

    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

    [email protected]

  • 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