Tutorial OpenGL v3.0
Nesse artigo, trago-lhes a biblioteca SFML junto com OpenGL.
[ Hits: 18.408 ]
Por: Thiago Henrique Hüpner em 15/06/2015
#include <SFML/OpenGL.hpp>
#include <SFML/Graphics.hpp>
void desenhaNaTela(sf::RectangleShape retangulo, float r = 255, float g = 0, float b = 0) {
glLoadIdentity();
// Pega a posicao do Retangulo
sf::Vector2f posicao = retangulo.getPosition();
// Pega o taamanho do retangulo
sf::Vector2f tamanho = retangulo.getSize();
// Define a cor para Vermelho
glColor3ub ( r, g, b );
// Inicia quadrados
glBegin(GL_QUADS);
// Primeira posicao: (x,y)
glVertex2f(posicao.x,posicao.y);
// Segunda posicao: (x+tamanho.x,y)
glVertex2f(posicao.x + tamanho.x, posicao.y);
// Terceira posicao: (x+tamanho.x,y + tamanho.y)
glVertex2f(posicao.x + tamanho.x, posicao.y + tamanho.y);
// Quarta posicao: (x+tamanho.x,y)
glVertex2f(posicao.x, posicao.y + tamanho.y);
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
// Variavel do Retangulo
sf::RectangleShape retangulo;
// Tamanho do Retangulo
retangulo.setSize(sf::Vector2f(30,30));
// Posicao do Retangulo
retangulo.setPosition((400-30)/2,(400-30)/2);
// Desenha na tela o Retangulo
desenhaNaTela(retangulo);
janela.display();
}
janela.close();
return 0;
}
#include <SFML/OpenGL.hpp>
#include <SFML/Graphics.hpp>
void desenhaNaTela(sf::RectangleShape retangulo, float r = 255, int g = 0, int b = 0) {
glLoadIdentity();
// Pega a posicao do Retangulo
sf::Vector2f posicao = retangulo.getPosition();
// Pega o taamanho do retangulo
sf::Vector2f tamanho = retangulo.getSize();
// Define a cor para Vermelho
glColor3ub ( r, g, b );
// Inicia quadrados
glBegin(GL_QUADS);
// Primeira posicao: (x,y)
glVertex2f(posicao.x,posicao.y);
// Segunda posicao: (x+tamanho.x,y)
glVertex2f(posicao.x + tamanho.x, posicao.y);
// Terceira posicao: (x+tamanho.x,y + tamanho.y)
glVertex2f(posicao.x + tamanho.x, posicao.y + tamanho.y);
// Quarta posicao: (x+tamanho.x,y)
glVertex2f(posicao.x, posicao.y + tamanho.y);
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
// Variavel do Retangulo
sf::RectangleShape retangulo;
// Tamanho do Retangulo
retangulo.setSize(sf::Vector2f(30,30));
// Posicao do Retangulo
retangulo.setPosition((400-30)/2,(400-30)/2);
// Desenha na tela o Retangulo
desenhaNaTela(retangulo);
// Salva o estado atual do OpenGL
janela.pushGLStates();
// Aqui estamos "livres" para utilizarcomo quisermos o SFML "puro"
// Cria uma variavel que contém um "circulo" com raio de 40
sf::CircleShape circulo(40);
// Definimos a cor para preta
circulo.setFillColor(sf::Color(sf::Color::Black));
// Definimos a posicao
circulo.setPosition(200, 100);
// Desenhamos a janela
janela.draw(circulo);
// Pegamos o estado anterior da janela
janela.popGLStates();
janela.display();
}
janela.close();
return 0;
}

Ubuntu/Debian/Kali Linux e outros no Android
Algum humor e C++ Design Patterns (parte 1)
Como funcionam os alocadores de memória do STD C?
lib cURL - Trabalhe com URLs em C
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (6)
Instalação não está resolvendo as dependencias (2)
Captação de áudio no zorin linux começa a diminuir com o tempo (5)
Alternativas ao Multilogin para gerenciamento de múltiplas contas/prof... (0)









