Programação de Jogos usando C++ & OpenGL - Dia 1

Programação de Jogos usando C++ & OpenGL

Primeiros Passos: Configurando

Para meus experimentos, vou utilizar S.O. Ubuntu 9.10 com o Eclipse para C++ (http://www.eclipse.org/downloads/).
Após instalar o Eclipse e fazer um Olá Mundo, chegou a hora de pegar as bibliotecas p/ trabalhar com o openGL.
Segui as recomendações desse blog: http://www.ferdychristant.com/blog/articles/DOMM-72MPPE
Entrei no Synaptic e procurei o pacote freeglut3-dev ( o freeglut3 já etava instalado para mim ).
No Eclipse, fui em Project > Properties > C/C++ Builder > Settings > GCC C++ Linker > Libraries e adicionei nas libraries ( -l ) "glut".
Compilei, então, o código proposto pelo próprio blog.


Entendendo o openGL. 1ª Parte: O Básico

Como eu sou novato no openGL, vou primeiro fazer uns testes para saber do que ele é capaz.
Eu sei que ele tem capacidade para programação 3D com super efeitos e etc, mas o meu objetivo aqui é começar de baixo.
De acordo com o GameDev (http://www.gamedev.net/reference/design/features/makegames/page2.asp) um bom jogo para iniciar
é TETRIS.
Talvez eu esteja me subestimando, mas quero algo ainda mais simples. Acho que um jogo estilo SNAKE é mais fácil que TETRIS.

Bom, meu primeiro teste funcionou normalmente. Desenhei um TRIANGULO numa janela.
Estranhamente eu tive que usar esse método glutInit(&argc, argv);
Acho que só é necessário no Linux.

glutDisplayFunc(void)
Seta o metodo que vai desenhar as coisas na janela.
O legal é que, sem isso, vc roda o programa e nao acontece nada.

glutMainLoop
http://www.opengl.org/documentation/specs/glut/spec3/node14.html#SECTION00041000000000000000
Loop principal. Evita o programa de ser finalizado.

openGlTest001


Entendendo o openGL. 2ª Parte: Fullscreen

Eu pretendo fazer todos os meus jogos serem FULLSCREEN, portanto, esse tópico é de grande importancia.
O tutorial http://www.swiftless.com/tutorials/opengl/fullscreen.html ensina bem como resolver isso.
Basicamente, vc tem o glutGameModeString com o parametro a larguraxaltura:colordepth@hertz
Exemplo:
glutGameModeString( "990x768:32@75" );
990x760 pixel
32bits de cores
75hz

Para aplicar usa-se glutEnterGameMode(); e para sair usa-se glutLeaveGameMode();
Claro que, se eu fizer o meu jogo fullscreen eu nao vou ter como FECHAR o aplicativo.
Sendo assim, preciso setar um método que me garanta que, ao pressionar ESC, o programa vá fechar:

NOTA: PARA USAR O exit(0) É NECESSARIO #include

void keyboard(unsigned char key, int x, int y) {
if (key == 27) {
glutLeaveGameMode();
exit(0);
}
}

e depois dizer ao openGL que esse método existe:

glutKeyboardFunc (keyboard);

Bom, parece que com o freeGlut3 as coisas não saem como planejado. Eu não consegui que meus aplicativos ficassem
fullscreen corretamente :(
Com SDL eu consegui o truque. É bem provavel, entao, que eu prefira aderir ao SDL por essa limitação do openGL.

Nenhum comentário:

Postar um comentário