Atenção: esse artigo tem um vídeo complementar. Clique e assista!

Artigo no estilo: Curso

De que se trata o artigo:

Esta é a primeira parte de uma série de três artigos que tratam do desenvolvimento de animações e jogos 3D em Java. Neste artigo, será apresentada uma introdução a API Java 3D, principalmente no que se refere às classes e recursos relacionados à produção e tratamento de objetos geométricos, animações e interação com o usuário.


Para que serve:

Para o estudo das principais classes e recursos da API Java 3D, e como guia para empregá-la na criação de animações e jogos 3D em Java.

Em que situação o tema útil:

O tema é relevante tanto para desenvolvedores que desejam ampliar e tornar mais interessantes os cenários de interação de suas aplicações, quanto para aqueles que desejam desenvolver animações e jogos com interfaces gráficas tridimensionais.

Desenvolvimento 3D em Java:

O uso de interfaces gráficas tridimensionais tem se tornado cada vez mais frequente em aplicações de diferentes áreas, sendo considerado por muitos, uma das principais características de sites e aplicações Web em um futuro próximo. A produção de interfaces 3D em Java pode ser feita através de várias APIs, como Java 3D, JOGL, jMonkeyEngine, ogre4j, entre outras. Neste artigo, o primeiro de uma série de três, será apresentada uma introdução a API Java 3D e será desenvolvido um cubo mágico (Rubik’s cube), controlado pelo mouse e teclado, com o intuito de exemplificar os principais recursos da API relacionados a geometrias, animação e interação com o usuário.
Autores: Leandro Luque e Rodrigo Rocha Silva

O interesse de usuários e desenvolvedores de software por interfaces mais amigáveis, intuitivas e com melhor interatividade vem aumentando rápida e continuamente nos últimos anos, o que pode ser observado pela crescente atenção voltada para conceitos de ergonomia e usabilidade, bem como para tecnologias como JavaFX, Adobe Flex, Microsoft Silverlight, Ajax, sensores de movimento e toque, realidade aumentada, entre outras.

Neste contexto, interfaces gráficas tridimensionais (3D) desempenham um papel importante, uma vez que, se utilizadas com bom senso, bem planejadas e desenvolvidas, ampliam e tornam mais interessantes os cenários de interação de uma aplicação.

Em aplicações com fins educativos, ou que podem ser empregadas com esse fim, o uso de recursos tridimensionais pode ampliar as perspectivas da relação entre professores, estudantes e objetos de estudo. Para chegar a tal conclusão, basta comparar o potencial de uso, em aulas de geografia, de alguns atlas eletrônicos antigos, como o PC Globe – alguém se lembra dele? –, com ferramentas como o Google Earth ou Virtual Earth.

Para profissionais como engenheiros ou arquitetos, o uso de aplicações que permitem a produção de modelos tridimensionais – como AutoCAD ou SketchUp – traz a possibilidade de simulação e visualização de peças, estruturas ou imóveis, antes da sua produção.

No caso de jogos, as interfaces gráficas tridimensionais tornaram-se um requisito para a maioria dos usuários – afinal, são poucos hoje os adeptos dos antigos jogos bidimensionais (2D) no estilo Atari, embora eles despertem uma certa nostalgia.

Em outros tipos de aplicação, como comércios eletrônicos, o potencial de uso de interfaces gráficas tridimensionais poderia ser mais explorado, como para a criação de showrooms de produtos ou de ambientes virtuais para interação entre clientes.

Muitos entusiastas e personalidades da história da Web, como seu inventor, Tim Berners-Lee, acreditam em uma Web tridimensional em um futuro próximo, na qual as atuais páginas “planas” serão substituídas por ambientes virtuais interativos. Iniciativas como ExitReality (www.exitreality.com), RocketOn (www.rocketon.com/a/intro.php) e Club Cooee (www.clubcooee.com) são exemplos do que, em breve, pode-se esperar da Web.

Portanto, o conhecimento de conceitos, técnicas e tecnologias para o desenvolvimento de aplicações 3D é hoje importante para designers e desenvolvedores ampliarem as possibilidades de interação de suas aplicações e buscarem Interfaces Humano-Computador (IHC) melhores e mais criativas.

O desenvolvimento de interfaces gráficas tridimensionais em Java pode ser feito através de várias APIs, como Java 3D, LWJGL (Lightweight Java Game Library), JOGL (Java Binding for OpenGL), jMonkeyEngine, ogre4j, Espresso3D, Xith3D, entre outras.

Neste artigo, o primeiro de uma série de três, será apresentada uma introdução a API Java 3D. Serão abordadas nesta introdução as principais classes e recursos relacionados à produção e tratamento de objetos geométricos, animações e interação com o usuário. No segundo artigo, será estudado mais sobre animação e interação com o usuário, como também recursos relacionados à visualização, ao carregamento de modelos tridimensionais e a aparência de geometrias, bem como será iniciado o desenvolvimento de um jogo. Por fim, no último artigo, o jogo será finalizado e a API Java 3D será comparada com algumas outras APIs que podem ser utilizadas para o desenvolvimento de aplicações tridimensionais em Java.

Java 3D

Atualmente na versão 1.5.2, a API Java 3D já possui mais de 12 anos. Embora já tenha sido “congelada” mais de uma vez – a última em 2008, quando a Sun anunciou o “congelamento” do projeto para dedicar-se ao JavaFX –, é inadequado considerá-la obsoleta, pois trata-se de uma API madura e robusta, que provavelmente será a base para a produção de gráficos tridimensionais em JavaFX.

A versão atual da API tem duas variantes: uma implementada sobre o OpenGL e outra sobre o DirectX. Por padrão, a renderização é feita pelo OpenGL, embora possa ser configurada a renderização através do DirectX. A partir da versão 1.5, foi adicionado suporte para renderização através do JOGL, API Java que executa sobre o OpenGL.

Não é necessário conhecer OpenGL ou DirectX para iniciar o desenvolvimento em Java 3D.

Instalação

A versão 1.5.2 da API Java 3D está disponível para os sistemas Solaris (tanto SPARC, quanto x86/amd64), Linux (tanto x86, quanto amd64), Windows (tanto x86, quanto amd64) e Apple OS X (tanto PPC, quanto x86), conforme requisitos mínimos especificados na Tabela 1. Para todos os sistemas operacionais listados, é necessária a versão do JDK 1.5.0 ou posterior.

Sistema Operacional

Vídeo (Hardware e Software)

Solaris SPARC 9 ou posterior

Frame Buffer com suporte a OpenGL 1.3 ou posterior (OpenGL 1.2 irá funcionar com limitações na funcionalidade de mapeamento de texturas);

• OpenGL 1.3 ou posterior para Solaris (www.sun.com/software/graphics/opengl/).

Solaris x86/amd64 10 ou posterior

• NVidia Frame Buffer com suporte a OpenGL 1.3 ou posterior.

Linux x86/amd64

• Adaptador gráfico com suporte à extensão GLX 1.3 ou posterior e a OpenGL 1.3 ou posterior (OpenGL 1.2 irá funcionar com limitações na funcionalidade de mapeamento de texturas).

Windows 2000, XP (x86/amd64) ou Vista

• Adaptador gráfico com suporte a OpenGL 1.3 ou posterior ou Directx 9.0 ou posterior.

Mac OS X (PPC/x86) 10.3 ou posterior (10.4 para sistemas Apple baseados em Intel)

• Suporte a OpenGL 1.3 ou posterior;

• Java Binding for OpenGL (JOGL).

Tabela 1. Requisitos mínimos para a versão 1.5.2 da API Java 3D.

Para utilizá-la, desenvolvedores devem copiar a API do site https://java3d.dev.java.net/, onde estão disponíveis versões executáveis e compactadas para várias plataformas. Para instalá-la através da versão executável, basta seguir os passos da instalação.

Além da opção de desenvolver programaticamente uma aplicação Java 3D, ferramentas como J3DWorkbench (http://eclectic3d.net/), Jake 2 (http://bytonic.de/html/jake2.html) e J3DEditor (https://j3dfly.dev.java.net/) podem ser utilizadas como IDEs para desenvolver aplicações, sem que seja necessário escrever código – ou escrevendo pouco código. Nesta série de artigos, para que o leitor possa conhecer melhor a API, não será adotada nenhuma IDE.

Características

Java 3D é uma API que permite a criação de aplicações Java que fazem uso de recursos tridimensionais através do uso de uma hierarquia de classes com alto nível de abstração, não exigindo do desenvolvedor conhecimento sobre detalhes de implementação de hardware gráfico ou de algoritmos de computação gráfica.

As classes principais da API encontram-se no pacote javax.media.j3d, conhecido como Java 3D core. Outras classes utilitárias importantes são encontradas no pacote com.sun.j3d, conhecido como Java 3D utility.

Para permitir a criação de animações e jogos, a configuração padrão da API cria vários threads – definidos, por padrão, com prioridade 5 –, que gerenciam, entre outras coisas, a interação com o usuário e a atualização da interface gráfica. Assim sendo, o desenvolvedor não precisa se preocupar com esses aspectos, ficando isso sob a responsabilidade da API.

A definição da thread que executará em um determinado momento dá-se a partir da comparação das prioridades das threads existentes: aquelas com maior prioridade, têm preferência na execução.

A integração do Java 3D com interfaces AWT e Swing, bem como com o JavaFX (www.interactivemesh.org/testspace/j3dmeetsjfx.html) se dá sem maiores problemas. A API fornece uma classe, Canvas3D (subclasse de java.awt.Canvas), que pode ser adicionada a um container, como um JFrame. Por tratar-se de um componente pesado (heavyweight), deve-se ter cautela quanto ao posicionamento de componentes Swing leves (lightweight) sobre um Canvas3D. Nos próximos artigos da série, detalhes sobre renderização, criação de aplicações em janela cheia e o objeto Canvas3D serão abordados.

A seguir, é apresentada a estrutura básica de um programa Java 3D.

Estrutura da API

O primeiro passo na codificação de uma aplicação Java 3D é a criação de um universo virtual, representado pela classe VirtualUniverse ou uma de suas subclasses. Um universo virtual representa um espaço tridimensional onde podem ser inseridos diversos elementos, como objetos e suas geometrias – carros, pessoas, árvores, terrenos, etc. –, luzes, comportamentos, sons, entre outros.

Um universo virtual e seus elementos constituintes podem ser representados através de um grafo – estrutura composta por vértices e arestas (Figura 1) – hierárquico, conhecido como grafo de cena (scene graph). Os vértices deste grafo compreendem os diferentes elementos que compõem o universo, enquanto as arestas compreendem os relacionamentos entre estes elementos (Figura 2).

Assim sendo, diz-se que o modelo de programação do Java 3D é baseado em grafos de cena. Muitas APIs também seguem esse mesmo modelo.

Figura 1. Exemplo de grafo com quatro vértices e quatro arestas.

Figura 2. Representação dos principais elementos constituintes de um universo virtual em um grafo hierárquico de cena.

A notação utilizada na Figura 2 é convencionalmente adotada na representação de grafos de cena e permite uma visão geral da estrutura e organização dos elementos em um universo virtual, cada qual sendo representado com uma notação específica. Além do universo virtual, os principais componentes de um grafo de cena são locais, nós grupo, nós folha, entre outros. A seguir, cada um desses elementos será estudado.

Locale

O elemento que aparece logo abaixo do universo virtual no grafo de cena e está a ele diretamente relacionado é um local (classe Locale), definição de uma coordenada de alta precisão em relação a qual os elementos de um universo são posicionados.

A classe Locale foi criada para permitir o posicionamento preciso de elementos em universos virtuais nos quais existem tanto elementos próximos, quanto muito distantes. Sua utilidade pode ser verificada através de um exemplo: caso fosse necessário representar, em um mesmo universo virtual, um carro na Terra e um ET em um planeta de uma galáxia muito distante ( ...

Quer ler esse conteúdo completo? Tenha acesso completo