{"id":68,"date":"2022-03-23T22:08:49","date_gmt":"2022-03-23T22:08:49","guid":{"rendered":"https:\/\/wordpress.ft.unicamp.br\/magic\/modelos-de-iluminacao\/"},"modified":"2022-03-23T22:08:49","modified_gmt":"2022-03-23T22:08:49","slug":"modelos-de-iluminacao","status":"publish","type":"page","link":"https:\/\/wordpress.ft.unicamp.br\/magic\/modelos-de-iluminacao\/","title":{"rendered":"Modelos de ilumina\u00e7\u00e3o"},"content":{"rendered":"<p>&#013;<\/p>\n<div class=\"NAVHEADER\">&#013;<\/p>\n<table cellspacing=\"0\" cellpadding=\"0\" width=\"100%\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<th align=\"middle\" colspan=\"3\">Introdu\u00e7\u00e3o \u00e0 computa\u00e7\u00e3o gr\u00e1fica com &#013;<br \/>\nOpenGL<\/th>\n<\/tr>\n<p>&#013;<\/p>\n<tr>&#013;<\/p>\n<td valign=\"bottom\" align=\"left\" width=\"10%\"><a href=\"modelagem-exercicios.html\">Prev<\/a><\/td>\n<p>&#013;<\/p>\n<td valign=\"bottom\" align=\"middle\" width=\"80%\" \/>&#013;<\/p>\n<td valign=\"bottom\" align=\"right\" width=\"10%\"><a href=\"modelos-iluminacao-outros.html\">Next<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<hr align=\"left\" width=\"100%\" \/>&#013;\n<\/div>\n<p>&#013;<\/p>\n<div class=\"CHAPTER\">&#013;<\/p>\n<h1><a name=\"MODELOS-ILUMINACAO\">Cap\u00edtulo 6. Modelos de ilumina\u00e7\u00e3o<\/a><\/h1>\n<p>&#013;<\/p>\n<div class=\"TOC\">&#013;<\/p>\n<dl>&#013;<\/p>\n<dt><b>\u00cdndice<\/b>&#013;<\/p>\n<dt>6.1. <a href=\"modelos-iluminacao.html#MODELOS-ILUMINACAO-DESCRICAO\">Descri\u00e7\u00e3o &#013;<br \/>\n  do programa <tt class=\"FILENAME\">iluminacao.c<\/tt><\/a>&#013;<\/p>\n<dt>6.2. <a href=\"modelos-iluminacao-outros.html\">Outros programas relacionados<\/a>&#013;<\/p>\n<dt>6.3. <a href=\"modelos-iluminacao-exercicios.html\">Exerc\u00edcios<\/a><\/dt>\n<\/dt>\n<\/dt>\n<\/dt>\n<\/dl>\n<\/div>\n<p>&#013;<\/p>\n<p>O prop\u00f3sito desta li\u00e7\u00e3o \u00e9 ilustrar para o usu\u00e1rio os principais conceitos &#013;<br \/>\nenvolvidos na ilumina\u00e7\u00e3o de uma cena e na defini\u00e7\u00e3o das propriedades luminosas &#013;<br \/>\nde um material, geralmente representadas pelos coeficientes de reflex\u00e3o difusa e &#013;<br \/>\nespecular.<\/p>\n<p>&#013;<\/p>\n<p>Ser\u00e1 mostrado como definir caracter\u00edsticas b\u00e1sicas de uma fonte de luz, tais &#013;<br \/>\ncomo a intensidade da luz gerada, para as componentes de luz ambiente, difusa e &#013;<br \/>\nespecular (no OpenGL, \u00e9 poss\u00edvel separar as contribui\u00e7\u00f5es). Al\u00e9m disso, ser\u00e1 &#013;<br \/>\nmostrado tamb\u00e9m o uso do canal alfa para gera\u00e7\u00e3o de transpar\u00eancias.<\/p>\n<p>&#013;<\/p>\n<p>A cena gerada pelo programa utilizado nesta li\u00e7\u00e3o \u00e9 mostrado na <a href=\"modelos-iluminacao.html#FIG-MODELOS-ILUMINACAO-CENA\">Figura &#013;<br \/>\n6-1<\/a>. Consiste de duas esferas (nomeadas A e B) sob um plano. A esfera &#8220;A&#8221; \u00e9 &#013;<br \/>\ns\u00f3lida, e os valores das suas constantes de reflex\u00e3o difusa e especular pode ser &#013;<br \/>\nmodificados atrav\u00e9s de sele\u00e7\u00e3o de op\u00e7\u00f5es em um menu. A esfera &#8220;B&#8221; \u00e9 transl\u00facida, &#013;<br \/>\ne sua translucidez pode ser ajustada atrav\u00e9s do canal alfa.<\/p>\n<p>&#013;<\/p>\n<p>At\u00e9 o momento, o canal alfa tem sido ignorado (alfa \u00e9 o A em RGBA). Os &#013;<br \/>\nvalores do canal alfa variam de 0 a 1, e s\u00e3o especificados com as fun\u00e7\u00f5es <tt class=\"FUNCTION\">glColor*()<\/tt>. Quando os efeitos de composi\u00e7\u00e3o (<i class=\"FOREIGNPHRASE\">blending<\/i>) s\u00e3o utilizados, o valor de alfa \u00e9 utilizado &#013;<br \/>\npara combinar a cor do fragmento que est\u00e1 sendo processado com a cor j\u00e1 presente &#013;<br \/>\nno <i class=\"FOREIGNPHRASE\">framebuffer<\/i>. De modo geral, a composi\u00e7\u00e3o de &#013;<br \/>\nimagens utilando o canal alfa \u00e9 dada pela seguinte express\u00e3o:<\/p>\n<p>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"SCREEN\">         IT = IP * alfa + (1-alfa)* IFB  <\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p>onde: IT \u00e9 a imagem total resultante, IP \u00e9 a imagem que est\u00e1 sendo &#013;<br \/>\nprocessada, e IFB \u00e9 a imagem anteriormente presente no <i class=\"FOREIGNPHRASE\">framebuffer<\/i>.<\/p>\n<p>&#013;<\/p>\n<div class=\"FIGURE\">&#013;<\/p>\n<p><b><a name=\"FIG-MODELOS-ILUMINACAO-CENA\">Figura 6-1. Esferas sob um &#013;<br \/>\nplano.<\/a><\/b><\/p>\n<p>&#013;<\/p>\n<p><img decoding=\"async\" src=\"modelos-iluminacao-cena.jpg\" \/><\/p>\n<\/div>\n<p>&#013;<\/p>\n<p>O programa usado para modelar esta cena \u00e9 mostrado no <a href=\"modelos-iluminacao.html#EXAMPLE-MODELOS-ILUMINACAO\">Exemplo &#013;<br \/>\n6-1<\/a>. As teclas <b class=\"KEYCAP\">LEFT<\/b> e <b class=\"KEYCAP\">RIGHT<\/b> servem &#013;<br \/>\npara rotacionar a posi\u00e7\u00e3o do observador em torno do eixo y contra e a favor do &#013;<br \/>\nsentido dos ponteiros do rel\u00f3gio, respectivamente. A dist\u00e2ncia entre o &#013;<br \/>\nobservador e o centro de rota\u00e7\u00e3o (raio de observa\u00e7\u00e3o) \u00e9 alterado pelas teclas <b class=\"KEYCAP\">r<\/b> e <b class=\"KEYCAP\">R<\/b>, que aumentam o diminuem o seu valor, &#013;<br \/>\nrespectivamente. As teclas <b class=\"KEYCAP\">UP<\/b> e <b class=\"KEYCAP\">DOWN<\/b>, &#013;<br \/>\ncontrolam a altitude do observador (no eixo y). \u00c9 poss\u00edvel modificar os graus de &#013;<br \/>\nreflex\u00e3o difusa e especular da esfera maci\u00e7a atrav\u00e9s do menu <i class=\"FOREIGNPHRASE\">popup<\/i> dispon\u00edvel pelo pressionamento do bot\u00e3o direito do &#013;<br \/>\nmouse. A tecla <b class=\"KEYCAP\">t<\/b> habilita ou desabilita o uso de texturas. &#013;<br \/>\nPara finalizar o programa, basta digitar <b class=\"KEYCAP\">ESC<\/b>. <\/p>\n<p>&#013;<\/p>\n<div class=\"EXAMPLE\">&#013;<\/p>\n<p><b><a name=\"EXAMPLE-MODELOS-ILUMINACAO\">Exemplo 6-1. programa <\/a><a href=\"iluminacao.c\" target=\"_top\" rel=\"noopener\"><tt class=\"FILENAME\">iluminacao.c<\/tt><\/a><\/b><\/p>\n<p>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"PROGRAMLISTING\">#include &lt;stdio.h&gt;&#013;\n#include &lt;stdlib.h&gt;&#013;\n#include &lt;math.h&gt;&#013;\n#include &lt;GL\/glut.h&gt;&#013;\n&#013;\n#define PI 3.1415&#013;\n&#013;\nGLint WIDTH =320;&#013;\nGLint HEIGHT=240;&#013;\n&#013;\nGLint fatias=30;&#013;\nGLint pilhas=30;&#013;\nGLint raioEsfera=1.5;&#013;\n&#013;\nGLfloat obs[3]={0.0,7.0,0.0};&#013;\nGLfloat olho[3]={0.0,3.0,0.0};&#013;\n&#013;\nGLfloat plano_difusa[]    = { 0.5, 0.5, 0.0, 1.0 };&#013;\nGLfloat plano_especular[] = { 1.0, 1.0, 1.0, 1.0 };&#013;\nGLfloat plano_brilho[]    = { 50.0 };&#013;\n&#013;\nGLfloat mat_a_difusa[]    = { 1.0, 1.0, 1.0, 1.0 };&#013;\nGLfloat mat_a_especular[] = { 1.0, 1.0, 1.0, 1.0 };&#013;\nGLfloat mat_a_brilho[]    = { 50.0 };&#013;\n&#013;\nGLfloat mat_b_difusa[]    = { 0.7, 0.7, 0.7, 0.5 };&#013;\nGLfloat mat_b_especular[] = { 1.0, 1.0, 1.0, 0.5 };&#013;\nGLfloat mat_b_brilho[]    = { 50.0 };&#013;\n&#013;\nGLfloat posicao_luz0[]    = { 0.0, 10.0, 0.0, 1.0};&#013;\nGLfloat cor_luz0[]        = { 1.0, 1.0, 1.0, 1.0};&#013;\nGLfloat cor_luz0_amb[]    = { 0.3, 0.3, 0.3, 1.0};&#013;\n&#013;\nGLfloat sem_cor[]         = { 0.0, 0.0, 0.0, 1.0};&#013;\n  &#013;\nGLint gouraud=0;&#013;\n&#013;\nGLfloat tetaxz=0;&#013;\nGLfloat raioxz=6;&#013;\n&#013;\nvoid reshape(int width, int height){&#013;\n  WIDTH=width;&#013;\n  HEIGHT=height;&#013;\n  glViewport(0,0,(GLint)width,(GLint)height);&#013;\n  glMatrixMode(GL_PROJECTION);&#013;\n  glLoadIdentity();&#013;\n  gluPerspective(70.0,width\/(float)height,0.1,30.0);&#013;\n  glMatrixMode(GL_MODELVIEW);&#013;\n}&#013;\n&#013;\nvoid display(void){&#013;\n  glEnable(GL_DEPTH_TEST);&#013;\n  glEnable(GL_LIGHTING);&#013;\n&#013;\n  glDepthMask(GL_TRUE);&#013;\n  glClearColor(1.0,1.0,1.0,1.0);&#013;\n  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);&#013;\n&#013;\n  if(gouraud){&#013;\n    glShadeModel(GL_SMOOTH);&#013;\n  }&#013;\n  else{&#013;\n    glShadeModel(GL_FLAT);&#013;\n  }    &#013;\n  &#013;\n  glPushMatrix();&#013;\n&#013;\n  \/* calcula a posicao do observador *\/&#013;\n  obs[0]=raioxz*cos(2*PI*tetaxz\/360);&#013;\n  obs[2]=raioxz*sin(2*PI*tetaxz\/360);&#013;\n  gluLookAt(obs[0],obs[1],obs[2],olho[0],olho[1],olho[2],0.0,1.0,0.0);&#013;\n  &#013;\n  \/* propriedades do material do plano *\/&#013;\n  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, plano_difusa);&#013;\n  glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, plano_especular);&#013;\n  glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, plano_brilho);&#013;\n  &#013;\n  \/* desenha o plano *\/&#013;\n  glNormal3f(0,1,0); &#013;\n  glBegin(GL_QUADS);&#013;\n  glVertex3f(-10,0,10);&#013;\n  glVertex3f(10,0,10);&#013;\n  glVertex3f(10,0,-10);&#013;\n  glVertex3f(-10,0,-10);&#013;\n  glEnd();&#013;\n&#013;\n  glPushMatrix();&#013;\n  glTranslatef(posicao_luz0[0],posicao_luz0[1],posicao_luz0[2]);&#013;\n  glColor3f(1,0,0);&#013;\n  glMaterialfv(GL_FRONT, GL_EMISSION, cor_luz0);&#013;\n  glutSolidSphere(0.3,5,5);&#013;\n  glPopMatrix();&#013;\n&#013;\n  glMaterialfv(GL_FRONT, GL_EMISSION, sem_cor);&#013;\n&#013;\n  glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_a_difusa);&#013;\n  glMaterialfv(GL_FRONT, GL_SPECULAR, mat_a_especular);&#013;\n  glMaterialfv(GL_FRONT, GL_SHININESS, mat_a_brilho);&#013;\n&#013;\n  glPushMatrix();&#013;\n  glTranslatef(0.0,3.0,-3.0);&#013;\n  glutSolidSphere(raioEsfera,fatias,pilhas);&#013;\n  glPopMatrix();&#013;\n&#013;\n  glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_b_difusa);&#013;\n  glMaterialfv(GL_FRONT, GL_SPECULAR, mat_b_especular);&#013;\n  glMaterialfv(GL_FRONT, GL_SHININESS, mat_b_brilho);&#013;\n  &#013;\n  glTranslatef(0.0,+3.0,+3.0);&#013;\n&#013;\n  glutSolidSphere(raioEsfera,fatias,pilhas);&#013;\n&#013;\n  glPopMatrix();&#013;\n  glutSwapBuffers();&#013;\n}&#013;\n&#013;\nvoid special(int key, int x, int y){&#013;\n  switch (key) {&#013;\n  case GLUT_KEY_UP:&#013;\n    obs[1]=obs[1]+1;&#013;\n    glutPostRedisplay();&#013;\n    break;&#013;\n  case GLUT_KEY_DOWN:&#013;\n    obs[1] =obs[1]-1;&#013;\n    glutPostRedisplay();&#013;\n    break;&#013;\n  case GLUT_KEY_LEFT:&#013;\n    tetaxz=tetaxz+2;&#013;\n    glutPostRedisplay();&#013;\n    break;&#013;\n  case GLUT_KEY_RIGHT:&#013;\n    tetaxz=tetaxz-2;&#013;\n    glutPostRedisplay();&#013;\n    break;&#013;\n  }&#013;\n}&#013;\n&#013;\nvoid keyboard(unsigned char key, int x, int y){&#013;\n  switch (key) {&#013;\n  case 27:&#013;\n    exit(0);&#013;\n    break;&#013;\n  case 'g':&#013;\n    gouraud = !gouraud;&#013;\n    glutPostRedisplay();&#013;\n    break;&#013;\n  case 'r':&#013;\n    raioxz=raioxz+1;&#013;\n    glutPostRedisplay();&#013;\n    break;&#013;\n  case 'R':&#013;\n    if(raioxz&gt;1){&#013;\n      raioxz=raioxz-1;&#013;\n      glutPostRedisplay();&#013;\n    }&#013;\n    break;&#013;\n  }&#013;\n}&#013;\n&#013;\n&#013;\nvoid init(){&#013;\n  gouraud=1;&#013;\n  glEnable(GL_DEPTH_TEST);&#013;\n  glEnable(GL_BLEND);&#013;\n  glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);&#013;\n&#013;\n  glLightfv(GL_LIGHT0, GL_DIFFUSE, cor_luz0);&#013;\n  glLightfv(GL_LIGHT0, GL_SPECULAR, cor_luz0);&#013;\n  glLightfv(GL_LIGHT0, GL_AMBIENT, cor_luz0_amb);&#013;\n  glLightfv(GL_LIGHT0, GL_POSITION, posicao_luz0);&#013;\n&#013;\n  glEnable(GL_LIGHTING);&#013;\n  glEnable(GL_LIGHT0);&#013;\n&#013;\n  glEnable(GL_AUTO_NORMAL);&#013;\n  glEnable(GL_NORMALIZE);&#013;\n}&#013;\n&#013;\nvoid menu(int value){&#013;\n  switch (value) {&#013;\n  case 0:&#013;\n    mat_a_especular[0]=mat_a_especular[1]=mat_a_especular[2]=0.0;&#013;\n    break;&#013;\n  case 1: &#013;\n    mat_a_especular[0]=mat_a_especular[1]=mat_a_especular[2]=0.5;&#013;\n    break;&#013;\n  case 2:&#013;\n    mat_a_especular[0]=mat_a_especular[1]=mat_a_especular[2]=1.0;&#013;\n    break;&#013;\n  case 3:&#013;\n    mat_a_difusa[0]=mat_a_difusa[1]=mat_a_difusa[2]=0.0;&#013;\n    break;&#013;\n  case 4: &#013;\n    mat_a_difusa[0]=mat_a_difusa[1]=mat_a_difusa[2]=0.5;&#013;\n    break;&#013;\n  case 5:&#013;\n    mat_a_difusa[0]=mat_a_difusa[1]=mat_a_difusa[2]=1.0;&#013;\n    break;&#013;\n  }&#013;\n  glutPostRedisplay();&#013;\n}&#013;\n&#013;\n&#013;\nint main(int argc,char **argv){&#013;\n  glutInitWindowPosition(0,0);&#013;\n  glutInitWindowSize(WIDTH,HEIGHT);&#013;\n  glutInit(&amp;argc,argv);&#013;\n  glutInitDisplayMode(GLUT_RGB|GLUT_DEPTH|GLUT_DOUBLE);&#013;\n&#013;\n  if(!glutCreateWindow(\"Modelos de iluminacao\")) {&#013;\n    fprintf(stderr,\"Error opening a window.n\");&#013;\n    exit(-1);&#013;\n  }&#013;\n&#013;\n  init();&#013;\n  &#013;\n  glutKeyboardFunc(keyboard);&#013;\n  glutSpecialFunc(special);&#013;\n  glutDisplayFunc(display);&#013;\n  glutReshapeFunc(reshape);&#013;\n&#013;\n  glutCreateMenu(menu);&#013;\n  glutAddMenuEntry(\"-sem spec\", 0);&#013;\n  glutAddMenuEntry(\"-spec m\u00e9dia\", 1);&#013;\n  glutAddMenuEntry(\"-spec alta\", 2);&#013;\n  glutAddMenuEntry(\"-sem difusa\", 3);&#013;\n  glutAddMenuEntry(\"-difusa m\u00e9dia\", 4);&#013;\n  glutAddMenuEntry(\"-difusa alta\", 5);&#013;\n  glutAttachMenu(GLUT_RIGHT_BUTTON);&#013;\n&#013;\n  glutMainLoop();&#013;\n  return(0);&#013;\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>&#013;<\/p>\n<p>Para compilar e executar o programa <a href=\"iluminacao.c\" target=\"_top\" rel=\"noopener\"><tt class=\"FILENAME\">iluminacao.c<\/tt><\/a>, salve-o juntamente com o &#013;<br \/>\narquivo <a href=\"Makefile\" target=\"_top\" rel=\"noopener\">Makefile<\/a> em um diret\u00f3rio e execute a seguinte seq\u00fc\u00eancia de &#013;<br \/>\ncomandos:<\/p>\n<p>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"SCREEN\"><tt class=\"PROMPT\">$<\/tt> <b class=\"COMMAND\">make<\/b> <span class=\"OPTION\">iluminacao<\/span>&#013;\n<tt class=\"PROMPT\">$<\/tt> <b class=\"COMMAND\">iluminacao<\/b><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<div class=\"SECT1\">&#013;<\/p>\n<h1 class=\"SECT1\"><a name=\"MODELOS-ILUMINACAO-DESCRICAO\">6.1. Descri\u00e7\u00e3o do programa &#013;<br \/>\n<tt class=\"FILENAME\">iluminacao.c<\/tt><\/a><\/h1>\n<p>&#013;<\/p>\n<div class=\"INFORMALEXAMPLE\">&#013;<\/p>\n<p \/>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"PROGRAMLISTING\">GLint fatias=30;&#013;\nGLint pilhas=30;&#013;\nGLint raioEsfera=1.5;<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<\/p>\n<p>Define o n\u00famero de fatias (longitude), o n\u00famero de pilhas (latitude) e o raio &#013;<br \/>\ndas esferas da cena.<\/p>\n<p>&#013;<\/p>\n<div class=\"INFORMALEXAMPLE\">&#013;<\/p>\n<p \/>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"PROGRAMLISTING\">GLfloat plano_difusa[]    = { 0.5, 0.5, 0.0, 1.0 };&#013;\nGLfloat plano_especular[] = { 1.0, 1.0, 1.0, 1.0 };&#013;\nGLfloat plano_brilho[]    = { 50.0 };&#013;\n&#013;\nGLfloat mat_a_difusa[]    = { 1.0, 1.0, 1.0, 1.0 };&#013;\nGLfloat mat_a_especular[] = { 1.0, 1.0, 1.0, 1.0 };&#013;\nGLfloat mat_a_brilho[]    = { 50.0 };&#013;\n&#013;\nGLfloat mat_b_difusa[]    = { 0.7, 0.7, 0.7, 0.5 };&#013;\nGLfloat mat_b_especular[] = { 1.0, 1.0, 1.0, 0.5 };&#013;\nGLfloat mat_b_brilho[]    = { 50.0 };<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<\/p>\n<p>Define os coeficientes de reflex\u00e3o difusa (<font color=\"red\">*_difusa<\/font>) e &#013;<br \/>\nespecular (<font color=\"red\">*_especular<\/font>) para os tr\u00eas objetos da cena. As &#013;<br \/>\ncomponentes destes vetores s\u00e3o do tipo R,G,B e A(lfa) e ser\u00e3o utilizados para as &#013;<br \/>\ncompor cores do plano, da esfera A e da esfera B. Observe que a esfera B possui &#013;<br \/>\nvalor de alfa igual a 0.5, proporcionando assim a sua apar\u00eancia transl\u00facida.<\/p>\n<p>&#013;<\/p>\n<p>O brilho do material, que pode assumir valores entre 1 e 128, \u00e9 um expoente &#013;<br \/>\nque modela a fun\u00e7\u00e3o de distribui\u00e7\u00e3o espacial da componente de luz refletida &#013;<br \/>\nespecularmente. \u00c0 medida em que o valor do brilho aumenta, diminui o &#013;<br \/>\nespalhamento da luz refletida.<\/p>\n<p>&#013;<\/p>\n<div class=\"INFORMALEXAMPLE\">&#013;<\/p>\n<p \/>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"PROGRAMLISTING\">GLfloat posicao_luz0[]    = { 0.0, 10.0, 0.0, 1.0};&#013;\nGLfloat cor_luz0[]        = { 1.0, 1.0, 1.0, 1.0};&#013;\nGLfloat cor_luz0_amb[]    = { 0.3, 0.3, 0.3, 1.0};<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<\/p>\n<p>Indica a posi\u00e7\u00e3o (posicao_luz0) e as componentes de luz para reflex\u00e3o difusa &#013;<br \/>\ne especular (<font color=\"red\">cor_luz0<\/font>), e a componente de luz para &#013;<br \/>\nreflex\u00e3o ambiente (cor_luz0_amb). <\/p>\n<p>&#013;<\/p>\n<div class=\"INFORMALEXAMPLE\">&#013;<\/p>\n<p \/>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"PROGRAMLISTING\">  if(gouraud){&#013;\n    glShadeModel(GL_SMOOTH);&#013;\n  }&#013;\n  else{&#013;\n    glShadeModel(GL_FLAT);&#013;\n  }    <\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<\/p>\n<p>Atrav\u00e9s da vari\u00e1vel <font color=\"red\">gouraud<\/font> a fun\u00e7\u00e3o <tt class=\"FUNCTION\">display<\/tt> decide se o modelo de sombreamento (<i class=\"FOREIGNPHRASE\">shading<\/i>) para os objetos ser\u00e1 o de Gouraud (GL_SMOOTH) &#013;<br \/>\nou <i class=\"FOREIGNPHRASE\">flat shading<\/i>, tornando os objetos com apar\u00eancia &#013;<br \/>\nfaceteada.<\/p>\n<p>&#013;<\/p>\n<div class=\"INFORMALEXAMPLE\">&#013;<\/p>\n<p \/>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"PROGRAMLISTING\">  \/* propriedades do material do plano *\/&#013;\n  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, plano_difusa);&#013;\n  glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, plano_especular);&#013;\n  glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, plano_brilho);&#013;\n  &#013;\n  \/* desenha o plano *\/&#013;\n  glNormal3f(0,1,0); &#013;\n  glBegin(GL_QUADS);&#013;\n  glVertex3f(-10,0,10);&#013;\n  glVertex3f(10,0,10);&#013;\n  glVertex3f(10,0,-10);&#013;\n  glVertex3f(-10,0,-10);&#013;\n  glEnd();<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<\/p>\n<p>A fun\u00e7\u00e3o <tt class=\"FUNCTION\">glMaterialfv()<\/tt> define as propriedades de &#013;<br \/>\nreflex\u00e3o difusa e especular, e brilho do material que ser\u00e1 utilizado para compor &#013;<br \/>\no objeto imediatamente desenhado, neste caso um plano, via GL_QUADS. Observer a &#013;<br \/>\nchamada \u00e0 fun\u00e7\u00e3o <tt class=\"FUNCTION\">glNormal3f()<\/tt> antes de o plano ser &#013;<br \/>\ndesenhado. Isto \u00e9 necess\u00e1rio porque, por <i class=\"FOREIGNPHRASE\">default<\/i>, o &#013;<br \/>\nvetor normal encontra-se na dire\u00e7\u00e3o (x,y,z)=(0,0,1) e para que a normal \u00e0 &#013;<br \/>\nsuperf\u00edcie encontra-se orientada com eixo y, ou seja, na dire\u00e7\u00e3o &#013;<br \/>\n(x,y,z)=(0,1,0).<\/p>\n<p>&#013;<\/p>\n<p>Um procedimento semelhante a esse \u00e9 utilizado para definir as caracter\u00edsticas &#013;<br \/>\ndo material das esferas presentes na cena.<\/p>\n<p>&#013;<\/p>\n<div class=\"INFORMALEXAMPLE\">&#013;<\/p>\n<p \/>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"PROGRAMLISTING\">  glPushMatrix();&#013;\n  glTranslatef(posicao_luz0[0],posicao_luz0[1],posicao_luz0[2]);&#013;\n  glColor3f(1,0,0);&#013;\n  glMaterialfv(GL_FRONT, GL_EMISSION, cor_luz0);&#013;\n  glutSolidSphere(0.3,5,5);&#013;\n  glPopMatrix();<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<\/p>\n<p>Para facilitar a identifica\u00e7\u00e3o da fonte de luz, \u00e9 desenhada uma esfera &#013;<br \/>\nna posi\u00e7\u00e3o desta fonte. Na chamada \u00e0 fun\u00e7\u00e3o <tt class=\"FUNCTION\">glMaterialfv()<\/tt>, o par\u00e2metro <tt class=\"PARAMETER\"><i>GL_EMISSION<\/i><\/tt> define a intensidade luminosa emitida &#013;<br \/>\npelo material como sendo a pr\u00f3pria cor da fonte de luz, dando a apar\u00eancia de que &#013;<br \/>\na esfera brilha, assim como brilharia uma l\u00e2mpada.<\/p>\n<p>&#013;<\/p>\n<div class=\"INFORMALEXAMPLE\">&#013;<\/p>\n<p \/>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"PROGRAMLISTING\">  glEnable(GL_BLEND);&#013;\n  glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<\/p>\n<p>Habilita a composi\u00e7\u00e3o (<i class=\"FOREIGNPHRASE\">blending<\/i>) de imagens dos &#013;<br \/>\nvalores RGBA correntes com aqueles presentes no <i class=\"FOREIGNPHRASE\">framebuffer<\/i>. A fun\u00e7\u00e3o <tt class=\"FUNCTION\">glBlendFunc()<\/tt> define os pesos para a imagem que est\u00e1 sendo &#013;<br \/>\nprocessada (IP) e a presente no <i class=\"FOREIGNPHRASE\">framebuffer<\/i>. Neste &#013;<br \/>\ncaso, os pesos s\u00e3o o pr\u00f3prio valor do canal alfa (<tt class=\"PARAMETER\"><i>GL_SRC_ALPHA<\/i><\/tt>) e 1-alfa (<tt class=\"PARAMETER\"><i>GL_ONE_MINUS_SRC_ALPHA<\/i><\/tt>).<\/p>\n<p>&#013;<\/p>\n<div class=\"INFORMALEXAMPLE\">&#013;<\/p>\n<p \/>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"PROGRAMLISTING\">  glLightfv(GL_LIGHT0, GL_DIFFUSE, cor_luz0);&#013;\n  glLightfv(GL_LIGHT0, GL_SPECULAR, cor_luz0);&#013;\n  glLightfv(GL_LIGHT0, GL_AMBIENT, cor_luz0_amb);&#013;\n  glLightfv(GL_LIGHT0, GL_POSITION, posicao_luz0);<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<\/p>\n<p>Define a posi\u00e7\u00e3o e as componentes de cor da fonte de luz GL_LIGHT0.<\/p>\n<p>&#013;<\/p>\n<div class=\"INFORMALEXAMPLE\">&#013;<\/p>\n<p \/>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"PROGRAMLISTING\">void menu(int value){&#013;\n  switch (value) {&#013;\n  case 0:&#013;\n    mat_a_especular[0]=mat_a_especular[1]=mat_a_especular[2]=0.0;&#013;\n    break;&#013;\n  case 1: &#013;\n    mat_a_especular[0]=mat_a_especular[1]=mat_a_especular[2]=0.5;&#013;\n    break;&#013;\n  case 2:&#013;\n    mat_a_especular[0]=mat_a_especular[1]=mat_a_especular[2]=1.0;&#013;\n    break;&#013;\n  case 3:&#013;\n    mat_a_difusa[0]=mat_a_difusa[1]=mat_a_difusa[2]=0.0;&#013;\n    break;&#013;\n  case 4: &#013;\n    mat_a_difusa[0]=mat_a_difusa[1]=mat_a_difusa[2]=0.5;&#013;\n    break;&#013;\n  case 5:&#013;\n    mat_a_difusa[0]=mat_a_difusa[1]=mat_a_difusa[2]=1.0;&#013;\n    break;&#013;\n  }&#013;\n  glutPostRedisplay();&#013;\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<\/p>\n<p>A fun\u00e7\u00e3o menu \u00e9 ativada quando o bot\u00e3o direito do mouse \u00e9 pressionado. De &#013;<br \/>\nacordo com o valor da vari\u00e1vel <font color=\"red\">value<\/font>, determinadas &#013;<br \/>\npropriedades do material que comp\u00f5e a esfera A s\u00e3o modificadas.<\/p>\n<p>&#013;<\/p>\n<div class=\"INFORMALEXAMPLE\">&#013;<\/p>\n<p \/>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"PROGRAMLISTING\">  glutCreateMenu(menu);&#013;\n  glutAddMenuEntry(\"-sem spec\", 0);&#013;\n  glutAddMenuEntry(\"-spec m\u00e9dia\", 1);&#013;\n  glutAddMenuEntry(\"-spec alta\", 2);&#013;\n  glutAddMenuEntry(\"-sem difusa\", 3);&#013;\n  glutAddMenuEntry(\"-difusa m\u00e9dia\", 4);&#013;\n  glutAddMenuEntry(\"-difusa alta\", 5);&#013;\n  glutAttachMenu(GLUT_RIGHT_BUTTON);<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<\/p>\n<p>Aqui, a fun\u00e7\u00e3o <tt class=\"FUNCTION\">glutCreateMenu()<\/tt>, em conjunto com a &#013;<br \/>\nfun\u00e7\u00e3o <tt class=\"FUNCTION\">glutAddMenuEntry()<\/tt>, habilita um menu <i class=\"FOREIGNPHRASE\">popup<\/i> com seis op\u00e7\u00f5es que permitir\u00e3o ativar entradas &#013;<br \/>\npresentes na fun\u00e7\u00e3o <tt class=\"FUNCTION\">menu<\/tt>, de acordo com os valores &#013;<br \/>\npassados nos segundos argumentos das fun\u00e7\u00f5es <tt class=\"FUNCTION\">glutAddMenuEntry()<\/tt>. Finalmente, a fun\u00e7\u00e3o <tt class=\"FUNCTION\">glutAttachMenu()<\/tt> associa o aparecimento deste menu ao &#013;<br \/>\npressionamento do bot\u00e3o direito do mouse.<\/p>\n<\/div>\n<\/div>\n<p>&#013;<\/p>\n<div class=\"NAVFOOTER\">&#013;<\/p>\n<hr align=\"left\" width=\"100%\" \/>&#013;<br \/>\n&#013;<\/p>\n<table cellspacing=\"0\" cellpadding=\"0\" width=\"100%\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td valign=\"top\" align=\"left\" width=\"33%\"><a href=\"modelagem-exercicios.html\">Prev<\/a><\/td>\n<p>&#013;<\/p>\n<td valign=\"top\" align=\"middle\" width=\"34%\"><a href=\"index2006.html\">Home<\/a><\/td>\n<p>&#013;<\/p>\n<td valign=\"top\" align=\"right\" width=\"33%\"><a href=\"modelos-iluminacao-outros.html\">Next<\/a><\/td>\n<\/tr>\n<p>&#013;<\/p>\n<tr>&#013;<\/p>\n<td valign=\"top\" align=\"left\" width=\"33%\">Exerc\u00edcios<\/td>\n<p>&#013;<\/p>\n<td valign=\"top\" align=\"middle\" width=\"34%\">\u00a0<\/td>\n<p>&#013;<\/p>\n<td valign=\"top\" align=\"right\" width=\"33%\">Outros Programas relacionados<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>&#013; &#013; &#013; &#013; &#013; Introdu\u00e7\u00e3o \u00e0 computa\u00e7\u00e3o gr\u00e1fica com &#013; OpenGL &#013; &#013; Prev &#013; &#013; Next &#013; &#013; &#013; &#013; Cap\u00edtulo 6. Modelos de ilumina\u00e7\u00e3o &#013; &#013; &#013; \u00cdndice&#013; 6.1. Descri\u00e7\u00e3o &#013; do programa iluminacao.c&#013; 6.2. Outros programas relacionados&#013; 6.3. Exerc\u00edcios &#013; O prop\u00f3sito desta li\u00e7\u00e3o \u00e9 ilustrar para o usu\u00e1rio os principais &hellip; <a href=\"https:\/\/wordpress.ft.unicamp.br\/magic\/modelos-de-iluminacao\/\" class=\"more-link\">Continuar lendo <span class=\"screen-reader-text\">Modelos de ilumina\u00e7\u00e3o<\/span><\/a><\/p>\n","protected":false},"author":48,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-68","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Modelos de ilumina\u00e7\u00e3o - Marco Antonio Garcia de Carvalho, PhD<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wordpress.ft.unicamp.br\/magic\/modelos-de-iluminacao\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Modelos de ilumina\u00e7\u00e3o - Marco Antonio Garcia de Carvalho, PhD\" \/>\n<meta property=\"og:description\" content=\"&#013; &#013; &#013; &#013; &#013; Introdu\u00e7\u00e3o \u00e0 computa\u00e7\u00e3o gr\u00e1fica com &#013; OpenGL &#013; &#013; Prev &#013; &#013; Next &#013; &#013; &#013; &#013; Cap\u00edtulo 6. Modelos de ilumina\u00e7\u00e3o &#013; &#013; &#013; \u00cdndice&#013; 6.1. Descri\u00e7\u00e3o &#013; do programa iluminacao.c&#013; 6.2. Outros programas relacionados&#013; 6.3. Exerc\u00edcios &#013; O prop\u00f3sito desta li\u00e7\u00e3o \u00e9 ilustrar para o usu\u00e1rio os principais &hellip; Continuar lendo Modelos de ilumina\u00e7\u00e3o\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wordpress.ft.unicamp.br\/magic\/modelos-de-iluminacao\/\" \/>\n<meta property=\"og:site_name\" content=\"Marco Antonio Garcia de Carvalho, PhD\" \/>\n<meta property=\"og:image\" content=\"http:\/\/modelos-iluminacao-cena.jpg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data1\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wordpress.ft.unicamp.br\\\/magic\\\/modelos-de-iluminacao\\\/\",\"url\":\"https:\\\/\\\/wordpress.ft.unicamp.br\\\/magic\\\/modelos-de-iluminacao\\\/\",\"name\":\"Modelos de ilumina\u00e7\u00e3o - Marco Antonio Garcia de Carvalho, PhD\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wordpress.ft.unicamp.br\\\/magic\\\/#website\"},\"datePublished\":\"2022-03-23T22:08:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wordpress.ft.unicamp.br\\\/magic\\\/modelos-de-iluminacao\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wordpress.ft.unicamp.br\\\/magic\\\/modelos-de-iluminacao\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wordpress.ft.unicamp.br\\\/magic\\\/modelos-de-iluminacao\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/wordpress.ft.unicamp.br\\\/magic\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Modelos de ilumina\u00e7\u00e3o\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wordpress.ft.unicamp.br\\\/magic\\\/#website\",\"url\":\"https:\\\/\\\/wordpress.ft.unicamp.br\\\/magic\\\/\",\"name\":\"Marco Antonio Garcia de Carvalho, PhD\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wordpress.ft.unicamp.br\\\/magic\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Modelos de ilumina\u00e7\u00e3o - Marco Antonio Garcia de Carvalho, PhD","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wordpress.ft.unicamp.br\/magic\/modelos-de-iluminacao\/","og_locale":"pt_BR","og_type":"article","og_title":"Modelos de ilumina\u00e7\u00e3o - Marco Antonio Garcia de Carvalho, PhD","og_description":"&#013; &#013; &#013; &#013; &#013; Introdu\u00e7\u00e3o \u00e0 computa\u00e7\u00e3o gr\u00e1fica com &#013; OpenGL &#013; &#013; Prev &#013; &#013; Next &#013; &#013; &#013; &#013; Cap\u00edtulo 6. Modelos de ilumina\u00e7\u00e3o &#013; &#013; &#013; \u00cdndice&#013; 6.1. Descri\u00e7\u00e3o &#013; do programa iluminacao.c&#013; 6.2. Outros programas relacionados&#013; 6.3. Exerc\u00edcios &#013; O prop\u00f3sito desta li\u00e7\u00e3o \u00e9 ilustrar para o usu\u00e1rio os principais &hellip; Continuar lendo Modelos de ilumina\u00e7\u00e3o","og_url":"https:\/\/wordpress.ft.unicamp.br\/magic\/modelos-de-iluminacao\/","og_site_name":"Marco Antonio Garcia de Carvalho, PhD","og_image":[{"url":"modelos-iluminacao-cena.jpg","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. tempo de leitura":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/wordpress.ft.unicamp.br\/magic\/modelos-de-iluminacao\/","url":"https:\/\/wordpress.ft.unicamp.br\/magic\/modelos-de-iluminacao\/","name":"Modelos de ilumina\u00e7\u00e3o - Marco Antonio Garcia de Carvalho, PhD","isPartOf":{"@id":"https:\/\/wordpress.ft.unicamp.br\/magic\/#website"},"datePublished":"2022-03-23T22:08:49+00:00","breadcrumb":{"@id":"https:\/\/wordpress.ft.unicamp.br\/magic\/modelos-de-iluminacao\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wordpress.ft.unicamp.br\/magic\/modelos-de-iluminacao\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wordpress.ft.unicamp.br\/magic\/modelos-de-iluminacao\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wordpress.ft.unicamp.br\/magic\/"},{"@type":"ListItem","position":2,"name":"Modelos de ilumina\u00e7\u00e3o"}]},{"@type":"WebSite","@id":"https:\/\/wordpress.ft.unicamp.br\/magic\/#website","url":"https:\/\/wordpress.ft.unicamp.br\/magic\/","name":"Marco Antonio Garcia de Carvalho, PhD","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wordpress.ft.unicamp.br\/magic\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"}]}},"_links":{"self":[{"href":"https:\/\/wordpress.ft.unicamp.br\/magic\/wp-json\/wp\/v2\/pages\/68","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.ft.unicamp.br\/magic\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wordpress.ft.unicamp.br\/magic\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.ft.unicamp.br\/magic\/wp-json\/wp\/v2\/users\/48"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.ft.unicamp.br\/magic\/wp-json\/wp\/v2\/comments?post=68"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.ft.unicamp.br\/magic\/wp-json\/wp\/v2\/pages\/68\/revisions"}],"wp:attachment":[{"href":"https:\/\/wordpress.ft.unicamp.br\/magic\/wp-json\/wp\/v2\/media?parent=68"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}