Tutorial OpenGL v3.0

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

[ Hits: 14.600 ]

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


Primeira integração do OpenGL com o SFML



Vamos logo a um exemplo:

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

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

    // 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

        janela.display();
    }

    janela.close();

    return 0;
}

Linux: Tutorial OpenGL v3.0
Compile com:

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

O código já está comentado, mas vou explicar também:

#include <SFML/OpenGL.hpp> :: Inclui a biblioteca do OpenGL;

#include <SFML/Graphics.hpp> :: Inclui a biblioteca Gráfica do SFML;

void inicializaOpenGL(void) :: A função está de volta. Ela é responsável por definir os parâmetros padrões do OpenGL.

glClearColor(255.0f, 255.0f, 255.0f, 1.0f); :: Define a cor de limpar a tela para branco.

glMatrixMode(GL_PROJECTION); :: Avisa o OpenGL que qualquer alteração futura afetará a câmera (o observador).

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

gluOrtho2D(0,400,400,0); :: Define o plano cartesiano começando em (0,0) no canto superior esquerdo.

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

glClear(GL_COLOR_BUFFER_BIT); :: "Limpa" a tela usando a cor de "limpar" a tela.

int main(void) :: Função padrão.

sf::RenderWindow janela (sf::VideoMode(400,400),"Teste com OpenGL"); :: Cria a variável "janela" com 400x400 e com o título "Teste com OpenGL".

bool estaRodando = true; :: Variável para indicar se o programa está ou não rodando.

sf::Event evento; :: Variável de eventos.

inicializaOpenGL(); :: Chamamos a função para inicializar o OpenGL.

while(estaRodando) :: Enquanto estiver rodando.

while(janela.pollEvent(evento)) :: Enquanto haver eventos coloque na variável evento.

if(evento.type == sf::Event::Closed) :: Se apertou no "X" da janela.

estaRodando = false; :: estaRodando recebe falso.

janela.display(); :: Atualiza o Duplo Buffer (caso ativado) e mostra na tela.

janela.close(); :: Encerra a janela.

return 0; :: Ocorreu tudo bem. ;)

Bom, se forem comparar com o artigo de SFML, verão que não mudou quase nada, só na parte da função do OpenGL, mas o que eu quero dizer: Não precisa fazer alterações na criação da janela para utilizar o OpenGL (mas é possível):

Se fizer isso antes de criar a janela e modificar um pouco o VideoMode, terá suas configurações "desejadas".

sf::ContextSettings confOpenGL;
confOpenGL.depthBits = 24;
confOpenGL.stencilBits = 8;
confOpenGL.antialiasingLevel = 4;
confOpenGL.majorVersion = 3;
confOpenGL.minorVersion = 0;

sf::RenderWindow janela (sf::VideoMode(400,400),"Teste com OpenGL",sf::Style::Default,confOpenGL);

Agora, se quiser saber quais atributos já estão ativados, só fazer isso depois de criar a janela:

#include <iostream>

sf::ContextSettings settings = janela.getSettings();

std::cout << "depth bits:" << settings.depthBits << std::endl;
std::cout << "stencil bits:" << settings.stencilBits << std::endl;
std::cout << "antialiasing level:" << settings.antialiasingLevel << std::endl;
std::cout << "version:" << settings.majorVersion << "." << settings.minorVersion << std::endl;

Bom, com essa parte, já podemos criar a janela. A partir daqui, a coisa fica "interessante"...

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

Ubuntu/Debian/Kali Linux e outros no Android

Tutorial OpenGL

Tutorial OpenGL v2.0

Tutorial SFML

Visual Studio no Linux

Leitura recomendada

Alocação dinâmica

Utilizando técnicas recursivas em C e C++

Tutorial SFML

SDL - Ótimo para criação de jogos

Sinais em Linux

  
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