Академический Документы
Профессиональный Документы
Культура Документы
BLUMENAU
2012
2012/1-19
BLUMENAU
2012
2012/1-19
Por
Presidente:
______________________________________________________
Prof. Dalton Solano dos Reis, Mestre Orientador, FURB
Membro:
______________________________________________________
Prof. Aurlio Faustino Hoppe, Mestre FURB
Membro:
______________________________________________________
Prof. Joyce Martins, Mestre FURB
AGRADECIMENTOS
RESUMO
ABSTRACT
This work presents a computer graph application oriented learning implementation focused on
geometric transformations, called AduboGL. The OpenGL library is used as fundamental
point for set up the scene in 2D application and the result in a space 3D. Its construction was
based in concepts of computer education, resulting in a more simplified use. In the application
its possible to realize exercises by means of pieces which fit together according with the
geometrical transformations, stacking of transformations and a simple geometric shape, the
cube. These pieces are viewed in a window to be organized in a 2D plan. After that, its
possible to save the exercise and visualize its result in 3D space in the order in which pieces
were placed. Yet, in the AduboGL, its possible visualize the source code of the pieces being
placed in C++ and OpenGL, helping the students to understand the logical order of the
commands used for the scene development. Lastly, its presented the performance and
usability analysis of the application.
Key-words: Application. Computer in education. OpenGL. Transformation matrix.
LISTA DE ILUSTRAES
LISTA DE SIGLAS
2D 2 Dimenses
3D 3 Dimenses
AduboGL Aplicao didtica usando a biblioteca openGL
API Application Programing Interface
CAD Computer Aidded Design
DAG Directed Acyclic Graph
FURB Universidade Regional de Blumenau
GLU openGL Utility library
GLUT openGL Utility Toolkit
IDE Integrated Development Environment
JAR Java ARchive
OpenGL Open Graphics Library
RF Requisito Funcional
RGBA Red Green Blue Alpha
RNF Requisito No Funcional
SA Software Aplicativo
SE Software Educativo
SRT Sistema de Referncia da Tela
SRU Sistema de Referncia do Universo
UC Use Case
UML Unified Modeling Language
V-ART Virtual Articulations for viRtual realiTy
XML eXtensible Markup Language
SUMRIO
1 INTRODUO .................................................................................................................. 14
1.1 OBJETIVOS DO TRABALHO ........................................................................................ 14
1.2 ESTRUTURA DO TRABALHO ...................................................................................... 15
2 FUNDAMENTAO TERICA .................................................................................... 16
2.1 INFORMTICA NA EDUCAO ................................................................................. 16
2.1.1 SOFTWARE EDUCATIVO ........................................................................................... 17
2.1.2 SOFTWARE APLICATIVO .......................................................................................... 18
2.1.3 SOFTWARES COM FOCO NA EDUCAO LDICA ............................................. 18
2.2 OPENGL 4.2 ..................................................................................................................... 19
2.2.1 PADRONIZAO DE NOMES E TIPOS DE DADOS ............................................... 20
2.2.2 ESPAO GRFICO ....................................................................................................... 21
2.2.3 PRIMITIVAS GRFICAS, TEXTO, CMERA SINTTICA, ILUMINAO E
PROJEO .................................................................................................................... 22
2.2.4 TRANSFORMAES GEOMTRICAS ...................................................................... 23
2.2.5 VISUALIZAO DE OBJETOS GRFICOS .............................................................. 25
2.3 GRAFO DE CENA ........................................................................................................... 26
2.4 V-ART ............................................................................................................................... 27
2.5 TRABALHOS CORRELATOS ........................................................................................ 28
3 DESENVOLVIMENTO .................................................................................................... 31
3.1 REQUISITOS PRINCIPAIS DO PROBLEMA A SER TRABALHADO ....................... 31
3.2 ESPECIFICAO ............................................................................................................ 32
3.2.1 Diagrama de casos de uso ............................................................................................... 32
3.2.2 Diagrama de classes ........................................................................................................ 37
3.2.3 Diagrama de estado ......................................................................................................... 43
3.3 IMPLEMENTAO ........................................................................................................ 44
3.3.1.1 Controle das peas da AduboGL .................................................................................. 44
3.3.1.2 Visualizao do cdigo-fonte das peas ....................................................................... 51
3.3.1.3 Visualizao do cenrio 3D a partir das peas colocadas ............................................. 53
3.3.2 Operacionalidade da implementao .............................................................................. 55
3.3.2.1 Desenvolvendo um exerccio na AduboGL .................................................................. 56
3.4 RESULTADOS E DISCUSSO ...................................................................................... 61
14
1 INTRODUO
1.1
OBJETIVOS DO TRABALHO
15
a) desenvolver e disponibilizar a aplicao com conceitos definidos durante o
levantamento bibliogrfico;
b) permitir que o aluno da disciplina realize exerccios com a aplicao;
c) disponibilizar um ambiente para que o aluno visualize a cena 3D resultante do
exerccio realizado.
1.2
ESTRUTURA DO TRABALHO
Este trabalho est dividido em quatro captulos, sendo que o segundo apresenta a
fundamentao terica necessria para o entendimento deste.
O terceiro captulo apresenta o desenvolvimento da aplicao, iniciando pelos
principais requisitos e a especificao. A especificao composta pelos diagramas de casos
de uso, de classes e de estado. Tambm mostrado como o trabalho foi implementado a partir
das tcnicas e ferramentas utilizadas e dos principais trechos de cdigo. O captulo
finalizado com os resultados e discusses que aconteceram durante todo o processo de
desenvolvimento do trabalho.
Por fim, o quarto captulo refere-se s concluses deste trabalho, bem como sugestes
para extenses futuras.
16
2 FUNDAMENTAO TERICA
2.1
INFORMTICA NA EDUCAO
17
Uma das ferramentas educacionais onde possvel conciliar a aprendizagem ao ldico
o software educacional. Um software educacional todo programa voltado educao que
envolve ensino e aprendizagem, onde o educador importante para ensinar um determinado
contedo e o aluno praticar o que foi ensinado para aprender (OLIVEIRA; COSTA;
MOREIRA, 2001, p. 73).
Dentro deste contexto existem dois tipos de softwares: educativo e aplicativo. Os
softwares ainda podem abordar a educao ldica. Os itens 2.1.1, 2.1.2 e 2.1.3 abordam estes
tipos de softwares.
2.1.1
SOFTWARE EDUCATIVO
Um Software Educativo (SE) aquele que tem por objetivo favorecer o processo de
ensino-aprendizagem. Para que um software seja um SE ele deve ser desenvolvido com
intudo de favorecer o aluno a adquirir conhecimento relativo a um contedo didtico, ou seja,
o SE deve possuir um carter didtico. Alm disso, o SE deve facilitar a interao entre o
aluno/usurio e o programa, sempre mediada pelo professor e tambm deve ter uma boa
usabilidade (OLIVEIRA; COSTA; MOREIRA, 2001, p. 73).
O SE baseia-se na juno dos seguintes fatores: contedo; interao aluno-SEprofessor; programao e fundamentao pedaggica conforme pode ser observado na Figura
1.
O software no precisa abranger todas as reas e nem apenas uma. Existem vrios tipos
de SE com foco em determinada rea. Os diferentes tipos de SEs so (OLIVEIRA; COSTA;
MOREIRA, 2001, p. 75-82):
a) SE com nfase na lgica do contedo;
18
b) SE que por possuir uma capacidade grande de novas informaes, pretende realizar
uma interao progressiva com o usurio. Um exemplo deste tipo de software so
os sistemas inteligentes;
c) SE que por possuir bastante interao com o usurio permite um melhor
aproveitamento pedaggico, como os tutoriais, aplicativos de simulao e jogos
educacionais.
Os SEs envolvem uma grande equipe para seu desenvolvimento. Por envolverem um
grande campo de conhecimento, necessitam de professores especialistas na rea abordada;
tcnicos e conhecedores da linguagem na qual o software desenvolvido; pessoas
especializadas em informtica na educao; designer para tela e componentes; alm de
docentes e alunos para experimentar e validar o material produzido.
2.1.2
SOFTWARE APLICATIVO
2.1.3
19
social e com as situaes do mundo, promovendo uma relao afetiva de vida (ALMEIDA,
1994, p. 15-24).
Podem ser considerados softwares ldicos os jogos que juntam o mundo real com
alguma diverso para o usurio. Existem jogos que buscam promover a educao, como o
jogo Sim City que ensina o jogador a construir e gerenciar cidades. Assim como jogos mais
simples que so utilizados por um professor de matemtica para ensinar a tabuada a partir de
imagens, por exemplo.
2.2
OPENGL 4.2
(API) para
20
funes tanto de janelas quanto de controle de eventos. Com ela possvel criar janelas,
menus, pop-ups, desenhar textos e objetos da OpenGL como paraleleppedos, esferas e
cilindros. Alm disso, possvel gerenciar os eventos de mouse, teclado e joystick. Esta
biblioteca adequada para a aprendizagem da OpenGL e tem o objetivo de ocultar a
complexidade de sistemas de janelas existentes hoje. utilizada principalmente para
pequenas aplicaes (COHEN; MANSSOUR, 2006, p. 53; WRIGHT JNIOR et al., 2011, p.
43).
Nas prximas sees so abordados os temas: padronizao de nomes e tipos de dados;
espao grfico; primitivas grficas, texto, cmera sinttica, iluminao e projeo;
transformaes geomtricas e visualizao de objetos grficos.
2.2.1
21
Tipo de dado OpenGL
Representao interna
Tipo de dado C
Sufixo
GLbyte
GLshort
GLint, GLsizei
GLfloat, GLclampf
GLdouble, GLclampd
GLubyte, GLboolean
GLushort
GLuint, GLenum,
GLbitfield
inteiro de 8 bits
inteiro de 16 bits
inteiro de 32 bits
ponto flutuante de 32 bits
ponto flutuante de 64 bits
inteiro de 8 bits sem sinal
inteiro 16 bits sem sinal
inteiro de 32 bits sem sinal
signed char
short
int ou long
float
double
unsigned char
unsigned short
unsigned long/
unsigned int
b
s
i
f
d
ub
us
ui
2.2.2
ESPAO GRFICO
22
Para localizar o eixo z em relao ao eixo x e y em um plano 3D pode-se utilizar a
regra da mo direita ou a regra da mo esquerda. A OpenGL trabalha com a primeira regra.
Para isso deve-se posicionar a mo direita de forma que o indicador fique apontado para o
eixo y (positivo), o polegar para o eixo x (positivo) e o dedo mdio apontado para a direo
positiva do eixo z. Na Figura 2 pode-se observar a utilizao desta regra (MANSSOUR;
COHEN, 2006, p.9).
2.2.3
Funo
Desenhar ponto
Desenhar segmento de linha
Desenhar segmentos de linhas conectados
Desenhar segmentos de linhas conectados, unindo o primeiro com o ltimo
Desenhar polgono convexo
Desenhar tringulo
Desenhar tringulos conectados
Desenhar tringulos a partir de um ponto central
Desenhar quadrilteros
Desenhar quadrilteros conectados
Para escrever um texto na rea grfica deve-se utilizar a biblioteca GLUT. Ela possui
dois tipos de fontes que podem ser utilizadas: stroke que formada por segmentos de retas e
23
bitmap que so imagens que representam caracteres. O primeiro tipo possui uma resoluo
maior e pode ser escalado e rotacionado, porm no to rpido quanto o segundo tipo de
fonte (COHEN; MANSSOUR, 2006, p. 105).
2.2.4
TRANSFORMAES GEOMTRICAS
24
x' = x * cos(a) + y * sin(a)
y' = -x * sin(a) + y * cos(a)
A escala utilizada para definir o tamanho do objeto no plano grfico. Com ela,
tambm possvel ampliar ou diminuir o elemento. Para realizar a escala sobre um objeto
deve-se multiplicar um valor de escala por todas as coordenadas das primitivas grficas que
compem o objeto a ser escalado (POZZER, 2011, p. 15), conforme apresentado no Quadro
7.
x' = x * Ex
y' = y * Ey
z' = z * Ez, onde E o fator de escala a ser aplicado.
25
Rotao homognea 3D em relao a origem, eixo x
Quadro 10 Multiplicao das matrizes de rotao com base na origem para o eixo x
Para que um mesmo objeto sofra vrios tipos de transformao ao mesmo tempo, essas
transformaes devem ser concatenadas, ou seja, deve haver a multiplicao vrias vezes
sobre a mesma matriz conforme as transformaes a serem realizadas. Porm, se a cena tiver
mais de um objeto e for aplicada a transformao na cena, todos os objetos sofrero a
transformao. A OpenGL soluciona esse problema a partir da implementao de uma pilha
de matrizes de transformao. Nesse caso, para definir o escopo das transformaes utilizamse os comandos glPushMatrix() que empilha a matriz de transformao corrente e
glPopMatrix()
2.2.5
26
sinttica semelhante a uma cmera comum. Ela possui uma localizao, que por padro fica
na origem, uma direo para onde est apontando e um vetor up que o vetor de direo em
relao ao topo da cmera.
Quando um objeto visualizado a partir da matriz de projeo, ele pode ser
visualizado de duas formas: em perspectiva ou ortogonal (WRIGHT JNIOR et al., 2011, p.
136-137). Para visualiz-lo em perspectiva deve-se utilizar o comando da OpenGL
glFrustrum()
para um ponto fixo; isso feito a partir do comando OpenGL gluLookAt(). Neste comando
deve-se definir a posio da cmera, para onde ela est olhando e por fim o vetor de direo
em relao ao topo dela (NEIDER, 1994; MACHADO; MORAES, 2005, p. 95-103).
Utilizando a matriz modelview para visualizar um objeto, tem-se as transformaes
geomtricas aplicadas a ele, assim como as coordenadas da cmera sinttica. Quando um
objeto sofre uma transformao, o ponto de visualizao alterado. Quem controla o ponto de
viso em relao ao objeto (viewpoint) a cmera sinttica. Estas informaes que
compem a matriz modelview (POZZER, 2011, p. 13-16; NEIDER, 1994). Essa tem uma
dimenso de quatro linhas por quatro colunas e representa as transformaes no sistema de
coordenadas sobre cada um dos objetos (WRIGHT JNIOR et al., 2011, p. 138).
Multiplicando as coordenadas dos objetos a serem transformados pela modelview, tem-se as
novas coordenadas de transformao.
2.3
GRAFO DE CENA
Um grafo de cena, tambm conhecido por scene graphs, uma estrutura de dados de
alto nvel, organizada normalmente atravs de classes. Ele implementa uma estrutura
hierrquica de objetos e atributos, que possuem informaes sobre sua aparncia e demais
fatores, podendo-se especificar cenas complexas com maior facilidade (VALENTE, 2004;
POZZER, 2007; NAKAMURA; TORI, 2004, p. 108).
A estrutura de um grafo de cena matemtica e armazena uma coleo de objetos de
forma organizada. Ele formado por ns, que so conectados por arcos. Um arco pode
conectar at dois ns. Os ns e suas ligaes podem receber nomes de acordo com o
posicionamento dentro do grafo (VALENTE, 2004; NAKAMURA; TORI, 2004, p. 108). No
Quadro 11 podem-se visualizar suas especificidades.
27
Tipo
Arco
Arco Dirigido
Descrio
Conexo entre dois ns.
Arco que possui uma nica direo, sendo uma relao
unidirecional, como pai para filho.
Estrutura que representa um ou uma coleo de dados.
N que ponto de origem de um arco dirigido, ou seja, que
inicia uma relao.
N que o ponto de destino de um arco dirigido, ou seja,
o trmino da relao.
Se um n B filho de A, ento B dito descendente de A.
Todos os filhos de B, tambm so descendentes de A.
Se um n A pai B, ento A dito ancestral de B. Todos os
ancestrais de A so ancestrais de B.
N que no possui pai. o primeiro n do grafo.
N
N pai
N filho
N descendente
N ancestral
N raiz
/universo
N folha
N interior
Caminho
Travessia
Branch
Subgrafo ou
branch graph
Directed Acyclic
Graph (DAG)
rvore
2.4
V-ART
28
disponibiliza exemplos, cdigos-fontes, projetos no Microsoft Visual Studio e modelos 3D
que utilizam o prprio framework (SCHNEIDER, 2009).
2.5
TRABALHOS CORRELATOS
29
principalmente crianas. O framework uma mistura de micro mundos com o BlueJ: como
se o micro mundo fosse o framework Java e o BlueJ o ambiente de desenvolvimento. O
Greenfoot possui duas classes principais: Actor e Word que devem ser implementadas pelos
programadores. Cada classe Actor gera um objeto que pode ser adicionado na classe World
(mundo). O mundo um espao bidimensional dividido em linhas e colunas gerando assim
clulas. So nestas clulas que os objetos do tipo Actor so adicionados. Seu diferencial que
possvel criar com facilidade diferentes cenrios para que seja trabalhado. O framework
utiliza a linguagem Java como linguagem base (HENRIKSEN; KLLING, 2004).
Desenvolvido na FURB, o Furbot tambm um framework com o objetivo de ensinar
aos alunos os conceitos introdutrios da programao, misturando o Java com a linguagem
Portugol (SILVA, 2000, p. 13). Ele tambm possui um espao bidimensional com grades
(linhas e colunas) que configurado a partir de um arquivo eXtensible Markup Language
(XML) e cada clula pode conter um objeto predefinido. O objeto principal do mundo um
rob e junto a ele podem ser adicionados outros elementos. Cada um destes objetos uma
classe que herda outra classe para que o aluno possa programar a inteligncia de cada um
deles. O Furbot um arquivo Java ARchive (JAR) que facilmente importado como um
projeto em uma Integrated Development Environment (IDE), como o Eclipse, por exemplo
(VAHLDICK; MATTOS, 2008).
O Edugraph uma ferramenta de apoio ao ensino da Computao Grfica a distncia.
A ferramenta utiliza os princpios dos jogos de computadores para ensinar principalmente
engenheiros e designers que no possuem o conhecimento em computao (CERQUEIRA;
SILVA, 2009, p. 1735). A ferramenta foi desenvolvida na linguagem C++ utilizando a
OpenGL e componentes do pacote DirectX da Microsoft. Ela dividida em nveis onde no
primeiro o aluno aprende a teoria que pode ser a partir de diferentes tipos de mdias, como
webcam, hipertexto e sons. Aps aprender a teoria, no segundo nvel o aluno exercita em um
plano 2D a partir de perguntas e respostas. Ao trmino desta fase ele passa para a terceira em
um plano 3D onde estuda este espao selecionando objetos e aplicando operaes a ele
(BATTAIOLLA et al., 2002, p. 287-289).
No Quadro 12 possvel visualizar uma comparao entre os trs trabalhos correlatos
expostos. Foram levantadas oito caractersticas e ento foram comparadas.
30
Caracterstica
Furbot
Greenfoot
Edugraph
Interao com o aluno a partir de objetos
Sim
Sim
Sim
grficos
Capacidade de resolver exerccios
Sim
Sim
Sim
Resoluo de exerccios via cdigo-fonte
Sim
Sim
No
Alterao de parmetros do cdigo em
No
No
Sim
tempo de execuo
Explcito uso da OpenGL
No
No
Sim
Permite alterao da posio da cmera
No
No
Sim
Tipo de cenrio
2D
2D
2D/3D
Tipo de integrao
Framework Framework Ferramenta
Quadro 12 - Tabela comparativa dos trabalhos correlatos
possvel visualizar que todos permitem a interao do aluno com objetos grficos a
partir da resoluo de exerccios. O que os diferencia, principalmente o Edugraph dos outros
dois trabalhos, que o Edugraph permite alterar os parmetros em tempo de execuo, porm
no permite a resoluo de exerccios via cdigo-fonte. J o Furbot e o Greenfoot permitem a
realizao de exerccio via cdigo-fonte, e no permitem a alterao de parmetros em tempo
real. O Edugraph trabalha nos dois tipos de cenrio, 2D e 3D, e os outros dois so limitados
em um espao 2D. Somente o Edugraph utiliza a OpenGL de forma explcita, assim como,
somente ele permite alterar o posicionamento da cmera dentro de uma cena.
31
3 DESENVOLVIMENTO
3.1
32
s) executar sobre o sistema operacional Windows e Mac OS (RNF).
3.2
ESPECIFICAO
3.2.1
Nessa seo so descritos os principais casos de uso da AduboGL. Por se tratar de uma
aplicao voltado aprendizagem da matria de computao grfica a partir da biblioteca
OpenGL, encontrou-se apenas um ator que ser o prprio usurio do sistema, sendo ele o
aluno ou o professor da disciplina. A Figura 5 exibe o diagrama de casos de uso do referido
trabalho.
33
Para entender os casos de uso necessrio ter conhecimento das partes que formam a
aplicao. A AduboGL formada por cinco janelas, sendo elas: fbrica que o local onde
as peas so disponibilizadas para serem colocadas no exerccio; bandeja onde o exerccio
construdo; janela de cdigo-fonte da pea selecionada onde o usurio visualiza o
cdigo em C++ das peas conforme so selecionadas; a janela de visualizao do
exerccio 3D
cmera
J o UC02 mostra como o ator Usurio coloca uma das peas j criadas no ambiente
do exerccio. O Quadro 14 apresenta os detalhes do caso de uso.
34
UC02 Colocar a pea criada no ambiente do exerccio, sobre a bandeja
Descrio
Aps a criao da pea, ela deve ser colocada na bandeja para que o exerccio
possa ser iniciado, assim como a aprendizagem da OpenGL e a gerao do
cdigo-fonte.
A bandeja o local que armazena as peas j criadas que iro compor o
exerccio.
A pea que representa os comandos glPushMatrix() glPopMatrix() poder
receber peas internamente, chamadas de peas filhas. Essas peas filhas
representam os comandos que so circundados pelo comando
glPushMatrix()e glPopMatrix().
Pr-Condio UC01
Cenrio
1. O Usurio deve soltar o boto do mouse para soltar a pea criada em
Principal
qualquer local da bandeja;
2. A aplicao colocar a pea abaixo da ltima j posicionada, caso for a
primeira pea, colocar no topo da bandeja.
Cenrio
1. Se no passo 1 do cenrio principal o Usurio soltar a pea dentro da fbrica,
Alternativo 1
a pea ser removida da bandeja e da lista de peas da bandeja.
Cenrio
1. No passo 1 do cenrio principal o Usurio pode soltar a pea ao lado de
Alternativo 2
outra pea;
2. A aplicao verificar se a pea que est ao lado da nova permite ter peas
filhas;
3. Se permitir, ir adicionar a pea como filha dela em uma lista de peas filhas
e mostrar a mesma encaixada na pea solta;
4. Se a pea j tiver peas filhas, encaixar a nova pea a cima ou abaixo da
atual filha, conforme for posicionada na bandeja;
5. Se no permitir apagar a pea criada.
Ps-Condio O Usurio deve poder visualizar a pea criada no exerccio. Essa pea
corresponde a um dos comandos principais da OpenGL que formaro o cdigofonte posterior.
Quadro 14 Detalhamento do caso de uso UC02
Ainda, o UC03 mostra como o ator Usurio pode alterar as propriedades dos
comandos da OpenGL. Esses comandos so os representados pelas peas j colocadas na
bandeja. O Quadro 15 apresenta os detalhes do caso de uso.
O UC04 mostra como o ator Usurio pode movimentar e alterar a posio das peas j
colocadas na bandeja. O Quadro 16 apresenta os detalhes do caso de uso.
35
UC03 Alterar propriedades dos comandos da OpenGL
Descrio
Alguns comandos da OpenGL possuem parmetros, como o cubo que possui
sua cor e as transformaes translao, escala e rotao que possuem os valores
de x, y e z a serem transformados. Ao colocar uma pea que representa esses
comandos, o Usurio pode alterar suas propriedades.
Pr-Condio UC02
Cenrio
1. Se colocar uma pea que representa o cubo, o Usurio pode alterar sua cor
Principal
pressionando a tecla R para colori-lo de vermelho, G para colori-lo de
verde ou B para colori-lo de azul;
2. Se o Usurio colocar uma pea que represente as transformaes ele
poder alterar os valores de x, y e z utilizando as teclas numricas 1 e 2
para diminuir e aumentar o valor de x, ou 3 e 4 para diminuir e aumentar o
valor de y, ou ainda 5 e 6 para diminuir e aumentar o valor de z.
Cenrio
1. Se a pea j estiver colocada e o Usurio desejar alterar suas propriedades,
Alternativo
ele deve clicar sobre a pea e ento realizar os passos do cenrio principal.
Exceo
1. Se o Usurio desejar alterar as propriedades de uma pea filha j
posicionada no conseguir, pois no possvel selecionar a pea filha aps
ter clicado em outra.
Ps-Condio Quando for um cubo o Usurio visualizar sua nova cor sobre a prpria pea.
Quando for uma pea de transformao, o Usurio visualizar o valor alterado
na janela de cdigo-fonte, nas posies respectivas de x, y e z.
Quadro 15 Detalhamento do caso de uso UC03
UC04 Mexer e alterar a posio das peas j criadas e colocadas na bandeja
Descrio
Depois de posicionar a pea no exerccio, o Usurio pode troc-la de posio,
colocando-a em cima, embaixo ou entre uma j colocada.
Pr-Condio UC02
Cenrio
1. O Usurio deve clicar e manter pressionado o boto do mouse sobre a pea
Principal
a ser alterada de lugar;
2. A pea ir se mover na tela conforme o cursor do mouse se movimentar;
3. Quando a pea estiver posicionada ao lado da pea que deseja ser encaixada,
o Usurio deve soltar o boto do mouse;
4. A aplicao realizar comparaes para verificar a posio em que a pea
ser encaixada, coloca-a no lugar, desloca as demais peas para baixo e
atualiza o ndice de todas.
Cenrio
1. Se no item 3 do cenrio principal o Usurio soltar a pea na rea da
Alternativo
fbrica, a pea ser removida e apagada do exerccio.
Exceo
1. Se o Usurio tentar mover uma pea filha no conseguir, pois no
permitido.
Ps-Condio O Usurio deve visualizar a pea movida em seu novo lugar e as demais peas
deslocadas para baixo.
Quadro 16 Detalhamento do caso de uso UC04
O UC05 mostra como o ator Usurio pode visualizar o cdigo-fonte de uma pea
selecionada, sendo da fbrica ou da bandeja. O Quadro 17 apresenta os detalhes do caso de
uso.
36
UC05 Visualizar cdigo da pea conforme pea selecionada
Descrio
Ao clicar sobre uma pea o Usurio pode visualizar o cdigo-fonte em C++
com OpenGL resultante da montagem da mesma. O Usurio visualizar o
cdigo-fonte na janela cdigo-fonte da pea selecionada.
Pr-Condio Nenhuma
Cenrio
1. O Usurio deve clicar sobre uma pea, sendo da fbrica ou da bandeja;
Principal
2. A aplicao exibir na janela de cdigo-fonte da pea selecionada o
cdigo correspondente a pea (se for da fbrica a pea estar com suas
inicializaes zeradas, se for da bandeja ser exibido o cdigo conforme a
montagem e sua configurao no exerccio).
Cenrio
1. Se o Usurio clicar sobre uma pea que representa os comandos
alternativo
glPushMatrix() glPopMatrix() e dentro da pea tiver peas filhas, ser
exibido o cdigo com as configuraes de cada uma das peas filhas
empilhadas.
Ps-Condio O Usurio deve poder visualizar o cdigo-fonte a partir de um arquivo com
extenso cpp. A partir deste arquivo o Usurio pode entender como funciona
algumas diretivas e comandos do OpenGL e pode execut-lo em um novo
projeto.
Quadro 17 Detalhamento do caso de uso UC05
O UC06 mostra como o ator Usurio pode salvar o exerccio conforme as peas
colocadas na bandeja. O Quadro 18 apresenta os detalhes do caso de uso.
UC06 Salvar o exerccio
Descrio
Aps disponibilizar as peas sobre a bandeja, o Usurio pode salvar o exerccio
montado para abri-lo posteriormente ou para visualiz-lo na cena em 3D.
Pr-Condio UC02
Cenrio
1. O Usurio deve clicar com o boto direito dentro da bandeja;
Principal
2. A aplicao mostrar um menu;
3. O Usurio deve clicar na opo Gravar exerccio;
4. A operao ir gerar um arquivo texto no diretrio do projeto com o nome
Exercicio.txt com todas as configuraes das peas colocadas na bandeja
e na mesma ordem. Caso o arquivo j exista, o mesmo sobreposto.
Ps-Condio O Usurio deve poder visualizar o arquivo gerado na pasta do projeto com o
nome de Exercicio.txt. E na janela Visualizao do exerccio 3D deve
aparecer a cena em 3D correspondente ao exerccio gravado.
Quadro 18 Detalhamento do caso de uso UC06
O UC07 mostra como o ator Usurio pode abrir o exerccio j salvo em um arquivo
texto. O Quadro 19 apresenta os detalhes do caso de uso.
UC07 Abrir o exerccio salvo
Descrio
Aps salvar um arquivo com a disposio das peas o Usurio pode abri-lo
novamente, mesmo tendo fechado a aplicao.
Pr-Condio UC06
Cenrio
1. O Usurio deve clicar com o boto direito dentro da bandeja;
Principal
2. A aplicao mostrar um menu;
3. O Usurio deve clicar na opo Abrir exerccio;
4. A aplicao carregar as peas na bandeja na mesma ordem e com as
mesmas configuraes conforme foram gravadas no arquivo.
Ps-Condio O Usurio deve visualizar as peas carregadas na bandeja, conforme foram
salvas, assim como o exerccio em 3D. Deve tambm poder alterar o exerccio
como explicado nos casos de uso anteriores.
Quadro 19 Detalhamento do caso de uso UC07
37
Por fim, o UC08 mostra como o ator Usurio pode visualizar a cena em 3D gerada
pelas peas do exerccio. O Quadro 20 apresenta os detalhes do caso de uso.
UC08 Visualizar cena 3D
Descrio
Aps salvar um arquivo com a disposio das peas o Usurio pode visualizlo na janela de visualizao do exerccio 3D.
Pr-Condio UC06
Cenrio
1. O Usurio deve abrir o arquivo exerccio, caso no esteja visualizando o
Principal
cenrio em 3D;
2. Na janela Visualizao 3D com cmera exibida a cena 3D
correspondente as peas montadas a partir de um frustum de viso.
Ps-Condio O Usurio deve visualizar o cenrio 3D conforme as peas gravadas no
arquivo. E na janela Visualizao do exerccio 3D aparece a cena vista de
frente.
Quadro 20 Detalhamento do caso de uso UC08
3.2.2
Diagrama de classes
38
as funes assessoras para atribuir e retornar os trs pontos de um ponto no espao (x, y e z) e
utilizada apenas de modelo para a segunda classe, no podendo ser instanciada. A segunda,
Point4D,
permite ser instanciada e fornece funes para se trabalhar com o ponto. O que foi
utilizado dessa classe no trabalho proposto foi o construtor com valores apenas nos pontos x e
y e as funes assessoras. A terceira classe, Transform, disponibiliza funes para realizar
transformaes de escala, rotao e translao sobre uma matriz quadrada 4x4, definida em
um vetor de 16 posies. Alm dessas funes est disponvel a funo para fazer a
identidade da matriz. A quarta classe, Color, basicamente composta por um vetor de quatro
39
dimenses, onde cada dimenso representa uma cor, seguindo o padro Red Green Blue Alpha
(RGBA), suas funes assessoras e construtores. Dessa classe foram utilizadas as cores RGB
para definir a cor das peas e objetos utilizados em toda a aplicao. E a quinta classe
utilizada para pegar os pontos mximo e mnimo em relao aos eixos de uma forma
geomtrica representando sua Bounding Box.
As demais classes presentes no diagrama foram construdas para que a aplicao
pudesse executar suas funcionalidades corretamente. A classe ObjetoGrafico constitui
funes responsveis por desenhar um objeto 2D. A partir dela pode ser definida a cor do
objeto, sua espessura de linha, sua matriz de transformao, seus vrtices, sua primitiva
grfica e seu tipo.
Na classe ObjetoGrafico tambm possvel adicionar peas filhas, nesse caso elas
so armazenados em um vetor de filhos. Para saber quantos filhos j existem no vetor utilizase a varivel de controle quantidade que incrementada a cada novo filho adicionado. Para
realizar esse controle foi utilizada a ideia do grafo de cena (ver seo 2.3), onde a estrutura
que representa os pais o vetor listaBandeja da classe Principal (ver Figura 11). E a
estrutura que representa os filhos o vetor listaFilhos da classe ObjetoGrafico. Assim
cada pai tem uma lista de filhos.
Como a classe genrica para qualquer objeto 2D no possvel realizar o desenho
das peas. Dessa forma, definida uma funo do tipo virtual denominada Desenha() que
deve ser implementada por quem a herdar. A classe utilizada tambm na aplicao exemplo
que gera cena 3D, ento foi criada uma classe secundria que herda a ObjetoGrafico
denominada ObjetoGraficoExercicio que possui funes utilizadas somente na AduboGL.
A classe ObjetoGraficoExercicio define se o objeto 2D poder ser pai ou filho
de outra pea, assim como o id que a pea representa no exerccio e sua BoundingBox que
utilizada para saber se foi clicado dentro do objeto ou no. Dentro dela a BoundingBox
calculada conforme o objeto sofre uma transformao, tambm existe uma funo que retorna
a lista dos vrtices com sua transformao. Alm disso, existe a funo que verifica se um
ponto passado como parmetro pertence ao objeto, ou seja, se est dentro dele. Nessa classe a
funo Desenha(), herdada da classe ObjetoGrafico, implementada. Como essa classe
tambm serve para desenhar qualquer forma 2D foram criadas outras duas classes com que
herdam a ObjetoGraficoExercicio, so elas PushPop e Cubo. Essas apenas definem em
seu construtor as caractersticas que cada objeto possui. Na Figura 7 est a representao das
classes ObjetoGrafico e ObjetoGraficoExercicio com suas variveis e funes principais,
40
assim como as classes que a herdam.
variveis de controle. Para representar as trs peas foram criadas as trs classes Escala,
Rotao
41
42
43
armazenada;
f) ao passar com o mouse sobre as janelas exibido um contorno em amarelo para
identificar onde est o foco do mouse;
g) ao selecionar uma pea exibido o cdigo-fonte na janela de cdigos
correspondente a pea e suas filhas, quando houver;
h) a cada nova pea seu identificador incrementado e quando a mesma removida o
identificador decrementado e os objetos da lista so atualizados.
3.2.3
Diagrama de estado
Como se pode observar, existem trs estados para a pea. O primeiro uma pea ser da
fbrica e a partir dela ser criada tornando-se pea da bandeja, ou ento ser adicionada a uma
pea j existente, tornando-se filha dela. O segundo a pea ser da bandeja e poder ser
excluda da mesma ou ento ser movida por ela. E o terceiro e ltimo estado a pea ser filha,
podendo ser encaixada na pea antecessora e movida conforme sua pea pai movida.
44
3.3
IMPLEMENTAO
3.3.1.1
A parte fundamental da AduboGL formada por peas que representam uma forma
grfica ou um comando importante da OpenGL para realizar uma interao no espao 3D que
ser gerado pela juno das peas.
Antes de iniciar a modelagem das peas a partir das primitivas grficas da OpenGL
foram feitos croquis de seu formato. Os formatos foram estudados para que pudesse ser
iniciado um trabalho com as formas mais simples de serem modeladas, mas tambm para que
pudessem ser alteradas posteriormente. As peas futuras foram modeladas no Corel Draw e
gravadas no formato PNG, porm no se obteve tempo para substituir as iniciais no presente
trabalho. Os croquis das peas, assim como o resultado das peas finais em PNG podem ser
vistos no Apndice B.
Primeiro trabalhou-se com dois tipos de peas. As peas podem ser observadas na
Figura 13 e so utilizadas para representar o desenho de um cubo e representar os comandos
glPushMatrix() glPopMatrix()(ver
desenhadas para permitir seu encaixe, gerando assim peas filhas. Isso porque ao aplicar uma
transformao em um cubo e coloc-lo entre um comando glPushMatrix() glPopMatrix()
a transformao passa a ser unicamente das peas dentro do bloco. J se a pea a sofrer a
transformao estiver fora dos comandos, ao transform-la, transformar as demais peas fora
do bloco.
45
46
Para que a pea da fbrica possa ser levada para a bandeja e as peas da bandeja
possam ser arrastadas, desenvolveu-se uma rotina que retorna o identificador da pea clicada.
Sempre que clicada em uma parte da tela correspondente a fbrica ou a bandeja chamada
uma funo que percorre cada uma das trs listas da AduboGL. Ento verificado se foi
clicado dentro da pea a partir dos pontos de sua BoundingBox. Se com a anlise percebe-se
que foi clicado dentro da BoundingBox passado o algoritmo da ScanLine para verificar se o
ponto clicado est tambm dentro da pea (a anlise da BoundingBox e do algoritmo da
ScanLine pode ser observado na Figura 15).
47
glPopMatrix()
caso no tenha sido clicado em alguma pea. Sabe-se que uma pea da fbrica quando o id
retornado for menor do que 10, pois foi o nmero estipulado de elementos para ela, e, se for
maior, porque foi um objeto da bandeja, podendo ser filho de outra pea. O trecho de cdigo
que realiza a varredura das peas colocadas na bandeja e na fbrica e chama as funes para
verificar a BoundingBox e a ScanLine pode ser analisado no Quadro 22.
GLint getIdPecaClicada(int x, int y)
{
GLint indice = -1;
const Point4D mousePto(x,y,0);
for (int i = 1; i < MAX_GABARITO; i++) {
if(listaFabrica[i] != NULL) {
if (listaFabrica[i]->GetBoundingBox()->testPoint(mousePto)) {
//scanline:
const Point4D p = *new Point4D(x, y, 0);
bool s = listaFabrica[i]->PontoNoObjeto(p, listaFabrica[i]);
if (s) {
return listaFabrica[i]->GetId();
}
}
} else {
break;
}
}
for (int i = MAX_GABARITO; i < 255; i++) {
if(listaBandeja[i] != NULL) {
if (listaBandeja[i]->GetBoundingBox()->testPoint(mousePto)) {
//scanline:
bool s = listaBandeja[i]->PontoNoObjeto(mousePto, listaBandeja[i]);
if (s) {
return listaBandeja[i]->GetId();
}
for (int j = 0; j < listaBandeja[i]->GetQuantidade(); j++) {
ObjetoGraficoExercicio *filho =
static_cast<ObjetoGraficoExercicio*>(
listaBandeja[i]->GetFilho(j));
if (filho != NULL) {
if (filho->GetBoundingBox()->testPoint(mousePto)) {
//scanline:
s = filho->PontoNoObjeto(mousePto, filho);
if (s) {
return filho->GetId();
} // seno est fora da boudingbox
}
}
// ...cdigo...
return indice;
}
Quando adicionada a primeira pea na bandeja, essa, por sua vez, adicionada no
vetor de peas da bandeja na posio correspondente ao seu ndice, lembrando que esse vetor
possui as primeiras posies reservadas, pois elas identificam os ndices das peas da fbrica.
48
Tem-se assim o id da pea correspondente ao ndice da posio em que ela est adicionada no
vetor. Desse modo, para capturar a pea clicada do exerccio, tambm trabalhado o
identificador em conjunto com a posio do vetor. No Quadro 23 podem-se notar as posies
que so ocupadas no vetor da bandeja e sua relao com o identificador da pea. possvel
alocar no mximo 255 peas no vetor, o valor correspondente a um byte, pois no se achou
necessria a criao de mais peas em um mesmo exerccio.
49
void pecas2D_mouse(int button, int state, int x, int y)
{ //...cdigo...
if (xTrans > sub_largura || yTrans <= alturaLinha) { //dentro da fbrica
atualizaAlturaPecas();
} else if (yTrans > alturaY) {//abaixo das outras peas, coloca para cima
if (!pecaexercicio) { //pea nova veio da fbrica
GLfloat difX = xTrans - pontoAlto.GetX() + espacoBorda;
GLfloat difY = yTrans - alturaY;
transAux.MakeTranslation(Point4D(-difX, -difY, 0));
clicado->SetMatrizTransformacao(transAux *
clicado->GetMatrizTransformacao());
alturaY += (pontoBaixo.GetY() - pontoAlto.GetY());
} else {
// pea da bandeja que foi colocada para baixo, atualiza a posio de
//todas as demais, e adiciona ela ao fim de tudo!
ObjetoGraficoExercicio *objAlterado = clicado;
atualizaAlturaPecas();
objAlterado->SetId(idPecaExercicio);
GLfloat difX = xTrans - pontoAlto.GetX() + espacoBorda;
GLfloat difY = yTrans - alturaY;
transAux.MakeTranslation(Point4D(-difX, -difY, 0));
objAlterado->SetMatrizTransformacao(transAux *
objAlterado->GetMatrizTransformacao());
alturaY += (pontoBaixo.GetY() - pontoAlto.GetY());
listaBandeja[idPecaExercicio] = objAlterado;
idPecaExercicio++;
}
}
//...cdigo...
}
Se a pea foi criada e colocada no exerccio ao lado das demais, ou seja, em uma linha
horizontal, feita a validao para ver se uma pea filha e ento removida da lista de
exerccio e adicionada na lista de filhas da pea. A adio do filho pode ser analisado no
Quadro 25.
void pecas2D_mouse(int button, int state, int x, int y)
{
//...cdigo...
if (idPecaFilho > idPecaExercicio) {
clicado->SetId(idPecaFilho);
idPecaFilho--;
}
if (!cima)
obj->AdicionaFilho(clicado);
else
obj->InserirPrimeiraPosicaoFilho(clicado);
//...cdigo...
}
Quando uma pea adicionada como filha de outra, realizado um clculo para
descobrir qual ser sua pea antecessora. Para isso a lista percorrida at ser encontrada a
pea que est ao lado da posicionada. Ao pegar a futura antecessora, calculada a altura da
pea e sua largura para ento realizar o encaixe. Esse clculo feito a partir dos pontos da
50
pea capturados da lista de pontos. Ento, a pea filha colocada no ponto de origem e em
seguida ela transladada conforme a largura da pea pai e sua altura em relao ao cenrio.
Esse processo pode ser verificado na Figura 17.
Se a pea antecessora j possuir peas filhas, ela tambm modificada. Nesse caso,
calculada tambm a altura da pea sucessora, para ser acrescentada na altura da pea pai. Essa
altura calculada acrescentada em cada y dos vrtices da parte inferior da pea pai. Assim a
pea fica maior e permite o encaixe do prximo filho. Para o prximo filho tambm
acrescida sua altura na translao em y. O filho pode ser inserido na primeira posio, se a
pea estiver no incio da antecessora, ou na ltima posio. Essa interao pode ser analisada
na Figura 18.
51
Se uma pea que j est na bandeja for colocada ao lado de outra pea da bandeja, a
primeira inserida a cima ou abaixo da segunda pea conforme a posio colocada. Para
encontrar a pea horizontal feito o mesmo clculo realizado para encontrar a pea pai de
uma filha. Ao inserir uma pea acima de outra, a pea que est embaixo ser transladada em y
a altura da pea que foi adicionada a cima. Isso ocorrer para todas as peas abaixo da pea
transladada.
3.3.1.2
52
recursivamente dentro de uma pea do tipo glPushMatrix() glPopMatrix() para cada um
de seus filhos. Assim o comando s finalizado no ltimo filho encontrado. Pode observar
um trecho da funo escreveCodigo() no Quadro 26.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
53
Analisando o cdigo, conforme a linha 3 verificado o tipo da pea selecionada, ento
executada a parte do cdigo interna ao comando case conforme o tipo selecionado. Como
exemplo, a partir da linha 4 at a linha 21 realizado a construo do cdigo para a pea que
representa o cubo.
O texto do cdigo-fonte sempre alinhado nos eixos x e y, logo, a varivel y controla a
altura em que o texto est sendo escrito dentro da janela de cdigo-fonte e a varivel x a
distncia com relao a margem. A funo desenhaTexto()escreve nas posies x e y um
texto passado como parmetro dentro da janela de cdigo-fonte. Sempre aps escrever todo o
texto de cdigo, a varivel y volta a ser inicializada para que o prximo cdigo a ser escrito
inicie tambm na borda da janela.
Para desenvolver o cdigo do comando do empilhamento de matrizes, como visto na
linha 45, feito um lao de repetio para percorrer todas as peas filhas. Para cada pea filha
chamada recursivamente a funo escreveCodigo(). Assim, o cdigo de cada pea interna
escrita e somente por fim finalizado o comando do empilhamento com o comando
glPopMatrix()
3.3.1.3
que tem como parmetro o texto a ser adicionado no arquivo (ver Quadro 27).
void GravacaoDeArquivo::gravarString(std::string texto)
{
*arquivo << texto << std::endl;
}
gerado armazena apenas as configuraes das peas e suas propriedades na ordem em que
54
esto adicionadas no exerccio.
Para gravar as peas na bandeja e suas configuraes foram criadas duas funes, a
gravarObjetos()
55
Ao executar a aplicao exemplo, essa l o arquivo com as configuraes das peas e
monta o cenrio 3D. Esse cenrio carrega as transformaes e peas conforme a realizao do
exerccio na AduboGL. A aplicao exemplo utiliza algumas das classes da AduboGL para
modelar os objetos criados, assim como para ler o arquivo.
3.3.2
Operacionalidade da implementao
A interao que o usurio da aplicao far ser sobre a janela de fbrica e bandeja. As
demais janelas so apenas visuais, para que o mesmo possa ver o resultado de seu exerccio.
56
3.3.2.1
Nesta seo mostrado passo a passo como um exerccio pode ser resolvido usando da
AduboGL. O exerccio a ser resolvido est descrito no Apndice A e trata da gerao de uma
cena 3D com trs cubos transformados.
Como o primeiro cubo para estar na origem da cena e no sofre nenhuma
transformao, a primeira pea a ser colocada deve ser a que representa o cubo, conforme a
Figura 20. Para colocar o cubo na bandeja, deve-se clicar sobre a pea correspondente na
fbrica e arrast-la para a bandeja. Ao realizar isso possvel visualizar o cdigo
correspondente ao cubo 3D na janela de cdigo-fonte. Observa-se que a matriz de
transformao multiplicada pela matriz acumulada, para realizar as transformaes quando
houver alguma. Nesse caso, no h transformaes ainda, ento a matriz acumulada ser uma
matriz identidade. Pode-se notar tambm que a cor do cubo ser azul e o mesmo ser
desenhado com arestas de uma unidade.
mesma deve ser arrastada da fbrica at abaixo da ltima pea colocada na bandeja. Aps
colocar a pea amarela, que representa esse comando, deve-se colocar a pea correspondente
a translao na linha horizontal ao comando glPushMatrix() glPopMatrix(). Isso far com
que a translao seja encaixada tornando-se filha do primeiro comando colocado. O processo
pode ser acompanhado na Figura 21. Ao adicionar uma pea filha dentro de outra pea, essa
deve vir da fbrica. Caso venha da prpria bandeja, as peas apenas so alteradas de posio.
57
Aps a alterao dos valores a serem transladados pode-se colocar a pea que
representa o cubo. Essa deve ser posicionada ao lado do comando glPushMatrix()
glPopMatrix(),
aplicada ao cubo. As peas dentro de uma pea pai no podem ser trocadas de lugar, apenas as
peas antecessoras podem. Assim, caso tenha colocado a pea no local errado, deve-se
remover o pai de todas as peas e ento adicion-lo novamente. Para remover a pea pai,
deve-se clicar sobre ela e arrast-la at a rea da fbrica. Com o cubo encaixado e
selecionado, como ele deve ser na cor verde, deve ser pressionada a tecla G. Dessa forma, a
pea ser colorida na cor verde e o cdigo ser alterado. Ao clicar na pea pai da
transformao e do cubo visualizado o cdigo geral na janela de cdigo-fonte. A insero e
modificao da pea cubo assim como o cdigo da pea pai podem ser visto na Figura 23.
58
A ltima pea a ser colocada na cena 3D um cubo na cor vermelha com as trs
transformaes. Para isso deve ser colocada novamente uma pea do tipo glPushMatrix()
glPopMatrix().
A pea deve conter quatro filhos, sendo eles uma pea do tipo escala, outra
do tipo rotao, outra do tipo translao e por fim a pea do tipo cubo. As peas devem ser
colocadas uma por vez ao lado da pea glPushMatrix() glPopMatrix() e abaixo da pea
anterior, caso a mesma j tenha algum filho. Pode-se colocar todas as peas para depois fazer
a modificao de suas propriedades ou conforme cada pea colocada a propriedade pode ser
alterada. O importante ter sempre selecionada a pea antes de aplicar a alterao da
propriedade. Lembra-se que para realizar as modificaes nos eixos x, y e z deve-se utilizar as
teclas de 1 a 6 e para colorir o cubo de vermelho deve ser pressionada a tecla R. Aps a
construo pode ser clicada sobre a pea antecessora das quatro para visualizar o cdigo
completo do terceiro cubo. A Figura 24 exibe a formao das peas para a resoluo do
exerccio, assim como o cdigo correspondente ao ltimo cubo.
59
que o desenha. Assim, as transformaes sero aplicadas somente a essa pea. Tambm pode
ser notado que cada transformao aplicada sobre uma matriz auxiliar a partir dos valores
das coordenadas indicadas nas peas e ento multiplicada pela matriz acumulada. Sempre
que realizado um comando de transformao, a matriz recebe sua identidade e ento calcula
a transformao com base no ponto de origem. Logo, necessrio ter uma matriz auxiliar para
no perder as transformaes realizadas sobre o objeto. Depois de calculada a transformao
com base na origem, essa deve ser passada para uma matriz que acumula todas as
transformaes a serem aplicadas sobre o objeto. Isso feito a partir da multiplicao da
matriz auxiliar com a matriz acumulada. Assim, quando a matriz do cubo for multiplicada
pela matriz acumulada, ela ter todas as transformaes realizadas para aplicar na pea. E
assim a primeira parte do exerccio finalizada.
O cdigo-fonte apresentado na janela cdigo-fonte durante a realizao do exerccio
tambm utilizado para exibir a cena gerada em 3D. Logo, pode-se observar a cena em 3D para
a primeira parte do exerccio ao salv-lo (Figura 24). O exerccio gravado clicando-se com o
boto direito do mouse sobre a bandeja e em seguida no menu gravar exerccio. Um arquivo
Exercicio.txt gerado na pasta do projeto. A aplicao ler o arquivo e carregar a cena 3D
conforme apresentado na Figura 25. Essa cena carregada de duas formas, uma a partir da
viso de uma cmera e outra vista de frente, assim o usurio pode analisar o cenrio em
formas diferentes. Os trs cubos montados a partir do plano 2D na AduboGL visualizado em
um espao 3D com suas transformaes.
60
Aps a visualizao da cena em 3D pode ser feita a segunda parte do exerccio. Nessa
parte a cena toda deve ser transladada em quatro unidades para x. Para isso, deve-se abrir
novamente o exerccio caso tenha fechado, clicando com o boto direito na bandeja e em
seguida no menu abrir exerccio.
Com o exerccio carregado, pode ser realizada a modificao sobre ele. Como toda a
cena dever ser transladada, deve ser colocada uma pea translao. Lembra-se que para ela
no ser removida do exerccio, a primeira vez ela deve ser posicionada abaixo de todas j
colocadas, como mostra a Figura 26.
Aps a pea colocada, pode-se alterar o valor x a ser transladado pressionando a tecla
numrica 2 quatro vezes. Para que a translao seja sobre toda a cena, ela deve ser
posicionada por primeiro, sobre todas as demais peas. Deve-se clicar sobre a pea a ser
movida e arrast-la at o topo da bandeja para solt-la. Assim a pea ir ocupar a primeira
posio da bandeja. O resultado observado na Figura 27.
61
3.4
RESULTADOS E DISCUSSO
62
3.4.1
1
2
3
4
5
6
7
0,029
0,041
0,049
0,049
0,053
0,023
0,041
ms
ms
ms
ms
ms
ms
ms
Quadro 30 Tempo para adicionar uma pea filho a uma pea pai
Pode-se notar que o tempo aumenta conforme so adicionados os filhos na pea, pois a
cada novo filho sobre a mesma pea, realizado um clculo para verificar qual ser a posio
do filho. E ainda, se esse for adicionado como primeiro filho da pea, os demais so
deslocados para baixo.
O terceiro e ltimo tempo obtido foi ao alterar os valores de x, y e z em uma
transformao. O tempo inicial para calcular o intervalo foi no momento em que a tecla
pressionada e o tempo final aps a alterao do texto na janela de cdigo-fonte. Foram feitas
alteraes de vrios eixos e de transformaes diferentes, obtendo-se uma mdia de 0,010
milissegundos.
No grfico representado pela Figura 29 tem-se uma comparao entre as mdias de
tempos obtidas.
63
A partir dos tempos obtidos, pode-se notar que conforme aumenta a complexidade da
ao e a quantidade de peas a serem comparadas no cdigo, maior o consumo de tempo.
3.4.2
Como no foi possvel aplicar em uma sala de aula, da maneira como um software
educativo deveria ser analisado, foram escolhidos alunos 10 alunos de diversos semestres dos
cursos de Cincia da Computao e Sistemas de Informao para realizar o teste. Seis alunos
j haviam cursado a disciplina de Computao Grfica, porm os outros quatro ainda no.
Logo, para avaliar a usabilidade da aplicao foi criado um exerccio (ver Apndice A)
e solicitado para esses alunos o realizarem. Como um SE possui relao direta entre professor,
aplicao, aluno, foi realizada uma explicao de como utilizar a AduboGL e como a mesma
funcionada, antes de o entrevistado iniciar o teste, sendo esse o papel do professor.
Para os que no cursaram a disciplina foi informado que para as transformaes serem
acumuladas a um objeto, essas devem estar dentro de um comando glPushMatrix()
glPopMatrix()
64
1.
2.
3.
4.
5.
O que voc achou do layout do aplicativo? O tamanho das janelas est bom?
Qual foi a dificuldade encontrada para realizar o exerccio?
O cdigo-fonte visualizado na janela de cdigo legvel e fcil de compreender?
O aplicativo ajudou no entendimento de transformaes? Por qu?
Quais so suas sugestes de melhoria para o aplicativo?
Quadro 31 - Formulrio de perguntas aos usurios da aplicao
65
3.4.3
Consideraes gerais
66
que se enquadra na classificao de ser interativo com o usurio permitindo assim um melhor
aproveitamento pedaggico. Ao mesmo tempo, a aplicao desenvolvida tem uma ideia
ldica, pois se baseia em peas, como as de um quebra-cabea do mundo real, para montar os
exerccios propostos.
Para a aplicao foram desenvolvidas rotinas para controlar a movimentao das peas
do exerccio. Inicialmente estava sendo utilizada a cor alpha do pixel para retornar a pea
selecionada. Assim, cada pea utilizava o padro RGB Alpha (RGBA) onde no campo alpha
era indicado o identificador da pea. Dessa forma, nenhuma pea possua o mesmo valor para
alpha. Ento, quando fosse clicado com o mouse na tela, as cores do pixel eram lidas e a partir
da cor alpha retornada sabia-se o identificador da pea selecionada. No incio funcionou
tranquilamente, mas aps certo tempo o procedimento passou a funcionar apenas no sistema
operacional MacOS, no funcionando no Windows. No foi descoberto o motivo do
problema, pois at mesmo os exemplos anteriores que utilizavam o alpha e funcionavam no
Windows, passaram a no funcionar mais. Ento a deciso tomada para resolver o problema
foi alterar a estratgia de seleo da pea. Todas as classes correspondentes s peas foram
modificadas para comportar uma boundingbox e foram feitas rotinas para selecionar a pea a
partir dela. Como havia uma pea cncava teve de ser analisado tambm se a pea foi
selecionada a partir do algoritmo da ScanLine. Dessa forma, o clique sobre as peas e sua
seleo voltou a funcionar.
Outro problema encontrado aps a modificao do cdigo para a seleo atravs da
boundingbox foi que as matrizes de transformao das peas filhas eram zeradas ao adicionla a um pai. Isso ocorre devido a multiplicao das matrizes de transformao. Assim, quando
a filha era selecionada pela boundingbox, o algoritmo criado no retornava que a pea
realmente estava selecionada, pois o algoritmo se baseou na matriz de transformao de cada
pea. Para resolver o problema da seleo de uma pea filha, foi subtrado do ponto clicado a
altura das peas anteriores. Dessa forma, era verificado o ponto dentro da boundingbox como
se este iniciasse do zero.
No decorrer do trabalho, foram criados controles para as aes das peas (ver Quadro
14). Porm, o cdigo no foi preparado para que as peas filhas sofressem o mesmo efeito.
Um dos motivos foi que as peas sucessoras e antecessoras pertencem a listas diferentes, e
uma trata o ndice da pea como seu prprio identificador, enquanto a outra trata o
identificador e o ndice sendo diferentes.
Foi decidido desenvolver o trabalho apenas com o cubo e trs transformaes possveis
sobre ele. Um nmero restrito de comandos, porm tendo essa base, fica mais fcil de o aluno
67
alterar o tipo da pea e criar funes novas. Foram escolhidas essas funcionalidades, pois a
maior dificuldade dos alunos de computao grfica entender e visualizar as matrizes de
transformao de um objeto, principalmente em um espao 3D. Com as peas de
transformaes o aluno pode realizar vrios testes na aplicao e ver seu efeito no espao
grfico, assim como pode analisar a matriz de transformao resultante, podendo aprimorar
seu conhecimento a partir da aplicao.
O resultado obtido foi satisfatrio, pois todos os requisitos elencados foram
alcanados, assim como todos os objetivos especficos apresentados na seo 1.1.
Para testar a aplicao foram realizadas algumas anlises com base nas etapas de
deslocamento da pea dentro da bandeja aps ser adicionada (Figura 16) de insero de peas
filha dentro de uma pea pai (Figura 18), de alterao do valor da coordenada x em uma
translao (Figura 22). Todas elas acompanhadas da apresentao de seu cdigo-fonte na
janela de cdigos. A seguir so apresentados os resultados obtidos na anlise de uso de
performance e de usabilidade, finalizando com o comparativo dos trabalhos correlatos com o
presente trabalho.
Em paralelo ao desenvolvido desse trabalho, ocorreu o trabalho de SCHRAMM (2012)
que teve a mesma ideia fundamental de criar uma aplicao educacional, porm como cenrio
o estudo de shaders dentro da disciplina de iOS na FURB. Foram padronizados os nomes do
cenrio da aplicao, para que os alunos que cursassem as duas matrias se familiarizassem
melhor aos ambientes.
3.4.4
AduboGL
Sim
Sim
No
Sim
Sim
No
2D/3D
Aplicao
68
Pode-se observar que a aplicao desenvolvida no se enquadra apenas em dois itens,
que so: resoluo de exerccios via cdigo-fonte e permite alterao da posio da cmera. O
primeiro item s atendido pelos frameworks e o segundo item apenas pelo Edugraph. Como
pontos positivos, observa-se que a aplicao utiliza os dois tipos de cenrio e atende os
demais itens.
69
4 CONCLUSES
70
4.1
EXTENSES
71
REFERNCIAS BIBLIOGRFICAS
ALMEIDA, Paulo N. de. Educao ldica: tcnicas e jogos pedaggicos. 7. ed. So Paulo:
Loyola, 1994.
ARAJO, Luciana P. AduboGL aplicao didtica usando a biblioteca openGL:
documentao. Blumenau. 2012. Disponvel
em: <http://www.inf.furb.br/gcg/gcg/download/TCC2012-1-19LucianaPAraujo_documentacao.zip>. Acesso em: 18 jun. 2012.
BATTAIOLA, Andr L. et al. Desenvolvimento de um software educacional com base em
conceitos de jogos de computador. In: SIMPSIO BRASILEIRO DE INFORMTICA NA
EDUCAO, 13., 2002, So Leopoldo. Anais... So Leopoldo: SBC, 2002. p. 282-290.
Disponvel em: <http://www.br-ie.org/pub/index.php/sbie/article/view/189/175>. Acesso em:
15 ago. 2011.
BORGES, Thiago T. et al. Ambiente grfico para a anlise de sistemas eltricos de potncia
utilizando OpenGL. In: CONGRESSO BRASILEIRO DE AUTOMTICA, 15., 2004,
Gramado. Anais... Porto Alegre: SBA, 2004. No paginado. Disponvel em:
<http://www.lti.pcs.usp.br/robotics/grva/publicacoes/outras/cba2004-cdrom/cba2004/pdf/694.pdf>. Acesso em: 10 set. 2011.
CARNEIRO, Marcelo M. et al. Interact: um modelo de interao para interfaces 2D por
manipulao direta. In: SIMPSIO BRASILEIRO DE COMPUTAO GRFICA E
PROCESSAMENTO DE IMAGENS, 10., 1997, Campos de Jordo. Anais... Campos de
Jordo: SBC, 1997. No paginado. Disponvel em:
<http://sibgrapi.sid.inpe.br/rep/dpi.inpe.br/ambro/1998/05.21.14.19?languagebutton=en&mirr
or=sid.inpe.br/banon/2001/03.30.15.38.24&searchsite=sibgrapi.sid.inpe.br:80&searchmirror=
sid.inpe.br/banon/2001/03.30.15.38.24&choice=brief>. Acesso em: 5 set. 2011.
CERQUEIRA, Rmulo G.; SILVA, Vnia C. Aprendendo conceitos de computao grfica
atravs de um ambiente multimdia e interativo com OpenGL. In: WORKSHOP SOBRE
INFORMTICA NA ESCOLA / CONGRESSO DA SOCIEDADE BRASILEIRA DE
COMPUTAO, 15., 2009, Bento Gonalves. Anais... Porto Alegre: SBC, p. 1733-1742.
Disponvel em:
<http://bibliotecadigital.sbc.org.br/?module=Public&action=PublicationObject&subject=0&p
ublicationobjectid=134>. Acesso em: 5 set. 2011.
COHEN, Marcelo; MANSSOUR, Isabel H. OpenGL: uma abordagem prtica e objetiva. So
Paulo: Novatec, 2006.
FLIX, Kao C. V-ART. Porto Alegre, fev. 2009. Disponvel em:
<http://vart.codeplex.com/>. Acesso em: 22 maio 2012.
72
HENRIKSEN, Poul; KLLING, Michael. Greenfoot: combining object visualisation with
interaction. In: CONFERENCE ON OBJECT ORIENTED PROGRAMMING SYSTEMS
LANGUAGES AND APPLICATIONS, 4., 2004, Vancouver. Procedings... New York: ACM
Digital Library, 2008. No paginado. Disponvel em:
<http://dl.acm.org/citation.cfm?doid=1028664.1028701>. Acesso em: 20 ago. 2011.
KHRONOS GROUP. GLUT and OpenGL utility libraries. [Califrnia], 2011. Disponvel
em: <http://www.opengl.org/resources/libraries/>. Acesso em: 03 set. 2011.
MACHADO, Liliane S.; MORAES, Ronei M. Cenrios 3D interativos com software livre.
Revista de Informtica Terica Aplicada, Porto Alegre, v. 12, n. 2, p. 91-112, maio/ago.
2005. Disponvel em: <http://www.de.ufpb.br/~labteve/publi/2005_rita.pdf>. Acesso em: 05
set. 2011.
NAKAMURA, Ricardo; TORI, Romero. Ambientes virtuais em Java. In: CARDOSO,
Alexandre; LAMOUNIER, Edgard. (Org.). Realidade virtual: uma abordagem prtica. So
Paulo: [s.n.], 2004. p. 104-122.
NEIDER, Jackie et al. OpenGL programming guide: the official guide to learning OpenGL,
release 1. 5th ed. [Califrnia]: Silicon Graphics, 1994. No paginado. Disponvel em:
<http://fly.cc.fer.hr/~unreal/theredbook/>. Acesso em: 10 set. 2011.
OLIVEIRA, Celina C.; COSTA, Jos W.; MOREIRA, Mercia. Ambientes informatizados
de aprendizagem: produo e avaliao de software educativo. Campinas: Papirus, 2001.
POZZER, Cesar T. Grafo de cena. Santa Maria, 2007. Disponvel em: <http://wwwusr.inf.ufsm.br/~pozzer/disciplinas/cga_2_grafo_cena.pdf>. Acesso em: 04 jun. 2012.
______. OpenGL: conceitos bsicos. Santa Maria, 2011. Disponvel em: <http://wwwusr.inf.ufsm.br/~pozzer/disciplinas/cg_9_opengl_basico.pdf>. Acesso em: 10 set. 2011.
REIS, Dalton S. Computao grfica. Blumenau, out. 2011. Disponvel em:
<http://www.inf.furb.br/gcg/disciplinas/cg/Material.html>. Acesso em: 26 out. 2011.
______. Disciplina computao grfica. Blumenau, abr. 2012. Disponvel em:
<http://www.inf.furb.br/gcg/disciplinas/cg/CG-Slides/CG-03.pdf>. Acesso em: 30 jun. 2012.
SCHNEIDER, Bruno. O framework V-ART. Lavras, set. 2009. Disponvel em:
<http://algol.dcc.ufla.br/~bruno/v-art/>. Acesso em: 12 mar. 2012.
SCHRAMM, Elizandro J. AduboGL ES 2.0: aplicao didtica usando a biblioteca OpenGL
ES no IOS. 2012. 78 f. Trabalho de concluso de curso (Bacharelado em Cincia da
Computao) Centro de Cincias Exatas e Naturais, Universidade Regional de Blumenau,
Blumenau.
73
SILVA, Djalma I. Visualizao cientfica de dados analticos filtrados por formulaes
matemticas. 2000. 130 f. Dissertao (Mestrado em Informtica) - Curso de Ps-graduao
em Informtica, Universidade Federal do Paran, Curitiba. Disponvel em:
<http://dspace.c3sl.ufpr.br:8080/dspace/bitstream/handle/1884/25115/D%20%20SILVA%2c%20DJALMA%20INACIO%20DA.pdf?sequence=1>. Acesso em: 09 mar.
2012.
VAHLDICK, Adilson; MATTOS, Mauro M. Relato de uma experincia no ensino de
algoritmos e programao utilizando um framework ldico. In: WORKSHOP DE
AMBIENTES DE APOIO APRENDIZAGEM DE ALGORITMOS E PROGRAMAO/
SIMPSIO BRASILEIRO DE INFORMTICA NA EDUCAO, 2., 2008, Fortaleza.
Anais... Fortaleza: SBC, 2008. No paginado. Disponvel em:
<http://sbie2008.virtual.ufc.br/CD_ROM_COMPLETO/workshops/workshop%202/Relato%2
0de%20uma%20Experi%EAncia%20no%20Ensino%20de%20Algoritmos%20e.pdf>. Acesso
em: 20 ago. 2011.
VALENTE, Luis. Representao de cenas tridimensionais: grafo de cenas. Rio de Janeiro,
2004. Disponvel em: <http://www.paiossin.com/wordpress/wp-content/plugins/downloadsmanager/upload/Arquivos%20Faculdade/TCC%201/LuisValente_SceneGraph.pdf>. Acesso
em: 04 jun. 2012.
WRIGHT JNIOR, Richard et al. OpenGL suberbible: comprehensive tutorial and
reference. 5th. Boston: Pearson Education, 2011.
74
APNDICE A Exerccio de OpenGL
O exerccio foi utilizado para testar a aplicao com usurios e tambm para mostrar
como resolv-lo dentro da AduboGL. O exerccio utiliza de transformaes sobre a forma
geomtrica cubo. No Quadro 33 tem-se o exerccio aplicado no teste de usabilidade.
Exerccio de computao grfica:
1) Faa uma cena 3D que contenha 3 cubos, com as caractersticas seguintes:
o primeiro cubo deve estar na origem e ser de cor azul;
o segundo cubo deve ser na cor verde e estar transladado em 4 unidades para x e 5
unidades para y;
o terceiro cubo deve ser na cor vermelha e deve estar escalado em 2 unidades em
todos os trs eixos, deve ser rotacionado 4 unidades em x e 2 em z e deve ser
transladado em 5 unidades no eixo z.
75
APNDICE B Croqui das peas da AduboGL e suas imagens em PNG
Aps o desenho delas, foi realizado um croqui das peas que representariam as
transformaes. Elas tem um detalhe na borda esquerda para se encaixar a um comando
glPushMatrix() glPopMatrix().
outra e trs posies sendo elas um tringulo, um quadrado e um losango para representar os
eixos x, y e z respectivamente. Elas podem ser vistas na Figura 31.
Depois do croqui das peas originais foi feito um mais simples para iniciar a
implementao. Foi decido ter apenas dois tipos de peas, uma em formato de uma letra C
quadrada para representar o comando glPushMatrix() glPopMatrix() e as demais em
forma de um quadrado alterando apenas sua cor. Foram calculadas as dimenses dessas peas
76
para que pudessem se encaixar. A Figura 32 representa a pea glPushMatrix()
glPopMatrix()
com uma pea interna e suas dimenses, assim como o ponto quente de
As figuras iniciais tambm foram modelas do Corel Draw 2004 em formato PNG para
posteriormente substituir a modelagem da pea a partir das primitivas da OpenGL.