Tutorial OpenGL v2.0
Finalmente chegou! Após quase 1 ano depois de meu primeiro artigo sobre OpenGL, chegou a versão 2.0. Clique e fique mais Geek.
[ Hits: 18.387 ]
Por: Thiago Henrique Hüpner em 08/05/2015
// Inclui a biblioteca SDL #include <SDL/SDL.h> // Inclui a biblioteca do SDL que tem o OpenGL #include <SDL/SDL_opengl.h> // 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(); } // Função que Inicializa 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); } // Função Principal int main(int argc,char *argv[]){ // Se a inicialização do e o Subsistema de video falhar ... if(SDL_Init(SDL_INIT_VIDEO) < 0){ // ... imprima a mensagem de erro e ... printf("Erro : %s ",SDL_GetError()); // ... encerre o programa com 'erro' return -1; } //Define alguns atributos do OpenGL, tais como ... // Numero minimo de bits da cor Vermelha ; SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 8 ); // Numero minimo de bits da cor Verde ; SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 8 ); // Numero minimo de bits da cor Azul ; SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 8 ); // Tamanho do pixels da cor Alfa ; SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 8 ); // E o Buffer duplo ( 1 ligado , 0 desligado ) SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); // Cria a Janela SDL_Surface * tela = SDL_SetVideoMode(400,400,32,SDL_OPENGL); // Se algum erro acontecer com na criação da Janela... if(tela == NULL){ // ... imprima o erro ... printf("Erro : %s ",SDL_GetError()); // ... feche o SDL e ... SDL_Quit(); // ... encerre o programa com 'erro' return -1; } // Define o título da janela SDL_WM_SetCaption("Exemplo Básico SDL + OpenGL",NULL); // Variável para os eventos SDL_Event evento; // Controle do Loop int estaRodando = 1; // Inicia o OpenGL inicializaOpenGL(); // Loop Principal while(estaRodando){ // Lê a fila de eventos e põe o evento mais antigo em "evento" while(SDL_PollEvent(&evento)){ // Entre nos tipos de eventos ... switch(evento.type){ // ... caso o 'X' da janela foi apertado ... case SDL_QUIT: // ... então saia do Loop Principal. estaRodando = 0; break; // Outros eventos .... default: break; } } // Desenha na Tela desenhaNaTela(); // Espera 30 milissegundos para não forçar uso do processador SDL_Delay(30); // Troca os Buffers e mostra o buffer antigo SDL_GL_SwapBuffers(); } // Encerra o SDL SDL_Quit(); // Nenhum erro ocorrido =D return 0; }
// Inclui a biblioteca SDL #include <SDL/SDL.h> // Inclui a biblioteca do SDL que tem o OpenGL #include <SDL/SDL_opengl.h> // Altura da Janela (eixo Y) #define ALTURA 400 // Largura da Janela (eixo X) #define LARGURA 400 // Tamanho do Quadrado #define TAMANHO 10 // Função que Desenha na Tela void desenhaNaTela(){ // 'Limpa' a tela usando a cor de 'limpar' a tela glClear(GL_COLOR_BUFFER_BIT); // Reinicia todas as transformações e/ou rotações glLoadIdentity(); // Rotaciona x por y com 0 de profundidade (usado p/ jogos 3D) glTranslatef(LARGURA/2,ALTURA/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, TAMANHO ); // 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( TAMANHO, 0 ); // Colori de Azul glColor3f ( 0.0f, 0.0f, 1.0f ); // Lado Inferior Direito glVertex2f( TAMANHO, TAMANHO ); // Termina de Desenhar glEnd(); } // Função que Inicializa 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); // 'Limpa' a tela usando a cor de 'limpar' a tela glClear(GL_COLOR_BUFFER_BIT); // 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,LARGURA,ALTURA,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); } // Função Principal int main(int argc,char *argv[]){ // Se a inicialização do e o Subsistema de video falhar ... if(SDL_Init(SDL_INIT_VIDEO) < 0){ // ... imprima a mensagem de erro e ... printf("Erro : %s ",SDL_GetError()); // ... encerre o programa com 'erro' return -1; } //Define alguns atributos do OpenGL, tais como ... // Numero minimo de bits da cor Vermelha ; SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 8 ); // Numero minimo de bits da cor Verde ; SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 8 ); // Numero minimo de bits da cor Azul ; SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 8 ); // Tamanho do pixels da cor Alfa ; SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 8 ); // E o Buffer duplo ( 1 ligado , 0 desligado ) SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); // Cria a Janela SDL_Surface * tela = SDL_SetVideoMode(400,400,32,SDL_OPENGL); // Se algum erro acontecer com na criação da Janela... if(tela == NULL){ // ... imprima o erro ... printf("Erro : %s ",SDL_GetError()); // ... feche o SDL e ... SDL_Quit(); // ... encerre o programa com 'erro' return -1; } // Define o título da janela SDL_WM_SetCaption("Exemplo Básico SDL + OpenGL",NULL); // Variável para os eventos SDL_Event evento; // Controle do Loop int estaRodando = 1; // Inicia o OpenGL inicializaOpenGL(); // Loop Principal while(estaRodando){ // Lê a fila de eventos e põe o evento mais antigo em "evento" while(SDL_PollEvent(&evento)){ // Entre nos tipos de eventos ... switch(evento.type){ // ... caso o 'X' da janela foi apertado ... case SDL_QUIT: // ... então saia do Loop Principal. estaRodando = 0; break; // Outros eventos .... default: break; } } // Desenha na Tela desenhaNaTela(); // Espera 30 milissegundos para não forçar uso do processador SDL_Delay(30); SDL_GL_SwapBuffers(); } // Encerra o SDL SDL_Quit(); // Nenhum erro ocorrido =D return 0; }
// Inclui a biblioteca SDL #include <SDL/SDL.h> // Inclui a biblioteca do SDL que tem o OpenGL #include <SDL/SDL_opengl.h> // Altura da Janela (eixo Y) #define ALTURA 400 // Largura da Janela (eixo X) #define LARGURA 400 // Tamanho do Quadrado #define TAMANHO 10 #define VELOCIDADE 10 // Função que Desenha na Tela void desenhaNaTela(float x,float y){ // 'Limpa' a tela usando a cor de 'limpar' a tela glClear(GL_COLOR_BUFFER_BIT); // Reinicia todas as transformações e/ou rotações glLoadIdentity(); // Rotaciona x por y com 0 de profundidade (usado p/ jogos 3D) glTranslatef(x,y,0); // Começa a desenhar Quadrados glBegin(GL_QUADS); // Colori de Verde glColor3f ( 0.0f, 1.0f, 0.0f ); // Lado Inferior Esquerdo glVertex2f( 0, TAMANHO ); // 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( TAMANHO, 0 ); // Colori de Azul glColor3f ( 0.0f, 0.0f, 1.0f ); // Lado Inferior Direito glVertex2f( TAMANHO, TAMANHO ); // Termina de Desenhar glEnd(); } // Função que Inicializa 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,LARGURA,ALTURA,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); } // Função Principal int main(int argc,char *argv[]){ // Se a inicialização do e o Subsistema de video falhar ... if(SDL_Init(SDL_INIT_VIDEO) < 0){ // ... imprima a mensagem de erro e ... printf("Erro : %s ",SDL_GetError()); // ... encerre o programa com 'erro' return -1; } //Define alguns atributos do OpenGL, tais como ... // Numero minimo de bits da cor Vermelha ; SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 8 ); // Numero minimo de bits da cor Verde ; SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 8 ); // Numero minimo de bits da cor Azul ; SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 8 ); // Tamanho do pixels da cor Alfa ; SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 8 ); // E o Buffer duplo ( 1 ligado , 0 desligado ) SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); // Cria a Janela SDL_Surface * tela = SDL_SetVideoMode(400,400,32,SDL_OPENGL); // Se algum erro acontecer com na criação da Janela... if(tela == NULL){ // ... imprima o erro ... printf("Erro : %s ",SDL_GetError()); // ... feche o SDL e ... SDL_Quit(); // ... encerre o programa com 'erro' return -1; } // Define o título da janela SDL_WM_SetCaption("Exemplo Básico SDL + OpenGL",NULL); // Variável para os eventos SDL_Event evento; // Controle do Loop int estaRodando = 1; // Velocidade X e Velocidade Y int velX = 0,velY = 0; // Posição X e Posição Y int posX = LARGURA/2, posY = ALTURA/2; // Inicia o OpenGL inicializaOpenGL(); // Loop Principal while(estaRodando){ // Lê a fila de eventos e põe o evento mais antigo em "evento" while(SDL_PollEvent(&evento)){ // Entre nos tipos de eventos ... switch(evento.type){ // ... caso o 'X' da janela foi apertado ... case SDL_QUIT: // ... então saia do Loop Principal. estaRodando = 0; break; case SDL_KEYUP: switch(evento.key.keysym.sym){ // Se soltou seta pra cima (^) ou para baixo (v)... case SDLK_UP: case SDLK_DOWN: // ...faz parar no eixo Y velY = 0; break; // Se soltou seta para direita (->) ou esquerda (<-)... case SDLK_RIGHT: case SDLK_LEFT: // ...faz parar no eixo X velX = 0; break; default: break; } break; case SDL_KEYDOWN: switch(evento.key.keysym.sym){ case SDLK_ESCAPE: // Sairá do loop na proxima iteração estaRodando = 0; break; case SDLK_UP: // Faz a velocidade Y ser negativa para mover para cima (^) velY = -VELOCIDADE; break; case SDLK_DOWN: // Faz a velocidade Y ser positiva para mover para baixo (v) velY = VELOCIDADE; break; case SDLK_RIGHT: // Faz a velocidade X ser positiva para mover para direita (->) velX = VELOCIDADE; break; case SDLK_LEFT: // Faz a velocidade X ser negativa para mover para esquerda (<-) velX = -VELOCIDADE; break; default: break; } break; // Caso apertou algum botão do mouse case SDL_MOUSEBUTTONDOWN: // A posição do quadrado se iguala a posição do mouse posX = evento.button.x; posY = evento.button.y; default: break; } } // Soma o valor da posição com o valor da posição com o valor da velocidade posX = posX + velX; posY = posY + velY; // Desenha na Tela desenhaNaTela(posX,posY); // Espera 30 milissegundos para não forçar uso do processador SDL_Delay(30); SDL_GL_SwapBuffers(); } // Encerra o SDL SDL_Quit(); // Nenhum erro ocorrido =D return 0; }
Ubuntu/Debian/Kali Linux e outros no Android
Introdução à plataforma GNU de desenvolvimento
Detectando assalto na multidão com visão computacional
Criando um sistema operacional com ASM e C++
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Como abrir o pycharm no linux (2)
VMs e Interfaces de Rede desapareceram (12)