Conheça a iniciativa da Biblioteca dos Desenvolvedores
Índice da Biblioteca
Área dos Usuários
Fórum de Discussão
36 - Trabalhando com cores em OpenGL
Agora que entendemos como funciona o sistema de coordenadas, iremos entender como manipular cores no OpenGL.
O sistema de cores da OpenGL é muito parecido com o sistema de coordenadas.
Todas as cores vão de 0.0 até 1.0
Mais todas as cores são representadas no Padrão RGB com 255 cores.
Se você entendeu o tutorial anterior, vai deduzir também que 1.0 é o limite de cores ( igual a 255 ).
Sabendo disto, vamos brincar um pouco com as cores e aprender como desenhar um quadrado usando o tipo GL_QUADS
O programa abaixo em AllegroGL, imprime um quadrado Amarelo:
CÓDIGO... // Exemplo de código que imprime um quadrado usando Allegro e AllegroGL // Autor: Adriano Waltrick
// BDJogos
// Data: 01/10/2007
#include <allegro.h>
#include <alleggl.h>
int main()
{ // Iniciações básicas da Allegro
allegro_init();
install_keyboard();
// Iniciação da AllegroGL
install_allegro_gl();
allegro_gl_set(AGL_Z_DEPTH, 8);
allegro_gl_set(AGL_COLOR_DEPTH, 16);
allegro_gl_set(AGL_SUGGEST, AGL_Z_DEPTH | AGL_COLOR_DEPTH); // Setando o Modo Gráfico
set_gfx_mode(GFX_OPENGL_WINDOWED, 640, 480, 0, 0);
// Laço principal
while( !key[KEY_ESC] )
{ //Código
}
allegro_exit();
return 0;
}
END_OF_MAIN(); FIM DE CÓDIGO...
Bom, já conhecemos os parâmetros para o glBegin GL_POINTS, GL_TRIANGLES e agora GL_QUADS.
Estamos vendo um por um com calma para que a gente possa se acostumar com eles.
Primeiro, você deve ter se assustado por que eu falei que deveriamos usar o sistema 0.0 e 1.0 para determinar as cores,
mais mesmo assim eu usei o sistema padrão de RGB( 255, 255, 255 ).
O que acontece é que o próprio OpenGL faz a conversão internamente ( na definição das vértices não ).
Mais se você passar os parâmetros glColor3d( 1.0, 1.0, 0.0 ); vai ter os mesmos resultados.
O GL_QUADS é muito especial por que, ele mostra como os pontos devem ser definidos para o OpenGL. Teste o programa acima, invertendo a ordem dos pontos para a seguinte ordem: // invertendo o primeiro pelo segundo
glVertex3f( 0.0f, 1.0f, 0.0f);
glVertex3f( 0.0f, 0.0f, 0.0f);
glVertex3f( 1.0f, 1.0f, 0.0f);
glVertex3f( 1.0f, 0.0f, 0.0f);
Resultado:
O quadrado ficará cortado, por que a forma de renderizar os pontos é feita de ponto por ponto.
Invertendo a ordem do primeiro ponto para o segundo, ao tentar montar a imagem o OpenGL acaba cortando a parte de cima da figura.
Temos que ter muito cuidado com esse tipo de coisa.
Quando definimos uma cor fora do glBegin, a cor é utilizada por todas as vértices.
Nós também podemos definir cor para cada uma das vértices separadamente.
Exemplo com Glut para não perder a prática, baseado no exemplo acima.
O único código novo foi inserido na função display, vamos treinar ler sempre códigos em AllegroGL e Glut.
// Função que é chamada quando uma tecla é apertada
static void key(unsigned char key, int x, int y)
{
switch (key)
{ // caso aperte ESC
case 27 :
exit(0);
break;
}
glutPostRedisplay();
}
// Função que executa rotinas padrões da Glut
static void idle(void)
{
glutPostRedisplay();
} FIM DE CÓDIGO...
O exemplo acima, definimos um amarelo para os 2 primeiros vértices e um preto para os 2 últimos criando um efeito degradê bem legal.
Podemos também, definir uma cor para cada vértice.. este conceito mais tarde vai ser muito importante para a gente, e é interessante brincar com isso também.
// Função que é chamada quando uma tecla é apertada
static void key(unsigned char key, int x, int y)
{
switch (key)
{ // caso aperte ESC
case 27 :
exit(0);
break;
}
glutPostRedisplay();
}
// Função que executa rotinas padrões da Glut
static void idle(void)
{
glutPostRedisplay();
} FIM DE CÓDIGO...
01/06/2007 (C) Copyright. Todos os Direitos Reservados. Leia a política de privacidade do portal.
É proibida a cópia de conteúdo deste site de acordo com
a Lei Brasileira de Direitos Autorais.