Tutorial OpenGL v3.0

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

[ Hits: 17.228 ]

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

Tutorial OpenGL v2.0

Tutorial SFML

Visual Studio no Linux

Tutorial OpenGL

Ubuntu/Debian/Kali Linux e outros no Android

Leitura recomendada

Alocação dinâmica de memória em C

Compilando Templates C++

SDL - Ótimo para criação de jogos

Linguagem C - Funções Variádicas

A duplicação do buffer de saída na chamada de sistema fork() do 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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts