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.132 ]
Por: Thiago Henrique Hüpner em 08/05/2015
#include <SDL/SDL.h> #include <SDL/SDL_opengl.h> #include <time.h> #define LARGURA 400 #define ALTURA 400 #define TAMANHO_IMAGEM 128 GLuint carregarImagem(const char *nomeImg) { SDL_Surface *img = SDL_LoadBMP(nomeImg); GLuint textura; if(img == NULL) { printf("Erro ao carregar a imagem %s: %s ",nomeImg,SDL_GetError()); SDL_FreeSurface(img); exit(-1); } glGenTextures(1, &textura); glBindTexture(GL_TEXTURE_2D, textura); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, 3, img->w, img->h, 0, GL_RGR, GL_UNSIGNED_BYTE, img->pixels); SDL_FreeSurface(img); return textura; } void colocandoImagemNaTela(GLuint textura, int x,int y) { glBindTexture(GL_TEXTURE_2D, textura); glLoadIdentity(); glTranslatef(x,y,0); glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex2f(0, 0); glTexCoord2f(1, 0); glVertex2f(TAMANHO_IMAGEM, 0); glTexCoord2f(1, 1); glVertex2f(TAMANHO_IMAGEM, TAMANHO_IMAGEM); glTexCoord2f(0, 1); glVertex2f(0, TAMANHO_IMAGEM); glEnd(); } void inicializaOpenGL() { glClearColor(255,255,255,1); glMatrixMode(GL_PROJECTION); glLoadIdentity(); //Necessário para exibir a imagem glEnable(GL_TEXTURE_2D); gluOrtho2D(0,LARGURA,ALTURA,0); glMatrixMode(GL_MODELVIEW); glClear(GL_COLOR_BUFFER_BIT); } void GL_FillRect(SDL_Rect a,int r,int g,int b) { glLoadIdentity(); glColor3ub(r,g,b); glBegin(GL_QUADS); glVertex2f(a.x,a.y); glVertex2f(a.x+a.w,a.y); glVertex2f(a.x+a.w,a.y+a.h); glVertex2f(a.x,a.y+a.h); glEnd(); } int main(int argc,char *argv[]) { if(SDL_Init(SDL_INIT_VIDEO) < 0) { printf("Erro : %s ",SDL_GetError()); return -1; } srand((unsigned)time(NULL)); SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 8 ); SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 8 ); SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 8 ); SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 8 ); SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 2 ); SDL_Surface * tela = SDL_SetVideoMode(LARGURA,ALTURA,32,SDL_OPENGL); if(tela == NULL) { printf("Erro : %s ",SDL_GetError()); SDL_Quit(); return -1; } SDL_WM_SetCaption(""Imagenando"",NULL); SDL_Event evento; int estaRodando = 1; inicializaOpenGL(); GLuint textura = carregarImagem("cb.bmp"); while(estaRodando) { while(SDL_PollEvent(&evento)) { switch(evento.type) { case SDL_QUIT: estaRodando = 0; break; default: break; } } glClear(GL_COLOR_BUFFER_BIT); colocandoImagemNaTela(textura,50,50); SDL_Delay(30); SDL_GL_SwapBuffers(); } SDL_Quit(); glDeleteTextures(1, &textura); return 0; }
Ubuntu/Debian/Kali Linux e outros no Android
Utilizando a biblioteca NCURSES - Parte I
Programando com uma granada de mão: uma visão da linguagem C
Criando aplicativos para o Mac OS X no GNU/Linux
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
É cada coisa que me aparece! - não é só 3% (0)
Alguma pessoa pode me ajudar com drriver Core i3 7020u (Debian 12)? (2)
Mikrotik não mostra bytes nem packtes (1)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código [RESOLVID... (4)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta