14.03.2015 Views

Modelos de Iluminação e sombreamento - OpenGL. - Unisinos

Modelos de Iluminação e sombreamento - OpenGL. - Unisinos

Modelos de Iluminação e sombreamento - OpenGL. - Unisinos

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

glLight*()<br />

GLfloat light0_ambient[ ] = {0.0, 0.1, 0.0, 1.0};<br />

GLfloat light0_diffuse[ ] = {0.0, 0.0, 1.0, 1.0};<br />

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

GLfloat light0_position[ ] = {1.0, 2.0, 3.0, 1.0};<br />

glLightfv(GL_LIGHT0, GL_POSITION, light0_position);<br />

glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient);<br />

glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);<br />

glLightfv(GL_LIGHT0, GL_SPECULAR, light0_specular);<br />

glEnable(GL_LIGHT0);<br />

glEnable(GL_LIGHTING);<br />

Materiais<br />

• Cores dos objetos iluminados são calculados pela multiplicação da<br />

cor das luz com a cor do material (por canal R, G e B)<br />

• Assim como <strong>de</strong>finimos as cores das luzes em ambiente, difusa e<br />

especular, as cores dos materiais também são <strong>de</strong>finidas da mesma<br />

forma.<br />

• Po<strong>de</strong>mos <strong>de</strong>finir cores <strong>de</strong> materiais que emitem luz:<br />

– Neste caso, as luzes não influenciam a cor final do material<br />

– As luzes emitidas por objetos que emitem luz não são computadas pelo<br />

<strong>OpenGL</strong> nos outros objetos<br />

glMaterial*()<br />

• glMaterial{if}(GLenum face, GLenum pname, TYPE param)<br />

glMaterial{if}v(GLenum face, GLenum pname, TYPE *param)<br />

• face po<strong>de</strong> ser: GL_FRONT, GL_BACK, GL_FRONT_AND_BACK<br />

• pname po<strong>de</strong> ser:<br />

– GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_EMISSION: cores<br />

do material<br />

– GL_SHININESS: expoente <strong>de</strong> iluminação do mo<strong>de</strong>lo Phong<br />

glMaterial*()<br />

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

GLfloat mat0_diffuse[ ] = {0.7, 0.0, 0.0, 1.0};<br />

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

GLfloat mat0_shininess[ ] = {5.0};<br />

glMaterialfv(GL_FRONT, GL_AMBIENT, mat0_ambient);<br />

glMaterialfv(GL_FRONT, GL_DIFFUSE, mat0_diffuse);<br />

glMaterialfv(GL_FRONT, GL_SPECULAR, mat0_specular);<br />

glMaterialfv(GL_FRONT, GL_SHININESS, mat0_shininess);<br />

glColorMaterial()<br />

• Se vamos apenas modificar uma propriedad do material, é<br />

mais eficiente utilizarmos glColorMaterial( )<br />

• glColorMaterial( ) especifica qual cor modificar<br />

glEnable(GL_COLOR_MATERIAL);<br />

glColorMaterial(GL_FRONT, GL_DIFFUSE);<br />

glColor3f(0.2, 0.5, 0.8); // altera a cor difusa do material<br />

Desenhar objetos aqui<br />

glColorMaterial(GL_FRONT, GL_SPECULAR);<br />

glColor3f(0.9, 0.0, 0.2); // altera a cor especular do material<br />

Desenhar objetos aqui<br />

glDisable(GL_COLOR_MATERIAL);<br />

Ren<strong>de</strong>rizando Polígonos<br />

• Flat Ren<strong>de</strong>ring<br />

• Goraud Shading<br />

– Uses Phong Reflectance<br />

• Phong Shading<br />

2

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

Saved successfully!

Ooh no, something went wrong!