320 likes | 420 Views
Tópicos de Informática Avançada II. Processo de Desenvolvimento de Ambientes Virtuais Java3D Prof. Régis Albuquerque. Criação de Ambientes Virtuais.
E N D
Tópicos de Informática Avançada II • Processo de Desenvolvimento de Ambientes Virtuais • Java3D Prof. Régis Albuquerque
Criação de Ambientes Virtuais • Para criar um mundo virtual interativo, é necessário modelar um ambiente composto por múltiplos objetos e habilitá-los com características virtuais. • A maioria dos sistemas de construção de mundos virtuais compartilha alguns conceitos básicos e permitem aos desenvolvedores criar simulações bastante realistas.
JAVA3D • Java 3D é uma API 2D e 3D para a linguagem Java baseada em grafos de cena. • Foi construída tendo como base o OpenGL. • o Java 3D tem a preocupação de possibilitar a utilização de conceitos da POO, como o Polimorfismo, para a criação da aplicações em ambientes tridimensionais. • O grafo de cena é estruturado como uma árvore contendo vários elementos que ditam o modo como a cena será construída e exibida, além de comportamentos que poderão ser observados ao longo do tempo (como animações, respostas a interação do usuário, colisões, etc).
JAVA3D - INTRODUÇÃO JAVA: • Linguagem de programação • Orientada a objetos • Independente de arquitetura (multiplataforma) • Portável • Robusta • Segura • Interpretada • Etc...
JAVA3D - INTRODUÇÃO JAVA • Compilada e interpretada • O compilador transforma o programa em bytecodes (instruções de máquina compreendidas pela Java Virtual Machine) • O interpretador transforma os bytecodes em linguagem de máquina
JAVA3D - INTRODUÇÃO • Plataforma • Ambienteonde um programa é executado, incluindo software e hardware • Como plataforma, Java possuidoiscomponentes • JVM (Java Virtual Machine - interpretador Java - runtime Java) • API (Java Application Programming Interface)
JAVA3D - INTRODUÇÃO • Java Media Framework API • Suporta tecnologias gráficas e multimídia • Áudio • Vídeo • 2D • Animação • 3D • Um dos componentes da API Java Standard Extension é Java 3D
JAVA3D - INTRODUÇÃO • O que é a API Java 3D? • Hierarquia de classes Java • Interface para o desenvolvimento de sistemas gráficos tridimensionais • Construtores de alto nível • Criação e manipulação de objetos geométricos, especificados em um universo “virtual” • Grande flexibilidade para criar universos virtuais • Representação de cenas: “grafo de cena” • Detalhes de rendering gerenciados automaticamente
JAVA3D - INTRODUÇÃO • Programa Java 3D • Cria objetos Java 3D e posiciona-os em um grafo de cena • Grafo de cena • Combinação de objetos 3D em uma estrutura de árvore • Especifica o conteúdo do universo virtual e como este é visualizado
JAVA3D - INTRODUÇÃO Programas Java 3D podem ser escritos como • Aplicação • Applet • Suporte para Java 3D nos navegadores está disponível através de um plugin que pode ser obtido no site da Sun (java.sun.com) • Ou ambas • Classe MainFrame
JAVA3D - HISTÓRICO • Idéia • Construir uma API que fosse independente de plataforma • “Prima” de VRML • Alguns componentes familiares • Muitos componentes novos • 1998
JAVA3D - HISTÓRICO • Especificação da API Java 3D • Intel, Silicon Graphics, Apple e Sun Microsystems • Sun colocou a sua implementação para download • Java 3D • Baseada em OpenGL e Direct3D (depende da plataforma na qual o programa é executado)
JAVA3D – APLICAÇÕES • Exemplos de aplicações onde Java 3D é usado • Desenvolvimento de jogos • Comércio eletrônico • Visualização 3D dos produtos • Loja virtual • Representação 3D • Interação • Visualização de dados • Elaboração de interfaces
JAVA3D – GRAFO DE CENA • Uma aplicação Java 3D é projetada a partir de um grafo de cena • Grafo de cena: • Possibilita a criação de um universo virtual • Simples de construir • Não é necessário ter experiência em programação 3D • Contém obejtos gráficos • Geometria, luz, som, entre outros
GRAFO DE CENA - DENIFIÇÃO • Consiste em objetos 3D (nodes) organizados em uma estrutura do tipo árvore, composta de: • Nodos (ou vértices): instâncias das classes Java 3D • Arcos (ou arestas): relacionamento entre as instâncias. • Relacionamentos: • Pai-Filho • Nodo do tipo grupo (pode ter um ou mais filhos, mas apenas um pai) • Nodo do tipo folha (não pode ter filhos e tem apenas um pai) • Referência • Associa um objeto com o grafo de cena
PRIMEIRO PROGRAMA JAVA3D • Passos para a criação do grafo de cena • Criar um objeto GraphicsConfiguration • Criar um objeto Canvas3D • Construir e compilar pelo menos um subgrafo de conteúdo • Criar um objeto SimpleUniverse, que referencie o objeto Canvas3D criado e automaticamente cria os objetos VirtualUniverse e Locale,e contrói o subgrafo de visualização • Inserir o sub-grafo de conteúdo no universo virtual
OláUniverso – Biliotecas • import java.applet.Applet; • import java.awt.BorderLayout; • import java.awt.GraphicsConfiguration; • import com.sun.j3d.utils.applet.MainFrame; • import com.sun.j3d.utils.geometry.ColorCube; • import com.sun.j3d.utils.universe.*; • import javax.media.j3d.*; • import javax.vecmath.*;
OlaUniverso – Corpo da Classe public class OlaUniverso extends Applet { public BranchGroupcriaGrafoCena() { ... } public OlaUniverso() { ... } public static void main(String[] args) { new MainFrame(new OlaUniverso(), 256,256); } }
OlaUniverso – criaGrafoCena() public BranchGroupcriaGrafoCena() { BranchGroupobjRoot = new BranchGroup(); Transform3D rotateY = new Transform3D(); rotateY.rotY(.6); TransformGroupobjTrans = new TransformGroup(rotateY); objRoot.addChild(objTrans); objTrans.addChild(new ColorCube(0.4)); objRoot.compile(); return objRoot; }
OlaUniverso – OlaUniverso() public OlaUniverso() { setLayout(new BorderLayout()); GraphicsConfigurationconfig = SimpleUniverse.getPreferredConfiguration(); Canvas3D c = new Canvas3D(config); add("Center", c); SimpleUniverse u = new SimpleUniverse(c); BranchGroup scene = criaGrafoCena(); u.getViewingPlatform().setNominalViewingTransform(); u.addBranchGraph(scene); }
SIMPLEUNIVERSE • Uma das classes mais importantes é a SimpleUniverse; • É responsável pela configuração de um ambiente mínimo para executar um programa Java 3D; • Fornece as funcionalidades necessárias para a maioria das aplicações. • Quando uma instância de SimpleUniverse é criada automaticamente são criados todos os objetos necessários para o sub-grafo de visualização, tais como Locale, ViewingPlatform e Viewer.
GRAPHICSCONFIGURATION • GraphicsConfiguration é uma classe que faz parte do pacote awt • É responsável pela descrição das características do dispositivo gráfico (impressora ou monitor). • Sua estrutura varia de plataforma para plataforma fornecendo, por exemplo, a resolução do dispositivo.
CANVAS3D • A classe Canvas3D fornece o canvas ou seja, uma área de desenho, onde é realizada a visualização 3D.
BRANCHGROUP • A classe BranchGroup serve como ponteiro para a raiz de um sub-grafo de cena; • Instâncias desta classe são os únicos objetos que podem ser inseridos em Locale. • Um sub-grafo de cena que tem um BranchGroup como raiz pode ser considerado como uma compile unit. • Pode ser compilado, inserido em um universo virtual (associando-o com Locale) e desassociado deste universo em tempo de execução.
Transform3D e TransformGroup • As transformações geométricas de escala, rotação e translação, são especificadas através de uma instância de Transform3D • Uma instância de Transform3D representa uma matriz 4x4 de números reais (float). • Objetos da classe TransformGroup, por sua vez, especificam uma transformação, através de um objeto Transform3D, que será aplicada a todos os seus filhos. • Ao serem aplicadas as transformações, deve-se considerar que os efeitos num grafo de cena são cumulativos.
BoundingSphere • A classe BoundingSphere define uma região (ou volume) limitada por uma esfera que é especificada a partir de um ponto central e um raio. • A esfera é associada com o limite para o objeto RotatorInterpolator, que é usado para fazer a animação do cubo.
Exercício • Criação de Grafo de Cena do Ambiente Virtual Idealizado.