top of page

T2 - Desenvolvimento de Game em 3D


1.0 Introdução


Neste trabalho será demonstrado um jogo em 3D com o uso de OpenGl. O game apresenta objetivo, início, fim, instruções, controle de vitória e derrota. Existem quatro componentes geométricos diferentes e três objetos animados. Além disso, haverá animação de câmera e interação com o mouse e/ou teclado.


2.0 Ambiente de desenvolvimento

O OpenGl é uma biblioteca de rotinas gráficas e de modelagem bidimensional (2D) e tridimensional (3D). O game foi desenvolvido em C++, utilizando a IDE Visual Studio 2015, em decorrência da facilidade para realizar depuração e verificar os estados do jogo.


3.0 Problema desenvolvido


A fim de adquirir maior conhecimento na utilização da biblioteca OpenGL, a qual é ensinada no mundo inteiro, de forma básica, para desenvolvimento de jogos, aplicamos este estudo em um jogo do gênero “Tower Defense”, no qual frequentemente são encontrados exemplares desenvolvidos com framework Unity.


4.0 Implementação de código:


4.1 - Movimentação dos inimigos


A criação dos inimigos surgiu de uma lista de “struct inimigos”, que a todo momento é desenhado no método “montarInimigos()”. Neste método, além de desenhar os inimigos, também é possível movimentar o projétil, e verificar colisão com a torre e o inimigo.

Exemplo:


4.2 - Movimentação de câmera

A perspectiva de visão do jogo a todo momento pode ser alterada, utilizando as setas do teclado. Esta funcionalidade está vinculada a função “teclasEspeciais()”. É possível rotacionar a câmera (modo de visão do jogo), visualizar de cima do jogo e abaixo.

4.3 - Selecionar o inimigo


O jogador pode selecionar o inimigo no qual o disparo do projétil será direcionado. Para a utilização desta funcionalidade é utilizada a função “OnMouseClick()” a qual obtém o id do objeto selecionado, cor, posição do eixo X e Y. Após selecionar o inimigo, este é alterado a cor, logo facilitando a visualização para o jogar quem foi selecionado.

Exemplo:

4.4 - Nível de dificuldade do jogo, ganhar ou perder


A cada momento é verificado a quantidade de vida da torre, a fim de informar a quantidade de vida que resta, e quantidade de inimigos para informar quantos restam. Caso a quantidade de inimigos diminua de 10 em 10, o nível de dificuldade aumenta, logo os inimigos ficam mais rápidos, o poder de combate é maior e suas cores são alteradas. Quando todos inimigos forem eliminados o jogador ganha, porém caso a vida da torre se esgote o jogador perde. Todas as funcionalidades estão dentro do método “verificarGanhadorNivel()”.


4.5 - Movimentação dos objetos


A movimentação dos objetos acontece com o cálculo de distância entre dois pontos (inimigo e bala ou inimigo e torre), normalização do vetor e aplicação da velocidade sobre cada ponto dos eixos X, Y e Z. A aplicação desta funcionalidade ocorre nos métodos “movimentaInimigos()”, “movimentaBala()”.

Exemplo:


4.6 - Verificação de colisão


A colisão dos objetos é verificado no método genérico, assim aproveitando o código para demais funcionalidades. No método é considerado o raio do objeto, além disso é manipulado o código para aumentar as chances de acerto. O método retorna um booleano, informado a colisão. A aplicação desta funcionalidade ocorre no método “verificarColisaoGenerico()”.


5.0 Protótipo


Conforme explicado, o desenvolvimento do jogo foi baseado nos games já existentes. Além disso, tentamos simular um farol, como referência de torre. O efeito especial surgiu com base na iluminação do farol. Até o momento, existe como referência de jogo online o "http://www.kongregate.com/games/XmmmX99/the-perfect-tower".


6.0 Resultados preliminares

Atualmente nosso game contém funcionalidades de rendering, colisão, vetorização. A partir destas aplicações para funcionamento do jogo foi possível obter resultados que agem de forma diferente em relação a rendering.

  1. Utilizando glVertex3f(x,y,z) o desenho vértice a vértice não é considerado um objeto em 3D, tendo em vista que são considerados 2D.

  1. Para a técnica de detecção de colisão de dois círculos foi utilizado o material de Zanardo (2016), o qual ensina aplicação do cálculo de pitágoras "sqrtf(pow((A.x - B.x), 2) + pow((A.y - B.y), 2) + pow((A.z - B.z), 2))".

  2. A movimentação dos inimigos e objetos dentro do game, utiliza as equações de distância, normalização do vetor e aplicação de velocidade.

7.0 Hipótese do jogo


A medida que o jogo ocorre e a quantidade de informações apresentadas em OpenGl, o objeto acaba perdendo-se visualmente e em certo momento não é possível dar continuidade do jogo. Além disso, para manter os objetos alinhados em relação a fila de apresentação visual ao jogador, é requerido a manipulação de pilha em OpenGL.


8.0 Apresentação de objetos em pilha


Em OpenGl quando utiliza-se glTraslate ou glRotate, acaba afetando a matriz de modelview, logo quando são aplicadas várias transformações a matriz também muda.

A manipulação dos objetos requerer o glPushMatriz() e glPopMatriz(), assim é possível salvar a tela atual para empilhar e após é possível carregar os dados da pilha.


9.0 Análise dos resultados do jogo e discussão


Os dados do presente estudo demonstram que existem "N" fórmulas diferentes criar objetos em 3D, técnicas de colisão e movimentação de objetos. Estes achados são corroborados por Buss (2003) que aborda todo o desenvolvimento do sistema em opengl.

10.0 Conclusão


Com o desenvolvimento do jogo Tower Defense, inspirado no jogo online, citado anteriormente, utilizamos a biblioteca OpenGl, aprendemos a manipular objetos em 2D e 3D, a criar métodos genéricos e a trabalhar em baixo nível.

Conseguimos absorver maior conhecimento em relação a área de computação gráfica de modo básico, o funcionamento do modelview e a manipulação de câmera.

Link do jogo: https://RenanCS@bitbucket.org/RenanCS/jogo_cg_one.git

11.0 Referências

OPENGL - THE INDUSTRY'S FOUNDATION FOR HIGH PERFORMANCE GRAPHICS. Disponível em: <https://www.opengl.org/>. Acesso em: 27 nov. 2016.

DEVMEDIA. Criando nosso primeiro programa em C++ e OpenGL. Disponível em: <http://www.devmedia.com.br/criando-nosso-primeiro-programa-em-c-e-opengl/11805>. Acesso em: 27 nov. 2016.

ZANARDO, G. R. Técnicas de Detecção de Colisão para Jogos. Disponível em <http://www.vsoftgames.com/site/files/tecnicas_deteccao_colisao_para_jogos.pdf>. Acesso em: 27 nov. 2016.

BUSS, S. R. 3D Computer Graphics: A Mathematical Introduction with OpenGL. United Kingdom: Cambridge University Press, 2003.















bottom of page