Voltar para relatório
técnico
Versão
0.3 - Cenas texturizadas e jogador escolhe a posição
através do cursor
Nesta
versão os objetos são texturizados e o usuário
interage com o jogo através do cursor, para isso utlizou-se
o
mecanismo de picking para obter a posição selecionada
do tabuleiro.
- Textura
A
carga de textura foi realizada da seguinte maneira:
- Identificando o objeto de textura, utilizando o comando
glGenTextures (6, *texture_id);
- Associando a textura ao seu identificador com glBindTexture
(GL_TEXTURE_2D, texture_id[0]);
- E então habilitamos a textura: glEnable (GL_TEXTURE_2D);
Para a aplicação da textura foi preciso criar
uma relação entre os vértices da textura
e os vértices dos polígonos sobre os quais
foram mapeadas as texturas escolhidas. Para essa finalidade
o comando glTexCoord2f(x, y); que contém as coordenadas
da textura foi utilizado antes da definição
de cada vértice do polígono 3D.
Os
objetos texturizados podem ser visualizados abaixo:
- Tabuleiro
de 10x10 posições

Fig.1: Tabuleiro 10x10
|
- Bandeira
e Bomba

Fig. 2: Bandeira
|

Fig. 3: Bomba
|

Fig. 4: Navio
|

Fig. 5: Barco
|

Fig. 6: Submarino
|
- Picking
A
cena ao receber um evento de botão do mouse pressionado,
utiliza o mecanismo de picking que consiste em redesenhar
as geometrias de manipulação dos componentes
da cena no modo de seleção, restringindo
o desenho a uma região próxima ao cursor,
para isso, muda-se os parâmetros de visualização
de modo que apenas aquelas primitivas próximas
ao cursor é que estão no volume de visualização
alterado, para que isso seja feito utiliza-se o comando:
gluPickMatrix.
No modo de seleção, as informações
do desenho não são enviadas ao framebuffer
mas retornadas para a aplicação, onde estão
armazenados os id´s dos objetos conforme eles são
renderizados. É possível renderizar uma
cena através do uso de glRenderMode(mode) em um
dos três modos: GL_RENDER, GL_FEEDBACK, GL_SELECTION.
Utilizou-se o modo de seleção e para isso
foi necessário seguir os passos:
- Especificar o buffer de nome através do comando
glSelectBuffer();
- Inicializar o buffer de nome com glInitNames;
- Entrar no modo de seleção, glRenderMode(GL_SELECTION);
- Carregar um nome na pilha de nomes, glLoadName(id),
aqui o id utilizado foi o número que identifica
a coluna;
- Colocar o id no buffer de nome, neste caso utilizou-se
o número da linha como id, glPushName(id);
- Retirar o último nome do buffer de nomes, glPopName();
- Renderizar a cena na forma normal (padrão), glRenderMode(GL_RENDER);
- Examinar o conteúdo do frame buffer, ou seja,
o conteúdo selecionado, que aqui é o número
da linha e da coluna.
|
| |
|