14.04.2013 Views

Como Fazer um Programa, simples, em OpenGL para Trabalhar ...

Como Fazer um Programa, simples, em OpenGL para Trabalhar ...

Como Fazer um Programa, simples, em OpenGL para Trabalhar ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

A explicação de cada bloco é dada a seguir:<br />

(1) Ex<strong>em</strong>plo:<br />

GLfloat luzAmbiente[4]={0.2,0.2,0.2,1.0};<br />

GLfloat luzDifusa[4]={0.7,0.7,0.7,1.0}; // "cor"<br />

GLfloat luzEspecular[4]={1.0, 1.0, 1.0, 1.0};// "brilho"<br />

GLfloat posicaoLuz[4]={0.0, 50.0, 50.0, 1.0};<br />

Aqui, foram definidos três tipos de il<strong>um</strong>inação: ambiente, difusa e<br />

especular. Cada <strong>um</strong>a é <strong>um</strong> vetor R, G, B, A; ou seja, a luz que será<br />

utilizada de cada <strong>um</strong> desses tipos é <strong>um</strong>a combinação RGB. Note que a luz<br />

ambiente foi definida como sendo R = G = B = 0.2, <strong>para</strong> simular <strong>um</strong>a luz<br />

ambiente cinzenta, b<strong>em</strong> fraquinha. O Alfa, A = 1.0, significa que não há<br />

fog.<br />

A posição onde ficará essa luz está no vetor posicaoLuz, e representa <strong>um</strong><br />

ponto no espaço tridimensional (x, y, z). Despreze o quarto valor.<br />

GLfloat especularidade[4]={1.0,1.0,1.0,1.0};<br />

GLint especMaterial = 60;<br />

(2) Ex<strong>em</strong>plo:<br />

Aqui, o primeiro vetor define o quanto especular será o<br />

material renderizado. L<strong>em</strong>bre que <strong>um</strong>a reflexão especular é<br />

aquela que inside <strong>em</strong> <strong>um</strong> ponto e se espalha <strong>em</strong> <strong>um</strong>a única<br />

direção. Ao contrário da difusa que se espalha <strong>em</strong> todas as<br />

direções. Portanto, <strong>um</strong>a reflexão especular depende da<br />

posição do observador.<br />

Uma vez que a reflexão é 3D (<strong>um</strong>a <strong>para</strong> cada direção), somente<br />

os três primeiros valores são considerados.<br />

Finalmente, a intensidade da reflexão do material é definida<br />

por especMaterial, nesse caso, 60.<br />

// Especifica que a cor de fundo da janela será preta<br />

glClearColor(0.0f, 0.0f, 0.0f, 1.0f);<br />

Aqui, essa função define de que cor será o fundo da cena.<br />

// Habilita o modelo de colorização de Gouraud<br />

glShadeModel(GL_SMOOTH);<br />

Essa função é interessante. Ela define como você quer que a<br />

luz se espalhe sobre o material. Por ex<strong>em</strong>plo, l<strong>em</strong>bre-se que<br />

os objetos renderizados são malhas triangulares. Então, cada<br />

triângulo possui a sua cor. De acordo com o ângulo de<br />

incidência da luz, ela pode insidir somente parte (se insidir<br />

inclinada) ou toda (se insidir 90 draus). Então, se o objeto<br />

for redondo, a luz vinda de <strong>um</strong> ponto, inside com diferentes<br />

intensidades <strong>em</strong> cada ponto do objeto, <strong>um</strong>a vez que o ângulo<br />

que o atinge varia. Mas, de acordo com a teoria vista <strong>em</strong>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!