Funcionando o desenho em OpenGL, as próximas preocupações envolveram como fazer o jogo funcionar, ou seja, lidar com as matrizes OpenGL e com as transformações de translação, rotação e escala.
A forma elegante com que implementei algumas funcionalidades de modo a facilitar a manipulação dessas matrizes pelo usuário foi retornar o ponteiro this a fim de cada método envolvendo a conversão de matriz e transformação poder ser mais bem organizado. Para exemplificar, observe o código abaixo:
//Seta a projeção utilizada
(perspectiva)
jogo->setProjectionMatrix()->setIdentity()->setPerspectiveProjection(fov,1.5,20.0);
//Matriz de transformação
jogo->setModelViewMatrix()->setIdentity();
//Transformação e desenho de uma esfera
glPushMatrix();
jogo->translate(2,0,0)->rotate(angle+1,0,1,0);
glColor3f(0.8,0.3,0);
glutWireSphere(0.5,30,10);
glPopMatrix();
Essa implementação foi feita com algumas dependências e modularizações erradas. Ainda pretendo planejar melhor o funcionamento das mesmas.
Ainda implementei uma classe de câmera que chamei de paCamera. Esta classe basicamente contém o update da câmera e os cálculos para strafe, movimentação para frente e para trás e rotação da câmera conforme o mouse. Para o cálculo matemático, integrei as classes de vetores desenvolvidas pelo professor Vinicius Mendonça. Essa classe de câmera ainda necessita de alguns ajustes, mas com essas implementações ja foi possível oferecer um bom controle da câmera para jogos em geral.
Por fim, as ultimas implementações da engine foram as envolvendo o desenho de texturas. Para tal tive que levar em consideração que a SDL carrega as texturas invertidas. A solução foi inverter os píxels um a um e recalcular seu RGB em um código que demorei dias para entender com perfeição. Entender esse código me fez conhecer melhor os recursos que tornam a SDL uma lib tão poderosa para tratamento de imagens.
O suporte para conversão da textura é implementado em paSDL e o próprio carregamento em paOpenGL.
Em geral essas foram as primeiras implementações. Muita coisa falta ser implementada e modificada ainda. A forma como será desenvolvido o projeto ao longo das semanas será melhor explicado pela Keli nos próximos posts.
Até lá...
Nenhum comentário:
Postar um comentário