Você está na página 1de 4

Objetivos

Neste captulo, voc vai aprender a:


O
Usar GLSurfaceView e implementar um Renderer
para exibir uma renderizao OpenGL ES.
O
Usar os objetos ByteBuffer e FloatBuffer do pa-
cote java.nio para armazenar informaes sobre as
figuras a renderizar.
Aplicativo 3D Art
Renderizao em 3D com OpenGL ES
18
2 Android para Programadores
18.1 Introduo
O aplicativo Art (Fig. 18.1) mostra um cubo, uma pirmide ou um prisma retangular tri-
dimensional. Usando controles na tela do painel rolante esquerda, voc pode escolher o
tamanho e a rotao da figura atualmente selecionada, selecionar a figura a ser desenhada
e escolher a cor da figura selecionada (multicolorida, vermelha, verde ou azul). Com-
ponentes Seekbar mudam a rotao em torno dos eixos x, y e z e o tamanho da figura.
Inicialmente, a figura multicolorida, mas componentes RadioButton permitem mudar
a sua cor.
18.2 Teste do aplicativo Art
Abrindo e executando o aplicativo
Abra o Eclipse e importe o projeto do aplicativo Art. Para importar o projeto:
1. Selecione File > Import para exibir a caixa de dilogo Import.
2. Expanda o n General, selecione Existing Projects into Workspace e, em seguida,
clique em Next >.
3. direita do campo de texto Select root directory:, clique em Browse e, em seguida,
localize e selecione a pasta Art.
Clique em Finish para importar o projeto.
Mudando a figura
Mude a figura usando os componentes RadioButton na parte esquerda do aplicativo. Ajuste
o tamanho e a rotao da figura usando os controles da Seekbar. Role para baixo at a rea
dos controles para mudar a cor da figura, usando os componentes RadioButton de cor.
18.1 Introduo
18.2 Teste do aplicativo Art
18.3 Viso geral das tecnologias
Fig. 18.1 | Aplicativo 3dArt mostrando um cubo girado.
R
e
s
u
m
o
Captulo 18 Aplicativo 3D Art 3
18.3 Viso geral das tecnologias
GLSurfaceView
A Activity principal do aplicativo Art usa GLSurfaceView para renderizar uma cena. Cada
cena pode conter muitas figuras este aplicativo mostra uma cena que consiste em uma
figura por vez. Os elementos GLSurfaceView usam objetos que implementam a interface
GLSurfaceView.Renderer (ShapeRenderer neste aplicativo) para renderizar (isto , dese-
nhar) elementos grficos OpenGL no elemento GLSurfaceView.
GLSurfaceView.Renderer
A classe ShapeRenderer deste aplicativo implementa a interface GLSurfaceView.Renderer
para especificar como a cena ser renderizada. Cada figura que desenhamos gerencia suas
prprias configuraes de cor e tamanho, sendo que a rotao da cena gerenciada por
ShapeRenderer. O mtodo sobrescrito onDrawFrame de GLSurfaceView.Renderer recebe au-
tomaticamente um objeto que implementa a interface GL10, a qual contm constantes e
mtodos para exibir e gerenciar cenas. O mtodo onDrawFrame primeiramente limpa a tela
e zera todas as rotaes anteriores. Ento, o mtodo gira a cena inteira, usando o mtodo
glRotatef do objeto GL10. Em seguida, o mtodo onDrawFrame passa o objeto GL10 para o
mtodo draw do objeto Shape atual para que cada Shape possa renderizar a si mesmo no
elemento SurfaceView.
Figuras
Especificamos os atributos comuns de cubos, pirmides e prismas retangulares por
exemplo, cor e tamanho em uma classe abstract Shape. Cada subclasse de Shape for-
nece sua prpria implementao dos mtodos init, draw e getMaxSize. A classe Rectan-
gularPrism responsvel pelos cubos e prismas retangulares. A classe define um array
de inteiros representando os oito vrtices do objeto Shape. Um multiplicador opcional
aplicado a esse array determina se o objeto Rectangle usado para criar um cubo ou um
prisma retangular a diferena que um cubo usa o mesmo tamanho para comprimen-
to, largura e altura, mas uma das dimenses de um prisma retangular deste exemplo
duas vezes maior do que a dos outros. As subclasses de Shape definem arrays adicionais
para especificar os tringulos que definem as faces de cada objeto Shape e os valores de cor
em cada vrtice. Esses arrays so convertidos em objetos ByteBuffer para uso na renderi-
zao dos objetos Shape.
O mtodo draw de cada Shape recebe um objeto GL10 (do mtodo onDrawFrame de
ShapeRenderer) que usado para renderizar a figura. O ByteBuffer que contm os vrti-
ces do objeto Shape usado pelo mtodo glVertexPointer de GL10 para configurar as co-
ordenadas de vrtice. O ByteBuffer de cor usado pelo mtodo glColorPointer de GL10
para especificar a cor em cada vrtice. Desenhamos a figura usando o mtodo glDraw-
Elements de GL10, o qual recebe um ByteBuffer descrevendo os tringulos que compem
as faces do objeto Shape, uma constante indicando que queremos desenhar tringulos, o
nmero ou os vrtices do ByteBuffer e uma constante representando o tipo de buffer.