Tutorial 2 – Explorando alguns recursos
1 - Introdução Agora é só verificar que tecla foi pressionada criando uma estrutura condicional, um switch e verificaremos se a tecla pressionada é o esc.
//Esse metodo é utilizado quando um evento de teclado ocorrer void handleKeyDown(SDL_keysym *keysym) { //Verifica qual tecla foi pressionada switch(keysym->sym) { case
SDLK_ESCAPE: // caso a tecla for esc,
sair do programa exit(0); // função da
biblioteca padrão c/c++, stdlib.h break; } }
Acrescentaremos um case na função processEvent, função criada no primeiro tutorial, o case SDL_KEYDOWN que será processado, caso a tecla for pressionada. Dentro dessa estrutura, colocaremos a nossa função handleKeyDown.
//Processa os
Eventos ocorridos void processEvent() { SDL_Event
event; while(SDL_PollEvent(&event))
{ switch(event.type)//captura o tipo de evento
ocorrido { case
SDL_KEYDOWN: //caso seja um evento de teclado, sendo
pressionado
handleKeyDown(&event.key.keysym); break;
case SDL_RESIZABLE: //caso o evento seja de alteração da janela mainWindow
= SDL_SetVideoMode( event.resize.w, event.resize.h, bpp, flags );
resizeOpenGL(event.resize.w, event.resize.h); break; case SDL_QUIT: exit(0);
break; } } }
3 – Configurando a Projeção Visando a facilitar a legibilidade, criaremos a função initProjection, que armazenara o conteúdo necessário para a configuração do modo de visualização na tela. Para alterar o modo de projeção na tela, utilizaremos a função glMatrixMode, passando como parâmetro GL_PROJECTION, disendo que qualquer operação feita agora, alterara a matriz de projeção. Vamos inicializar a matriz de projeção com a matriz identidade utilizando a função glLoadIdentity. Agora mudemos o modo de projeção para ortogonal usando a função gluOrtho2D(esquerda, direita, base, topo), onde esquerda e direita são os cantos da tela e base e topo são a parte inferior e superior respectivamente da tela.
Tela do monitor após gluOrtho2D.
//Modo de
visualização void initProjection() { glMatrixMode(GL_PROJECTION); glLoadIdentity();
gluOrtho2D(-1, 1, -1, 1); //Aqui criamos um plano cartesiano normalizado glMatrixMode(GL_MODELVIEW);
// Retorna para o modelo de visão glLoadIdentity(); }
4
– Desenhando primitivas Para desenharmos
primitivas, no caso, um trianglo basta acrescentar as
seguintes linhas de codigo na função rendering, entre glClear
e SDL_GL_SwapBuffers.
//Funcao onde sera posto os
desenhos void
rendering() { glClear( GL_COLOR_BUFFER_BIT
);
//prepara o opengl para receber os vertex.
Inicia a inserção de vertex no pipeline
do opengl glBegin(GL_TRIANGLES);//Desenha um trianglo glVertex2f( 0.0f, glVertex2f( -0.5f, glVertex2f( 0.5f, glEnd(); SDL_GL_SwapBuffers(); }
A OpenGL oferece 10 tipos de primitivas para ser passado como parâmetro para o glBegin(GLenum primitiva), onde as primitivas são: · GL_LINES: exibe uma linha a cada dois comandos glVertex; · GL_LINE_STRIP: exibe uma seqüência de linhas conectando os pontos definidos por glVertex; · GL_LINE_LOOP: exibe uma seqüência de linhas conectando os pontos definidos por glVertex e ao final liga o primeiro como último ponto; · GL_POLYGON: exibe um polígono convexo preenchido, definido por uma seqüência de chamadas a glVertex; · GL_TRIANGLES: exibe um triângulo preenchido a cada três pontos definidos por glVertex; · GL_TRIANGLE_STRIP: exibe uma seqüência de triângulos baseados no trio de vértices v0, v1, v2, depois, v2, v1, v3, depois, v2, v3, v4 e assim por diante; · GL_TRIANGLE_FAN: exibe uma seqüência de triângulos conectados baseados no trio de vértices v0, v1, v2, depois, v0, v2, v3, depois, v0, v3, v4 e assim por diante; · GL_QUADS: exibe um quadrado preenchido conectando cada quatro pontos definidos por glVertex; · GL_QUAD_STRIP: exibe uma seqüência de quadriláteros conectados a cada quatro vértices; primeiro v0, v1, v3, v2, depois, v2, v3, v5, v4, depois, v4, v5, v7, v6, e assim por diante.
4
– Referência [1] Documentação SDL www.libsdl.org [2] www.opengl.org [3] www.mesa3d.org [6] OpenGL
Super Bible [7] OpenGL
RedBook [8] Premier.Press.Beginning.OpenGL.Game.Programming |