Tutorial OpenGL v3.0
Nesse artigo, trago-lhes a biblioteca SFML junto com OpenGL.
[ Hits: 16.710 ]
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
A mágica do polimorfismo e seus conceitos na ótica de C/C++
Tratamento de exceções na linguagem C
Criando aplicativos para o iPhone no Linux (sem Xcode e MacOS X)
Estudando recursividade direta e indireta
lib cURL - Trabalhe com URLs em C
Atualizar o macOS no Mac - Opencore Legacy Patcher
Crie alias para as tarefas que possuam longas linhas de comando - bash e zsh
Criando um gateway de internet com o Debian
Configuração básica do Conky para mostrar informações sobre a sua máquina no Desktop
Aprenda a criar músicas com Inteligência Artificial usando Suno AI
Instalando e usando o Dconf Editor, o "regedit" para Linux
Como instalar o navegador TOR no seu Linux
Instalando Zoom Client no Ubuntu 24.04 LTS
É tão difícil assim nos ajudar a te ajudar? (15)
Sistema da Coréia do Norte - Red Star OS (73)
HD SSD inacessível: scsi error badly formed scsi parameters (6)
O jogo Minecraft crasha antes mesmo de iniciar, porem o erro só ocorre... (3)