Tutorial OpenGL v3.0

Nesse artigo, trago-lhes a biblioteca SFML junto com OpenGL.

[ Hits: 14.620 ]

Por: Thiago Henrique Hüpner em 15/06/2015


Brincando com o OpenGL



Agora que temos uma janela pronta, vamos usar o OpenGL.

Vamos criar a (tão famosa) função "desenhaNaTela()":

#include <SFML/OpenGL.hpp>
#include <SFML/Graphics.hpp>

// Função que Desenha na Tela
void desenhaNaTela(){

// 'Limpa' a tela usando a cor de 'limpar' a tela
    glClear(GL_COLOR_BUFFER_BIT);

    // Define a Cor de 'limpar' para Branco usando
            //   Red     Blue    Green   Alpha
    glClearColor(255.0f, 255.0f, 255.0f, 1.0f);

    // Reinicia todas as transformações e/ou rotações
    glLoadIdentity();

    // Rotaciona x por y com 0 de profundidade (usado p/ jogos 3D)
    glTranslatef(400/2,400/2,0);

    // Começa a desenhar Quadrados
    glBegin(GL_QUADS);

        // Colori de Verde
        glColor3f (  0.0f,  1.0f, 0.0f );

        // Lado Inferior Esquerdo
        glVertex2f( 0,  10.0f );

        // Colori de Vermelho
        glColor3f (  1.0f,  0.0f, 0.0f );

        // Lado Superior Esquerdo
        glVertex2f( 0, 0 );

        // Colori de Amarelo
        glColor3f (  1.0f,  1.0f , 0.0f);

        // Lado Superior Direito
        glVertex2f(  10.0f, 0 );

        // Colori de Azul
        glColor3f (  0.0f,  0.0f, 1.0f );

        // Lado Inferior Direito
        glVertex2f(  10.0f,  10.0f );

    // Termina de Desenhar
    glEnd();
}

// Funcao para inicializar o OpenGL
void inicializaOpenGL() {

    // Define a Cor de 'limpar' para Branco usando
    //   Red     Blue    Green   Alpha
    glClearColor(255.0f, 255.0f, 255.0f, 1.0f);

    // Avisa o OpenGL que qualquer alteração futura
    // afetará a Câmera ( O Observador)
    glMatrixMode(GL_PROJECTION);

    //  Reinicia todas as transformações e/ou rotações
    glLoadIdentity();

    // Define a projeção cartesiana 2D iniciando de (0,0)
    // No Lado Superior Esquerdo (ficando igual a projeção do SDL 'puro')
    gluOrtho2D(0,400,400,0);

    // Avisa o OpenGL que qualquer alteração futura
    // afetará o/os desenho/desenhos
    glMatrixMode(GL_MODELVIEW);

    // 'Limpa' a tela usando a cor de 'limpar' a tela
    glClear(GL_COLOR_BUFFER_BIT);
}

int main(void) {
    // Cria uma janela de 400x400 com o titulo "Teste com OpenGL"
    sf::RenderWindow janela (sf::VideoMode(400,400),"Teste com OpenGL");

    // Variavel booleana para indicar se o programa "estaRodando"
    bool estaRodando = true;
    // Variavel para Eventos
    sf::Event evento;

    // Inicializa o OpenGL
    inicializaOpenGL();

    // Main Loop
    while(estaRodando) {
        // Se existir eventos coloca na variavel
        while(janela.pollEvent(evento)) {
            // Se foi clicado no 'X' da janela
            if(evento.type == sf::Event::Closed) {
                // "estaRodando" é falsa
                estaRodando = false;
            }
        }
        // Comecar o OpenGL aqui

        desenhaNaTela();

        janela.display();
    }

    janela.close();

    return 0;
}

Linux: Tutorial OpenGL v3.0
Compile com:

g++ SegundaJanela.cpp -o SegundaJanela `pkg-config sfml-all --cflags --libs` -lGL -lGLU

Explicação:

void desenhaNaTela() :: Função que será responsável por "desenhar na tela".

glTranslatef(400/2,400/2,0); :: Rotaciona x por y com 0 de profundidade (usado para jogos 3D).

glBegin(GL_QUADS); :: Começa a desenhar quadrados.

glColor3f ( 0.0f, 1.0f, 0.0f ); :: Define alguma cor, nesse caso, o verde.

glVertex2f( 0, 10.0f ); :: Define um ponto (x,y), nesse caso, é o lado inferior esquerdo.

glEnd(); :: Termina de desenhar.

E no main:

desenhaNaTela(); :: Chama a função de desenhar na tela.

Agora podemos brincar com o OpenGL. =D

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Primeira integração do OpenGL com o SFML
   3. Brincando com o OpenGL
   4. Simulando uma gambiarra
   5. Simulando uma gambiarra - Parte 2
   6. Agradecimentos, fontes e links úteis
Outros artigos deste autor

Tutorial OpenGL

Tutorial OpenGL v2.0

Visual Studio no Linux

Ubuntu/Debian/Kali Linux e outros no Android

Tutorial SFML

Leitura recomendada

Programação com números inteiros gigantes

Desenvolvendo aplicativo para autenticação biométrica utilizando a Libfprint

SDL - Ótimo para criação de jogos

Algum humor e C++ Design Patterns (parte 1)

A poderosa nuvem: Intel® DevCloud com GPU Iris Xe Max!

  
Comentários
[1] Comentário enviado por Thihup em 16/06/2015 - 09:17h

Sem comentários? o.0

Acho que já deu de artigos sobre OpenGL, certo?

Se quiserem, ainda tenho mais um artigo pré encaminhado.

[]'s

T+

[2] Comentário enviado por alexsdn em 16/06/2015 - 22:48h

Excelente artigo, de grande valia. Espero que você continue contribuindo do básico ao avançado sobre OpenGL.
Abraço!



Contribuir com comentário