{"id":81,"date":"2022-03-23T22:08:49","date_gmt":"2022-03-23T22:08:49","guid":{"rendered":"https:\/\/wordpress.ft.unicamp.br\/magic\/transformacoes-geometricas-3\/"},"modified":"2022-03-23T22:08:49","modified_gmt":"2022-03-23T22:08:49","slug":"transformacoes-geometricas-3","status":"publish","type":"page","link":"https:\/\/wordpress.ft.unicamp.br\/magic\/transformacoes-geometricas-3\/","title":{"rendered":"Transforma\u00e7\u00f5es geom\u00e9tricas"},"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=\"preenchimento-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=\"transformacoes-braco.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=\"TRANSFORMACOES\">Cap\u00edtulo 4. Transforma\u00e7\u00f5es geom\u00e9tricas &#8211; cubos4<\/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>4.1. <a href=\"transformacoes.html#TRANSFORMACOES-DESCRICAO\">Descri\u00e7\u00e3o &#013;<br \/>\n  do programa <tt class=\"FILENAME\">cubos4.c<\/tt><\/a>&#013;<\/p>\n<dt>4.2. <a href=\"transformacoes-braco.html\">Transforma\u00e7\u00f5es geom\u00e9tricas &#8211; bra\u00e7o rob\u00f3tico<\/a>&#013;<\/p>\n<dt>4.3. <a href=\"transformacoes-outros.html\">Outros programas relacionados<\/a>&#013;<\/p>\n<dt>4.4. <a href=\"transformacoes-exercicios.html\">Exerc\u00edcios<\/a><\/dt>\n<\/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 compreender como as transforma\u00e7\u00f5es geom\u00e9tricas s\u00e3o &#013;<br \/>\nrealizadas sobre os objetos em rela\u00e7\u00e3o a um determinado sistema de coordenadas. &#013;<br \/>\nNo OpenGL existem fun\u00e7\u00f5es para realizar transla\u00e7\u00e3o, rota\u00e7\u00e3o e escalamento, &#013;<br \/>\nbastando apenas ao usu\u00e1rio ajustar os seus par\u00e2metros para obter o efeito &#013;<br \/>\ndesejado. Ser\u00e1 analisado um programa simples composto de 4 cubos dispostos em uma janela conforme ilustra a <a href=\"transformacoes.html#FIG-CUBO\">Figura &#013;<br \/>\n4-1<\/a><\/p>\n<p>&#013;<\/p>\n<div class=\"FIGURE\">&#013;<\/p>\n<p><b><a name=\"FIG-CUBO\">Figura 4-1. Programa cubos4<\/a><\/b><\/p>\n<p>&#013;<\/p>\n<p \/><font color=\"red\"><font color=\"red\"><font color=\"red\" \/><\/font><\/font>&#013;<\/p>\n<p><img decoding=\"async\" src=\"tela_cubo4.jpg\" \/><\/p>\n<\/div>\n<p>&#013;<br \/>\n&#013;<\/p>\n<p>O programa que implementa os 4 cubos \u00e9 mostrado no <a href=\"transformacoes.html#EXAMPLE-4CUBOS\">Exemplo &#013;<br \/>\n4-1<\/a>. Para finalizar o programa, basta digitar <b class=\"KEYCAP\">ESC<\/b>. As teclas e &#013;<br \/>\nsuas respectivas a\u00e7\u00f5es est\u00e3o definidas na fun\u00e7\u00e3o <tt class=\"FUNCTION\">keyboard()<\/tt>.<\/p>\n<p>&#013;<\/p>\n<div class=\"EXAMPLE\">&#013;<\/p>\n<p><b><a name=\"EXAMPLE-BRACO\">Exemplo 4-1. programa <\/a><a href=\"cubos4.c\" target=\"_top\" rel=\"noopener\"><tt class=\"FILENAME\">cubos4.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;GL\/glut.h&gt;&#013;\n#include &lt;stdlib.h&gt;&#013;\n&#013;\nvoid init(void){&#013;\n  glClearColor (0.0, 0.0, 0.0, 0.0);&#013;\n}&#013;\n&#013;\nvoid display(void){&#013;\n  glClear (GL_COLOR_BUFFER_BIT);&#013;\n  glPushMatrix();&#013;\n&#013;\n  \/* Cubo 1 *\/&#013;\n  glPushMatrix();&#013;\n  glTranslatef (-2.0, 0.0, 0.0);&#013;\n  glScalef (3.0, 2.0, 5.0);&#013;\n  glutWireCube (1.0);&#013;\n  glPopMatrix();&#013;\n   &#013;\n  \/* Cubo 2 *\/&#013;\n  glPushMatrix();&#013;\n  glRotatef (25.0, 0.0, 0.0, 1.0);&#013;\n  glTranslatef (2.0, 0.0, 0.0);&#013;\n  glScalef (2.0, 1.0, 4.0);&#013;\n  glutWireCube (1.0);&#013;\n  glPopMatrix();&#013;\n&#013;\n   \/* Cubo 3 *\/&#013;\n  glPushMatrix();&#013;\n  glTranslatef (0.0, 2.0, 0.0);&#013;\n  glScalef (2.0, 1.0, 4.0);&#013;\n  glutWireCube (1.0);&#013;\n  glPopMatrix();&#013;\n&#013;\n     \/* Cubo 4 *\/&#013;\n  glPushMatrix();&#013;\n  glTranslatef (0.0, -2.0, 0.0);&#013;\n  glScalef (2.0, 1.0, 4.0);&#013;\n  glutWireCube (1.0);&#013;\n  glPopMatrix();&#013;\n&#013;\n  glPopMatrix();&#013;\n  glutSwapBuffers();&#013;\n}&#013;\n&#013;\nvoid reshape (int w, int h){&#013;\n  glViewport (0, 0, (GLsizei) w, (GLsizei) h);&#013;\n  glMatrixMode (GL_PROJECTION);&#013;\n  glLoadIdentity ();&#013;\n  gluPerspective(65.0, (GLfloat) w\/(GLfloat) h, 1.0, 20.0);&#013;\n  glMatrixMode(GL_MODELVIEW);&#013;\n  glLoadIdentity();&#013;\n  glTranslatef (0.0, 0.0, -10.0);&#013;\n}&#013;\nvoid keyboard(unsigned char key, int x, int y){&#013;\n  switch (key) {&#013;\n  case 27:                                         \/\/ tecla Esc (encerra o programa)&#013;\n\texit(0);&#013;\n\tbreak;&#013;\n  }&#013;\n}&#013;\n&#013;\nint main(int argc, char** argv){&#013;\n  glutInit(&amp;argc, argv);&#013;\n  glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);&#013;\n  glutInitWindowSize (500, 500); &#013;\n  glutInitWindowPosition (100, 100);&#013;\n  glutCreateWindow (argv[0]);&#013;\n  init ();&#013;\n  glutDisplayFunc(display); &#013;\n  glutReshapeFunc(reshape);&#013;\n  glutKeyboardFunc(keyboard);&#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=\"cubos4.c\" target=\"_top\" rel=\"noopener\"><tt class=\"FILENAME\">cubos4.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\">cubos4<\/span>&#013;\n<tt class=\"PROMPT\">$<\/tt> <b class=\"COMMAND\">.\/cubos4<\/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=\"TRANSFORMACOES-DESCRICAO\">4.1. Descri\u00e7\u00e3o do programa <tt class=\"FILENAME\">cubos4.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\">void init(void){&#013;\n  glClearColor (0.0, 0.0, 0.0, 0.0);&#013;\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<\/p>\n<p>Especifica as intensidade de vermelho (RED), verde (GREEN) e azul (BLUE) utilizadas para limpar a janela. Neste caso, a janela ter\u00e1 cor de fundo preta. O \u00faltimo&#013;<br \/>\npar\u00e2metro \u00e9  o canal alfa, utilizado para tratar com transpar\u00eancias.&#013;\n<\/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 display(void)&#013;\n{&#013;\n  glClear (GL_COLOR_BUFFER_BIT);&#013;\n  glPushMatrix();<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<\/p>\n<p>Uma vez que as transforma\u00e7\u00f5es geom\u00e9tricas no espa\u00e7o s\u00e3o representadas por &#013;<br \/>\nmatrizes, o uso de uma pilha de matrizes de transforma\u00e7\u00e3o ajuda a lembrar a &#013;<br \/>\nseq\u00fc\u00eancia de transforma\u00e7\u00f5es realizadas. No OpenGL, esta facilidade \u00e9 provida &#013;<br \/>\npelas fun\u00e7\u00f5es <tt class=\"FUNCTION\">glPushMatrix()<\/tt>, que insere a matriz de &#013;<br \/>\ntransforma\u00e7\u00e3o corrente na pilha, e <tt class=\"FUNCTION\">glPopMatrix()<\/tt>, que &#013;<br \/>\nretira a matriz do topo da pilha e torna esta \u00faltima a matriz de transforma\u00e7\u00e3o &#013;<br \/>\ncorrente. Neste exemplo, a fun\u00e7\u00e3o <tt class=\"FUNCTION\">glPushMatrix()<\/tt> serve &#013;<br \/>\npara lembrar os par\u00e2metros de transla\u00e7\u00e3o, rota\u00e7\u00e3o e escalamento no in\u00edcio das &#013;<br \/>\nopera\u00e7\u00f5es de desenho.<\/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\">  &#013;\n  \/* Cubo 1 *\/&#013;\n  glPushMatrix();&#013;\n  glTranslatef (-2.0, 0.0, 0.0);&#013;\n  glScalef (3.0, 2.0, 5.0);&#013;\n  glutWireCube (1.0);&#013;\n  glPopMatrix();&#013;\n<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<\/p>\n<p> O conjunto de transforma\u00e7\u00f5es sobre o primeiro cubo a ser desenhado \u00e9 delimitado pelo &#013;<br \/>\n<tt class=\"FUNCTION\">glPushMatrix()<\/tt> e <tt class=\"FUNCTION\">glPopMatrix()<\/tt>. &#013;<br \/>\nA origem do sistema de coordenadas \u00e9 levado para o ponto (x,y,z)=(-2.0,0.0,0.0) &#013;<br \/>\natrav\u00e9s da fun\u00e7\u00e3o <tt class=\"FUNCTION\">glTranslatef()<\/tt>, definindo a coordenada &#013;<br \/>\nde origem (piv\u00f4) para o desenho do cubo. Em seguida, usando a fun\u00e7\u00e3o <tt class=\"FUNCTION\">glScalef()<\/tt>, o sistema de coordenadas \u00e9 ampliado em (Sx,Sy,Sz)=(3.0,2.0,5.0), &#013;<br \/>\ne, finalmente, desenhado <i>um cubo aramado<\/i> atrav\u00e9s de <tt class=\"FUNCTION\">glutWireCube()<\/tt>.<\/p>\n<p>&#013;<br \/>\n&#013;<br \/>\n&#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\">  &#013;\n  \/* Cubo 2 *\/&#013;\n  glPushMatrix();&#013;\n  glRotatef (25.0, 0.0, 0.0, 1.0);&#013;\n  glTranslatef (2.0, 0.0, 0.0);&#013;\n  glScalef (2.0, 1.0, 4.0);&#013;\n  glutWireCube (1.0);&#013;\n  glPopMatrix();&#013;\n<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<br \/>\n&#013;<\/p>\n<p>A fun\u00e7\u00e3o <tt class=\"FUNCTION\">glRotatef()<\/tt> possui o seguinte prot\u00f3tipo:<\/p>\n<p>&#013;<\/p>\n<div class=\"FUNCSYNOPSIS\">&#013;<\/p>\n<p \/>&#013;<\/p>\n<p><code><code class=\"FUNCDEF\">void glRotatef<\/code>(GLfloat angle, GLfloat x, &#013;<br \/>\nGLfloat y, GLfloat z);<\/code><\/p>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<\/p>\n<p>Quando chamada, <tt class=\"FUNCTION\">glRotatef()<\/tt> efetua uma rota\u00e7\u00e3o de <tt class=\"PARAMETER\"><i>angle<\/i><\/tt> graus no sistema de coordenadas na dire\u00e7\u00e3o &#013;<br \/>\ncontra o sentido do rel\u00f3gio em torno de um vetor que vai da origem ao ponto &#013;<br \/>\n(x,y,z)<\/p>\n<p>&#013;<br \/>\n&#013;<\/p>\n<p> Observe que os cubos 3 e 4 n\u00e3o s\u00e3o tamb\u00e9m rotacionados mesmo estando ap\u00f3s o uso da fun\u00e7\u00e3o <tt class=\"FUNCTION\">glRotatef()<\/tt> &#013;<br \/>\nsobre o cubo 2, em fun\u00e7\u00e3o da delimita\u00e7\u00e3o da pilha de execu\u00e7\u00e3o delimitada por <tt class=\"FUNCTION\">glPushMatrix()<\/tt> e &#013;<br \/>\n<tt class=\"FUNCTION\">glPopMatrix()<\/tt>.<\/p>\n<p>&#013;<br \/>\n&#013;<br \/>\n&#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\">  &#013;\n   \/* Cubo 3 *\/&#013;\n  glPushMatrix();&#013;\n  glTranslatef (0.0, 2.0, 0.0);&#013;\n  glScalef (2.0, 1.0, 4.0);&#013;\n  glutWireCube (1.0);&#013;\n  glPopMatrix();&#013;\n<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<br \/>\n&#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\">  &#013;\n     \/* Cubo 4 *\/&#013;\n  glPushMatrix();&#013;\n  glTranslatef (0.0, -2.0, 0.0);&#013;\n  glScalef (2.0, 1.0, 4.0);&#013;\n  glutWireCube (1.0);&#013;\n  glPopMatrix();&#013;\n<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<br \/>\n&#013;<\/p>\n<p> Os outros dois cubos s\u00e3o desenhados, segundo \u00e0s mesmas orienta\u00e7\u00f5es dadas acima.<\/p>\n<p>&#013;<br \/>\n&#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\">  glPopMatrix();&#013;\n  glutSwapBuffers();<\/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\">glPopMatrix()<\/tt> remove a matriz de &#013;<br \/>\ntransforma\u00e7\u00e3o do topo da pilha, fazendo-a corrente, retornando assim o sistema &#013;<br \/>\nde coordenadas original. Quando <tt class=\"FUNCTION\">glutSwapBuffers()<\/tt> \u00e9 &#013;<br \/>\nchamada, os buffers de desenho e de apresenta\u00e7\u00e3o s\u00e3o alternados e a nova imagem &#013;<br \/>\ndos cubos \u00e9 apresentada.<\/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 reshape (int w, int h)&#013;\n{&#013;\n  glViewport (0, 0, (GLsizei) w, (GLsizei) h); <\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<\/p>\n<p>Define a \u00e1rea dentro da janela de desenho no sistema de coordenadas atual, &#013;<br \/>\norigem (x,y), largura (w) e altura (h), que OpenGL pode utilizar para efetuar &#013;<br \/>\ndesenhos. Este trecho de c\u00f3digo permite que toda a \u00e1rea da janela possa ser &#013;<br \/>\nutilizada quando a janela sofrer redimensionamento.<\/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\">  glMatrixMode (GL_PROJECTION);&#013;\n  glLoadIdentity ();&#013;\n  gluPerspective(65.0, (GLfloat) w\/(GLfloat) h, 1.0, 20.0);<\/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\">glMatrixMode()<\/tt> especifica a pilha de &#013;<br \/>\nmatrizes que ser\u00e1 o alvo das opera\u00e7\u00f5es matriciais subseq\u00fcentes; neste caso, a &#013;<br \/>\npilha de matrizes de proje\u00e7\u00e3o. A fun\u00e7\u00e3o <tt class=\"FUNCTION\">glLoadIdentity()<\/tt> &#013;<br \/>\ninicia a matriz de proje\u00e7\u00e3o corrente como a matriz identidade. A fun\u00e7\u00e3o <tt class=\"FUNCTION\">gluPerspective()<\/tt> define a transforma\u00e7\u00e3o de perspectiva usada &#013;<br \/>\nno exemplo. Proje\u00e7\u00f5es geom\u00e9tricas n\u00e3o s\u00e3o alvo desta li\u00e7\u00e3o e por enquanto n\u00e3o &#013;<br \/>\nser\u00e3o estudadas.<\/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\">  glMatrixMode(GL_MODELVIEW);&#013;\n  glLoadIdentity();&#013;\n  glTranslatef (0.0, 0.0, -10.0);<\/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\">glMatrixMode()<\/tt> especifica agora que a pilha &#013;<br \/>\nde matrizes de <i class=\"FOREIGNPHRASE\">modelview<\/i>, usadas para definir &#013;<br \/>\ntransla\u00e7\u00e3o, rota\u00e7\u00e3o e escalamento, ser\u00e1 o alvo das transforma\u00e7\u00f5es subseq\u00fcentes. &#013;<br \/>\nA fun\u00e7\u00e3o <tt class=\"FUNCTION\">glLoadIdentity()<\/tt> inicia a matriz de <i class=\"FOREIGNPHRASE\">modelview<\/i> corrente como a matriz identidade. Finalmente, &#013;<br \/>\no objeto \u00e9 deslocado em -10 unidades para o fundo da tela, melhorando a sua &#013;<br \/>\nvisualiza\u00e7\u00e3o.<\/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\">  glutReshapeFunc(reshape);<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p \/><\/div>\n<p>&#013;<\/p>\n<p>Especifica a fun\u00e7\u00e3o de retorno para redimensionamento de janela, possuindo o &#013;<br \/>\nseguinte prot\u00f3tipo:<\/p>\n<p>&#013;<\/p>\n<div class=\"FUNCSYNOPSIS\">&#013;<\/p>\n<p \/>&#013;<\/p>\n<p><code><code class=\"FUNCDEF\">funcao<\/code>(int width, int height);<\/code><\/p>\n<p>&#013;<\/p>\n<p \/><\/div>\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=\"preenchimento-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=\"transformacoes-braco.html\">Next<\/a><\/td>\n<\/tr>\n<p>&#013;<\/p>\n<tr>&#013;<\/p>\n<td valign=\"top\" align=\"left\" width=\"33%\">Preenchimento &#8211; 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%\">Transforma\u00e7\u00f5es &#8211; Bra\u00e7o<\/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 4. Transforma\u00e7\u00f5es geom\u00e9tricas &#8211; cubos4 &#013; &#013; &#013; \u00cdndice&#013; 4.1. Descri\u00e7\u00e3o &#013; do programa cubos4.c&#013; 4.2. Transforma\u00e7\u00f5es geom\u00e9tricas &#8211; bra\u00e7o rob\u00f3tico&#013; 4.3. Outros programas relacionados&#013; 4.4. Exerc\u00edcios &#013; O prop\u00f3sito desta li\u00e7\u00e3o &hellip; <a href=\"https:\/\/wordpress.ft.unicamp.br\/magic\/transformacoes-geometricas-3\/\" class=\"more-link\">Continuar lendo <span class=\"screen-reader-text\">Transforma\u00e7\u00f5es geom\u00e9tricas<\/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-81","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Transforma\u00e7\u00f5es geom\u00e9tricas - 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\/transformacoes-geometricas-3\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Transforma\u00e7\u00f5es geom\u00e9tricas - 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 4. Transforma\u00e7\u00f5es geom\u00e9tricas &#8211; cubos4 &#013; &#013; &#013; \u00cdndice&#013; 4.1. Descri\u00e7\u00e3o &#013; do programa cubos4.c&#013; 4.2. Transforma\u00e7\u00f5es geom\u00e9tricas &#8211; bra\u00e7o rob\u00f3tico&#013; 4.3. Outros programas relacionados&#013; 4.4. Exerc\u00edcios &#013; O prop\u00f3sito desta li\u00e7\u00e3o &hellip; Continuar lendo Transforma\u00e7\u00f5es geom\u00e9tricas\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wordpress.ft.unicamp.br\/magic\/transformacoes-geometricas-3\/\" \/>\n<meta property=\"og:site_name\" content=\"Marco Antonio Garcia de Carvalho, PhD\" \/>\n<meta property=\"og:image\" content=\"http:\/\/tela_cubo4.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=\"5 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\/transformacoes-geometricas-3\/\",\"url\":\"https:\/\/wordpress.ft.unicamp.br\/magic\/transformacoes-geometricas-3\/\",\"name\":\"Transforma\u00e7\u00f5es geom\u00e9tricas - 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\/transformacoes-geometricas-3\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/wordpress.ft.unicamp.br\/magic\/transformacoes-geometricas-3\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/wordpress.ft.unicamp.br\/magic\/transformacoes-geometricas-3\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/wordpress.ft.unicamp.br\/magic\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Transforma\u00e7\u00f5es geom\u00e9tricas\"}]},{\"@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":"Transforma\u00e7\u00f5es geom\u00e9tricas - 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\/transformacoes-geometricas-3\/","og_locale":"pt_BR","og_type":"article","og_title":"Transforma\u00e7\u00f5es geom\u00e9tricas - 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 4. Transforma\u00e7\u00f5es geom\u00e9tricas &#8211; cubos4 &#013; &#013; &#013; \u00cdndice&#013; 4.1. Descri\u00e7\u00e3o &#013; do programa cubos4.c&#013; 4.2. Transforma\u00e7\u00f5es geom\u00e9tricas &#8211; bra\u00e7o rob\u00f3tico&#013; 4.3. Outros programas relacionados&#013; 4.4. Exerc\u00edcios &#013; O prop\u00f3sito desta li\u00e7\u00e3o &hellip; Continuar lendo Transforma\u00e7\u00f5es geom\u00e9tricas","og_url":"https:\/\/wordpress.ft.unicamp.br\/magic\/transformacoes-geometricas-3\/","og_site_name":"Marco Antonio Garcia de Carvalho, PhD","og_image":[{"url":"tela_cubo4.jpg","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. tempo de leitura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/wordpress.ft.unicamp.br\/magic\/transformacoes-geometricas-3\/","url":"https:\/\/wordpress.ft.unicamp.br\/magic\/transformacoes-geometricas-3\/","name":"Transforma\u00e7\u00f5es geom\u00e9tricas - 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\/transformacoes-geometricas-3\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wordpress.ft.unicamp.br\/magic\/transformacoes-geometricas-3\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wordpress.ft.unicamp.br\/magic\/transformacoes-geometricas-3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wordpress.ft.unicamp.br\/magic\/"},{"@type":"ListItem","position":2,"name":"Transforma\u00e7\u00f5es geom\u00e9tricas"}]},{"@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\/81","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=81"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.ft.unicamp.br\/magic\/wp-json\/wp\/v2\/pages\/81\/revisions"}],"wp:attachment":[{"href":"https:\/\/wordpress.ft.unicamp.br\/magic\/wp-json\/wp\/v2\/media?parent=81"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}