página: XI
Sumário: ... CAPÍTULO 5, "CORES 179" :
Diferente dos outros títulos, falta a linha que separa "CORES" de "179", a página onde esse capítulo inicia.
página 4 - linha 7:
O primeiro nome do físico Ingles mencionado é Stephen e não Steve. Seu nome completo é: Stephen William Hawking (1942-__ ).
página 5 - linha 5 de baixo para cima:
O texto "as primeiras placas gráficas para PC da NVIDIA surgem em 1999."
Deve ser trocado para: "a placa gráfica Riva 128 , que surge em 1997, coloca a NVIDIA em destaque."
Obs.: As placas da NVIDIA surgiram bem antes, mas aquela que colocou-a em posição de destaque foi a Riva 128 que surgiu em 1997. Isso sem falar que naquela nessa época (e antes), a empresa que dominava o mercado era a 3Dfx (com suas placas Voodoo). Depois a 3Dfx saiu do mercado e foi comprada pela NVIDIA (em 2001).
Confira em: http://www.firingsquad.com/features/nvidiahistory/ e http://www.aceshardware.com/read.jsp?id=60000292
página 6 - linha 12 de baixo para cima:
Trocar: "outros" por "outras coisas."
"Hermite [1822-1902] - matemático ..... , entre outras coisas."
página 10 - linha 5:
A primeira frase do primeiro paragráfo fica melhor como: "Muito antes de se conseguir mapear todo o genoma humano visualizar um segmento de DNA já era possível através da computação gráfica."
página 13 - linha 17:
Trocar: "....e o movem fornecendo...." para : "e o movem na direção dos objetos fornecendo...."
página 26 - uma nota sobre o trecho:
"Os principais fabricantes de PC e supercomputadores como SGI, Cray Research, ..., Microsoft, ... adotaram o OpenGL como uma estratégia de padrão aberto para hardware gráfico."
A Microsoft, no ano passado, deixou a ARB, da qual era membro fundador. Com isso assume-se que ela não apoiará mais o OpenGL, já que ela possui uma API concorrente, o Direct3D.
Leia mais em:
http://www.theregister.co.uk/2003/03/03/microsoft_quits_opengl_board/
http://news.com.com/2100-1025-991280.html
página 26 - linha 9 de baixo para cima:
"Dentre os programas de modelagem, podemos citar ... Lightware, ...TruSpace ..." grafia correta: "... Lightwave , ... TrueSpace .." .
página 26 - linha 8 de baixo para cima:
"Dentre os jogos, temos ... Baldurs Gate, Decent, Madden, NFL 2001 etc" Correção: "Dentre os jogos, temos ... Baldur's Gate, Descent, Madden NFL 2001, etc"
página 26 - linha 6 de baixo para cima:
"A biblioteca OpenGL vai além do desenho ... dando suporte a ...textura, transparência, animação, gerenciamento de eventos de entrada por teclado e mouse".
trocar para: "A biblioteca OpenGL vai além do desenho ... dando suporte a ...textura e transparência. Animação, gerência de eventos de entrada por teclado e mouse não é tratada.".
Obs.:
1) A animação tem que ser feita pelo programador. OpenGL é uma biblioteca somente para gráficos, ou seja, não lida com gerência de eventos de entrada ou janelas (que dependem do sistema operacional).
2) "Gerenciamento" é uma palavra que por enquanto não existe na língua portuguesa (que os especialistas discutam isso!). É melhor sempre trocar por "gestão" ou "gerência".
página 27 - linha 11:
"A biblioteca glut.lib e ... , pode ser baixada diretamente do site ..."
trocar para:
"A biblioteca GLUT pode ser baixada em: http://www.opengl.org/resources/libraries/glut.html "
página 27
Os itens expostos na página são características do OpenGL e não da biblioteca GLUT, como parece ser (desculpe-nos o texto ficou ambíguo). Melhor trocar o texto:
"A biblioteca glut.lib ... pode ser baixada... . Entre suas principais características estão:
. Aceleração de Hardware: ..... luzes, real-time, transformações e render.
.Efeitos 3D..... .......volume rendering e outras "
para : "A biblioteca GLUT ... pode ser baixada em http://www.opengl.org/resources/libraries/glut.html . Sua principal características é a aceleração do processamento da geometria, luzes, transformações e render.
As principais vantagens do OpenGl são:
. Suporte a inovações.......
Obs. sobre o parágrafo que desaparece:
"Efeitos 3D em real-time: ..."
Volume shadows, bump mapping, motion blur, reflexões, volume rendering, anti-aliasing são coisas que o programador precisa fazer na mão, ou seja, nada disso está pronto como se fosse usar uma chamada de API.
página 27, seção: "Integração do OpenGL com Windows95/98/2000/XP"
página 28, linha 3 da tabela .
Obs. sobre a biblioteca GLAUX: GLAUX é uma biblioteca utilitária que vem caindo em desuso por conter uma série de bugs, sendo principalmente usada para carregar bitmaps do disco.
página 28, no programa:
O comentário ( // Inicializa... ... ) em glutInitDisplayMode ( )
Está complicado porque fala sobre
coisas avançadas , melhor trocá-lo para:
"// Indica que vamos usar um buffer
para geração de imagens e cores no modo RGB."
Pode-se retirar do programa as funções main ( ) e glutInit ( ); , pois não são realmente necessarias (não fazem diferença no resultado final).
página 29 - no programa:
em: glutKeyboardFunc (...); // determinam as funções que usaremos para ler o teclado e o mouse respectivamente.
Essa função é só para o teclado, para o mouse a função é glutMouseFunc ( ); (ou outras).
melhor pensar no texto como: // determina a função que usaremos para ler do teclado.
eliminar a linha: "int i;"
Todos os comentários devem iniciar por " // " e nunca " \\ " (quem conhecer C/C++ vai notar logo! ) .
a linha: glFlush(); // este comando permite a execução em ambiente de rede
Merece um cometário: na verdade, o comando requisita que os comandos submetidos com OpenGL sejam completados o quanto antes, ou seja, o comando faz com que quaisquer buffers com comandos guardados sejam esvaziados.
Assim melhor re-escrevê-la como glFlush(); // determina que se complete os comandos enviados, esvaziando buffers com comandos.
página 35:
Os vetores colunas aparecem com os elementos invertidos, nas duas vezes que aparecem. Ou seja deve-se trocar por .
Assim o texto correto destas 3 linhas é:
"verificaremos que tanto podem ser multiplicados na ordem V2xV1 como V1xV2.
Repare que a primeira multiplicação resultará em uma matriz 1x1, ou seja, em um número e a segunda uma matrix 2x2. Outras vezes, as transpostas podem auxiliar a multiplicação de um elemento"
Na última linha, está escrito "transporto" em vez de "transposto".
página 36 - linha 5:
O correto é: "transposta" em vez de "transporta".página 36 - linha 6:
O texto :
".... dois vetores. Se for feita a multiplicação de forma que o resultado seja um número ela é denominada de...."
deve ser substituido por:
".... dois vetores de forma que o resultado seja um número, o que é denominado de ...."
página 37
Na seção 2.4.3, em " 0 <= x <= 1 ", o 0 e o 1 estão em negrito, diferente de " 0 <= y <= 1 ". Todos os " 0 ", " 1 " , " x " e " y " deste trecho deveriam estar com a mesma fonte do resto do capÃtulo!
página 40 - depois do segundo parágrafo:
O "ponto" mas expressões não dever ser o simbolo de "produto interno" e sim um "ponto normal" que simbolize multiplicação.
página 41 - segundo parágrafo:
"Ã importante lembrar de que", o mais correto é: "Ã importante lembrar que"
página 44 - linha 7 de baixo para cima:
Incluir o texto : " no sentido inverso " entre " ângulo " e " (Figura 2.10) " .
página 44 - comentário adicional sobre representação angular:
Um problema comum com várias representações de ângulos é o chamado "Gimbal Lock". Isso poderia ser traduzido como "travamento das rotações". A representação por ângulos de Euler também sofre de "Gimbal Lock", mas é uma maneira mais fácil e intuitiva de representar as rotações. (leia mais em: http://www.anticz.com/eularqua.htm). Por isso à s vezes é bom usar outros métodos (há uma lista deles em: http://guardian.curtin.edu.au/cga/faq/angles.html, com comentários).
Gimbal ou Gimmal é um dispositivo mecânico , de juntas e pivôs , que serve para manter instrumentos (como bússulas de navios) girando livremente.
página 50 - título da figura 2.14 :
"....coordenadas x e z de cada ponto.
página 51 - na primeira matriz :
Falta um 1 na ultima linha, que deve ser: 0 0 1.
página 56 - linha 9 de baixo para cima :
"As perspectivas ou projeções cônicas são mais realÃsticas na representação de objetos", há no texto um "bastante", que é melhor eliminar!
página 58 - duas últimas linhas:
"... nos vetores: x'= (cos....0 1), y'=(0...0 1) e z'=(sen ...0 1) . Esses..."
página 59 - linha 2:
"... os valores de: | x' | = | y' | e | x' | = | z' |..."
página 59 - linha 11:
"... tag" não , o correto é "tan" , para abreviar "tangente".
página 60 - linha 5 de baixo para cimas:
"... e a perpendicular r ' por... " , melhor: "... e a perpendicular ao eixo z , r' por... "
página 61 - linha 4:
Trocar : "... distância , z, ao plano..." por : " ... distância , ( z - f ), ao plano ... " "
página 61 - linha 4 de baixo para cima:
Trocar : "... novamente a ..." por : " ... novamente à ... " "
página 61 e 62 :
Todos os " f ", com ou sem os subscritos "x","y" ou "z" deveriam estar com o mesmo tipo de letra do restante desse capitulo.
página 62 - linhas 7 , 11 e 13 :
Trocar : "... projeção de perspectiva..." por : " ... ... projeção em perspectiva... ... " "
página 62 - no último conjunto de equações :
Eliminar : " (11) ".
página 65 - linha 6:
incluir: " planos de recorte ou ", antes de " clipping planes ".
página 66 - entre a primeira e segunda frase da seção 2.10.1 incluir:
Para essa e cada uma das operações com matrizes seguintes, tem-se dois comandos, um que usa tipo float e outro que usa tipo double. Assim, os nomes das funções têm um sufixo 'f' para floats (glTranslatef) ou 'd' para doubles (glTranslated). Dessa forma, o TYPE pode ser 'float' ou 'double', mudando-se a letra final do nome do comando.
página 67 - o primeiro parágrafo tem uma série de erros, a forma correta deveria ser:
O OpenGL mantém três matrizes, duas matrizes de transformação: ModelView e Projection; e uma matriz de texturas (que como veremos no capÃtulo 7 possibilita manipular coordenadas). A ModelView concatena a matriz que representa o ponto de vista com a matriz de "modelagem" (translação, rotação e escala). Para converter um ponto do SRU (seção 2.4.1) para a janela do dispositivo,SRD, existe ainda uma outra transformação que é definida pela chamada transformação de Viewport, que é definida através do comando glViewPort (x, y, largura, altura) que recebe como parâmetros a posição (do canto esquerdo inferior: x , y , em coordenadas de janela) e suas dimensões (largura, altura).
página 67 - o segundo parágrafo fica melhor se for:
O comando glMatrixMode éé usado para selecionar qual é a matriz (modelView, projection ou texture) que será alterada pelos comandos de manipulação de matrizes. O comando deve ser usado toda vez que se desejar alterar a matriz que está sendo manipulada no momento, pois somente uma pode ser manipulada de cada vez.página 67 - no quarto parágrafo, a primeira frase melhor se for:
"As transformações geométricas aplicadas usando comandos OpenGL do tipo glTranslate, glRotate e glScale sempre afetam a matriz atual, seja ela ModelView, Projection ou Texture.página 67 - no quarto parágrafo , na segunda frase cortar a palavra : "MODELVIEW"
página 67 - no quinto parágrafo , no fim da frase trocar: "é criada a seguinte matriz:" por "tem-se o mesmo efeito de criar a matriz do fim da seção 2.6:
página 67 - no sexto parágrafo , na segunda frase trocar: "é a multiplicação" por "é o equivalente a multiplicação".
Nota: As matrizes usadas no OpenGL são na verdade as transpostas destas. Todos os vértices no OpenGL são considerados vetores coluna, ou seja são pós-multiplicados pela matriz: |v'| = [ M ] | v |
Nota: Para armazenar temporariamente as transformações de matrizes já calculadas, podem ser usadas as pilhas de matrizes do OpenGL (que foram criadas para isso). O OpenGL mantém uma pilha para cada tipo de matrix (Projection, ModelView e Texture).
Os comandos glTranslate*, glRotate* e glScale* também multiplicam a matriz atual pela matriz por eles gerada . (onde * pode ser f ou d )
O trecho que segue foi escrito por Luiz Valente e exemplifica muito bem as hierarquias:
Em OpenGL, para representar hierarquias é comum usar a pilha. O uso da pilha é feito justamente para evitar coisas como "multiplicar pela matriz inversa" para reverter a um estado anterior na hierarquia. O principal motivo para não se fazer isso é que calcular uma matriz inversa é um processo relativamente custoso e a multiplicação de matrizes também. Se isso puder ser evitado simplesmente restaurando um estado anterior, é muito melhor computacionalmente e evita erros.
Para exemplo de como fazer uma hierarquia, imagine um mini sistema solar (com o Sol, a Terra, a Lua e um Satélite artificial). O Sol está no centro do sistema, a Terra está a uma certa órbita em relação ao Sol e gira em torno dele, e a Lua e o Satélite, de maneira similar giram em torno da Terra.
A configuração inicial poderia ser: Sol em (0 , 0 , 0) , Terra em (100 , 0 , 0) Lua em (10 , 0 , 0) e Satélite em (0 , 10 , 0). Todos esses valores em relação aos eixos de seus pais. O Sol é pai da Terra. A Terra é pai da Lua e do Satélite. Neste exemplo, a Terra gira em torno do eixo Z de seu pai: o Sol. A Lua também gira em torno do eixo Z de seu pai: a Terra. O Satélite gira em torno de X de seu pai: a Terra. As linhas abaixo mostram como isso poderia ser feito.
//reiniciar o sistema de coordenadas para a origem (0 , 0 , 0)
glLoadIdentity ( );
//desenha Sol
desenhaSol ( );
// posiciona a Terra e a desenha
glRotatef ( angTerra , 0.0f , 0.0f , 1.0f );
glTranslatef (100.0f , 0.0f , 0.0f );
desenhaTerra ( );
// agora,os filhos serão desenhados.Deve-se salvar a posição
// atual da Terra,para o posicionamento dos filhos seja correto
glPushMatrix ( );
// posiciona Lua e a desenha
glRotatef ( angLua, 0.0f , 0.0f , 1.0f );
glTranslatef ( 10.0f , 0.0f , 0.0f );
desenhaLua ( );
// agora,é necessário desenhar o satélite. Como o posicionamento do satélite
// é definido em relação à Terra, é preciso restaurar a posição dela
glPopMatrix ( );
// posiciona o satélite e o desenha
glRotatef ( angSat , 1.0f , 0.0f , 0.0f );
glTranslatef ( 0.0f , 10.0f , 0.0f );
desenhaSatelite ( );
"Caution : If you're programming in C and you declare a matrix as m [ 4 ][ 4 ],then the element m [ i ][ j ] is in the i th column and j th row of the OpenGL transformation matrix. This is the reverse of the standard C convention in which m [ i ][ j ] is in row i and column j. To avoid confusion , you should declare your matrices as m [ 16 ] . "
// selecionar matriz de projeção
glMatrixMode (GL_PROJECTION);
// carregar a minha projeção
glLoadMatrix (mprojecao);
Nota: "curvatura" é a relação entre a derivada do ângulo formado por duas tangentes a uma curva e o comprimento do arco formado por esses dois ângulos.
.. "são representáveis em todos os ....", o correto é "são representáveis por funções em todos os ...." .
Na equação da hipérbole implicita trocar : " + " por : " - " .
No gráfico trocar : "R1" e "R2" por : "T1" e "T2" . Linhas tracejadas deveriam terminar o gráfico como na figura 3.9 (veja baixo).
.. " de a curva em t = 0 ser o vetor " ... trocar por ... " de a curva em t = 0 ter como tangente o vetor "... .
.. "[ ]x= [ ] Cx = H -1Cx ", isso é faltou o "x" subscrito no primeiro vetor .
O indice final é um " i " e não " 1 ". Assim a equação: fica:
... " binomiais. Essas ".... trocar para : ..." binomiais. O sÃmbolo ! indica fatorial. Essas ".... , isso é faltou a frase: " O sÃmbolo ! indica fatorial. "
" A curva está contida no fecho convexo do polÃgono. " trocar para : " A curva de Bézier está contida no fecho convexo do polÃgono de definição (como já comentado). " , isso é faltou : " Bézier " e " de definição (como já comentado). "
.. " já mencionado nas seções anteriores, não "... trocar para : " já mencionado na seção anterior, não " .
.. " representa as funções de"... trocar para : "representa funções de "....
.. "o caso do próximo desenvolvimento (Seção 3.1.8.4)."... trocar para: "o caso do desenvolvimento da Seção 3.1.8.4."
A seta ao lado de " k = 2 " deve tocar o trecho reto que liga os pontos finais."
Trocar: ", e foi" por: "sendo". A frase do texto fica: "Seu uso inicial era no projeto de curvas e superfÃcies sendo recentemente usada em várias outras aplicações".
[Watt, Policarpo, 1988] : o correto é [Watt, Policarpo, 1998], isto é o livro citado é de 1998 .
Os parágrafos que vão de :"A função polinomial das curvas....." até o final da seção (na página seguinte) , estão fora de ordem , se referiam a uma versão anterios do texto de curvas e não superfÃcies, já foram incluidos nos lugares apropriados nas seção de curva, e devem ser desconsiderados ( ou seja : apagados ! ) .
"Agora que ajustamos as propriedades, basta desenhar a curva através da
função:
gluNurbsSurface ( . . . . . . . . );"
deve ser trocado para:
"Agora que ajustamos as propriedades, podemos desenhar a curva através das
funções:
gluBeginSurface (pNurb);
gluNurbsSurface ( . . . . . . . . );
gluEndSurface (pNurb);"
O texto : " ...ou usando a terminologia da Seção 2.4, o sistema de referência do objeto..." fica melhor se : "...ou usando a terminologia da Seção 2.4, a origem do sistema de referência do objeto..."
" ...aplicação e apresentar respostas rápidas; " , trocar para : " ...aplicação e apresentarem respostas rápidas; " .
- As formas usadas na tesselation ou tiling não precisam ser idênticas, por exemplo sempre o mesmo quadrilátero ou triângulo.
Site oficial de M.C. Escher : www.mcescher.com
" ...automaticamente implementada por funções de OpenGL ou Java 3D. ", trocar para " ...automaticamente implementada por funções de OpenGL (veja seção 4.8.4). "
Também pode-se entender a esfera como formada por uma tesseletion de diversas faces , com arestas e vértices dependentes da forma destas faces, como na figura 4.24 .
Trocar : " se interferem " por : " colidem ".
" Cheio - Vazio, caso o objeto ocupe parte do cubo : " , trocar para : " Cheio - Vazio ou Parcial, caso o objeto ocupe parte do cubo : "
Essa representação tem as mesmas vantagens e desvantagens da Enumeração Espacial e das Octrees, além de permitir uma representação com menor uso de área de armazenamento que a Enumeração Espacial.
A numeração das quatro primeiras posições esta errada o correto é: 000 001 002 003 ...
Assumindo que as normais estão no sentido indicado pelas setas na Figura 4.12, o filho da esquerda está na direção da normal (dentro do objeto) , enquanto que o da direita no sentido oposto à normal (fora do objeto).
páginas 143 e 144 - na tabela trocar " Set " por " combinacão de : " .
A figura que segue ajuda a usar essa tabela :
página 145 - na referência a obra :
- [Watt e Policarpo, 1998].página 149 - no final da página :
" Este modificador realiza a extrusão de objetos 2D para criar objetos 3D ( Seção 4.5.6.1 ) e aplica um... ". Isto é, incluir : ( Seção 4.5.6.1 ) .
Trocar "espessura" para "larguras ".
Na realidade o valor do ponto padrão ( 1 ) é o único que tem-se realmente garantia.
Os demais podem ser convertidos para os mais próximos que a implementação e o hardware puderem conseguir. Veja o texto da documentação transcrito abaixo:
"If an unsupported size is requested, the nearest supported size is used. Only size 1.0 is
guaranteed to be supported; others depend on the implementation."
"As linhas podem ser apresentados tracejadas, pontilhadas, com setas e em outras variações. São desenhados por: GL_LINES . Para desenhar uma linha é necessário usar:
glBegin ( GL_LINES );
//pares de vértices fornecidos
glEnd ( );
O OpenGL usará cada par de vértices para desenha uma linha. Se for especificado um número
Ãmpar de vértices, o último será ignorado."
"Os polÃgonos podem ser apresentados por pontos, pelas linhas do contorno, com o interior preenchido por uma cor ou com hachurias. São desenhados por: GL_POLYGON. Para desenha-los é necessário usar :
glBegin ( GL_POLYGON );
//vértices fornecidos
glEnd ( );
O polÃgono deve ser convexo e o número mÃnimo de vértice que pode ser especificado é 3."
Nas primitivas acima a ordem usada na especificação dos vértices é importante. Ela é usada para definir as faces que estão "para a frente" e "para trás" no tratamento da visibilidade dos triângulos, quadriláteros e polÃgonos desenhados.
Trocar "quadrado" para "quadrilátero".
"A biblioteca GLUT do OpenGL possui ...."
As formas acima pertencem a biblioteca GLUT. Para desenha em wireframe usando apenas o OpenGL é necessário usar o seguinte comando : glPolygonMode (GL_FRONT,GL_LINE) ; . Esse comando indica que as faces que estão "para frente" devem ser desenhadas em wireframe. Para desenha com sombreamento usa-se : glPolygonMode (GL_FRONT,GL_FILL); O comando aceita outros valores para o primeiro parâmetro como GL_BACK (lista de faces que estão "viradas pa a trás" ) e GL_FRONT_AND_BACK . Para o segundo parâmetro pode ser usado também: GL_LINE ( wireframe ) , GL_FILL ( preenchido ) e GL_POINT ( só os vértices serão desenhados ) .
[Maor, 1988] , ano está errado, o correto é: [Maor, 1987] .
"Star Trek II"
"Engine Fly3D [Watt e Policarpo, 1998] " - O termo "engine" foi traduzido aqui como "engrenagem". Em alguns outros trabalhos relacionados, aqui no Brasil, está sendo usado o termo "motor" ou "máquina" como tradução para "engine", mas não existe ainda um consenso a respeito do melhor termo.
"Essa distribuição caracteriza-se pela sua massa especÃfica em cada ponto dm/dv." A letra "r" estava sobrando na frase!
página 172 - segundo parágrafo:
O "e" na equação deveria ser subscrito: "Fe = dP / dt = 0.
página 173 - o subtitulo 4.12.10 - deveria ser : "Conceituando Sistemas de Partículas" - ao invés de: "Conceituando de Sistemas de Partículas"
página 174 - oitavo parágrafo :
" Um sistema de partículas não é uma entidade estática,..." (faltou o " s " em " sistema ").página 175 - A frase : " A cor e o brilho são dos atributos mais importantes, " deveria ser : " A cor e o brilho são os atributos mais importantes, "
página 176
penúltimo parágrafo :
" propriedade que também elimina a preocupação com as superficies escondidas " .
último parágrafo :
o texto : "... e uma diminuição na velocidade de render (frame rate). Grande parte .... e o consequente lento gerenciamento de memória." ficaria melhor como : "... e uma redução na taxa de criação de quadros em uma animação. Grande parte .... e a consequente lenta gerência de memória ".
Nota: "Gerenciamento" é uma palavra que por enquanto não existe na língua portuguesa . Assim é melhor trocá-la por "gestão" ou "gerência".
página 177
O texto : "A cor é vista quando impressiona a retina" fica melhor se for trocado "vista" por "percebida" : "A cor é percebida quando impressiona a retinado" .
O texto : "Eles são sensÃveis ao alto nÃvel de iluminação ...." fica melhor se for trocado "Eles são sensÃveis a altos nÃveis de iluminação ...." .
O esquema mostrado corresponde a uma visão em corte, onde se percebe melhor o porque do nome das células: bastonetes e cones.
Se vistas de frente as células se distinguem principalmente pelo seu tamanho, como mostrado na figura abaixo.
O frase: "A adaptação gradativa do olho à escuridão deve-se à lenta passagem do pigmento escuro para o fundo da retina." , fica melhor como: "A adaptação gradativa do olho à escuridão deve-se à lenta reação do pigmento responsável pela visão em ambientes mais escuros (rodopsina)."
Por limitações de espaço e custos poucas figuras foram reproduzidas como as originais em cores. Especialmente esta figura fica bem mais fácil de ser entendida se for colorida. Assim segue a figura original.
O texto : "de Thomas Young, (1773-1829) a retina...." fica melhor se for trocado a posição da "vÃrgula" : "de Thomas Young (1773-1829), a retina..." .
Nota: a Figura 7.15 ilustra o significado comcomprimento de onda.
Por limitações de espaço e custos poucas figuras foram reproduzidas como as originais em cores. Esta figura é mais fácilmente entendida se for vista colorida. .
Esta figura também fica mais fácil de ser entendida se for vista colorida. Assim segue a figura original. .
O texto : "Outras cores só podem ser produzidas por luzes com vários comprimentos de onda, como roxo ou rosa" fica melhor se for trocado "roxo ou" : por "cinza e" : "Outras cores só podem ser produzidas por luzes com vários comprimentos de onda, como cinza e rosa" .
O texto : "A matiz corresponde ao ponto do eixo horizontal onde ocorre a intensidade máxima ..." fica melhor se for trocado "A" : por "O" e incluido "m": "O matiz corresponde ao ponto "m" do eixo horizontal onde ocorre a intensidade máxima ...." .
A figura caracteriza as faixas de radiações em freqüência, Hertz, e a região visÃvel em comprimento de onda, nm. Todas poderiam ser representadas em comprimento de onda, L, ou freqüência, f, pois estas caracterÃsticas se relacionam pela expressão: L= v / f , onde v é a velocidade da luz no meio considerado (por exemplo no vácuo a velocidade da luz é aproximadamente 300x 10 6 m/s .
A forma em freqüência tem a vantagem de caracterizar facilmente os limites das luzes visÃveis na luz vermelha (devido as freqüências infravermelhas) e violeta (devido aos ultravioletas). Na figura abaixo um gráfico semelhante é mostrado usando apenas comprimentos de onda.
Nota sobre o segundo parágrafo da página:
O olho pode se adaptar a variações de luminosidade de um milhão para um. Mas nossa natureza não conseguiria fazer isso com apenas um tipo de célula. Assim, há células adaptadas a visão com pouca luz, os bastonetes ou "rods", e células que vêem com muita intensidade luminosa , ou células de visão em cores, os cones. Uma interessante conseqüência disso é a percepção distinta de mesmas cores de acordo com a intensidade luminosa. Por exemplo pegando dois pedaço de papel um vermelho e outro azul, e os observando em um local de muita luz (na luz do Sol) e depois em um local de pouquissima luz (um quarto quase completamente escuro, mas suficiente para ver cores, pois com muito baixa intensiade nós não veremos cores, já que as células cones não serão sensibilizadas), a sensação de qual dessas cores é mais intensa muda. Com muita luz seus olhos acharão que é o vermelho, no escuro seus olhos acharão que é o azul.
Você já deve ter observado que um mesmo objeto muda cor de acordo com a iluminação, embora o objeto seja o mesmo e nada nele tenha sido mudando além da condição de iluminação. As sensações de cores das ilustrações de uma revista, por exemplo. Esse fenômeno é chamado efeito Purkinje.
A retina é bastante não uniforme. Em regiões diferentes da retina há diferentes estruturas e diferentes distribuições das células bastonetes (ou "rods") e cones". Na verdade não existe bastonetes sensÃveis na região central da retina chamada fóvea. Essa região é chamada de região de visão colorida ou das células cones. São essas células que segundo a teoria de visão colorida mais simples (Teoria de Young e Helmholtz) produziriam os 3 tipos de fotopigmentos pelos quais a luz seria percebida como cor.
A área total do que enxergamos com os dois olhos é chamada de "campo visual". Mas em cada olho exitem campos visuais separados para os vários tipos de bastones e cones. Devido as disposições diferentes dessas células na retina. O campo visual dos bastonetes é muito maior, mas fraco no centro. O campo visual dos cones é bem menor e cada um deles tem campo visual diferente. O dos cones verdes é o menor de todos, porque essas células estão muito juntas no centro da retina.
Quando nosso olho quer ver muito nitidamente uma cor, procura fazer com que os raios luminoso originários dela incidam na região de melhor foco dessa cor especÃfica. à neste sentido de foco que o segundo parágrafo da página 187 se refere, ou seja a variação da curvatura das lentes ( Figura 5.2 ) que pode ser observada ao se focar um painel colorido por um mosaico de cores , por exemplo, mas com todos os pontos há mesma distância do observador, de modo que o foco (ou a adaptação das lentes) não mude pela distância e sim pelas cores presentes .
Primeiro parágrafo da Seção 5.3 :
O texto : "a luz é uma das formas em que a energia se manifesta" fica melhor se for trocado "energia " : por "radiação" : "a luz é uma das formas em que a radiação se manifesta" .
Nota sobre o terceiro parágrafo da Seção 5.3 :
O espectro eletromagnético não tem limites superior e inferior bem definidos. As regiões indicadas na Figura 5.7 apresentam intervalos de freqüência dentro das quais existe um conjunto comum de técnicas, equipamentos de medição, geração e detecção experimentais. à por essa forma de classificação que as radiações infravermelhas e ultravioletas são consideradas luz.
O texto : "Ãtica FÃsica ou Ondulatória" fica melhor se for: "Ãtica ou FÃsica Ondulatória" .
No texto tirar o acento de : "nanometros" . A sÃlaba tônica é "me" . O prefixo grego "nano" significa que a unidade posterior é multiplicada por 10-9 . O sÃmbolo de "nano" é um "n" anteposto à unidade, como na Figura 5.7, com "m" (de "metros"). "Nannos" ou "nanos" em grego significa "muito pequeno" ou "anão".
Na figura: o limite inferior das cores "Violeta" e "Azul" estão errados O correto é 400 e 450, respectivamnete. Veja a forma correta abaixo:
Espectro Visível
Violeta |
Azul |
Ciano |
Verde |
Amarelo |
Laranja |
Vermelho |
400-450 |
450-480 |
480-490 |
490-560 |
580-600 |
580-600 |
600-700 |
Comprimentos de onda em nanometros
Nota:
Os limites do espectro visÃvel e das faixas de cores não são bem definidos. Esses limites dependem da sensibilidade dos órgãos visuais. Repare que as curvas de sensibilidade se aproximam assintoticamente do eixo horizontal nos limites, tanto para os maiores quanto para os menores comprimentos de onda. Os valores limites estimados são dependentes da sensibilidade abaixo da qual se considera que não há observação da luz. Por exemplo se for considerado como limite de visão a sensibilidade cair a 1% do valor máximo (ou 0.01 se a máxima for normalizada) , a faixa considerada é de 430 a 690 nanometros. Mas esses limites dependem também da intensidade luminosa. A vista pode detectar radiações além de 380 e 700 se elas forem suficientemente intensas. |
Nota sobre o segundo parágrafo da Seção 5.4 :
A visão colorida depende em parte dos fenômenos fÃsicos relacionados a luz, mas especialmente dos olhos e do que ocorre além deles no célebro. A FÃsica caracteriza a luz que entra nos olhos, mas a sensação de visão é resultado de processos fotoquÃmicos-neurais e respostas pisicológicas.
O fotopigmento principalmente detectado na retina é chamado de púrpura visual. Em 1877 foi descoberto que este nada tem a ver com a visão colorida, sendo produzido pelas células rods. Mas a existência dos fotopigmentos coloridos nunca tinha sido provada até 1958, quando Rushton [ a ] conseguiu detectar dois deles.
A Teoria de Land e quase todas as teorias atuais concordam que a mistura de cores indica a existência de 3 pigmentos nos cones, e que a absorção espectral desses 3 pigmentos é que fundamentalmente causa a sensação de cor. O fato de ter-se 3 pigmentos não significa que deve-se ter três tipos de sensações individuais diferentes somadas simplesmente. Essas sensações se combinam de maneira bem mais complexa. A Teoria Oponente da Visão Colorida [ b ] é a mais aceita atualmente. O livro discute essa teoria na seção 5.14
(x , y, z) devem ser em maiúsculas: {X, Y, Z).
A frase fica melhor se re-escrita como:
O CIE também dispõem de diagramas que facilitam a especificação de cores como o que aparece na Figura 5.8.
O tÃtulo fica melhor como: Diagrama cromático CIE.
A legenda do " Y " e do " O " está invertida: Y - Amarelo, O - Alaranjado. E faltam os números do limite do gráfico, veja abaixo a figura correta.
Repare que maiúsculas e minúsculas são usadas nos sÃmbolos para indicar que na combinação de cores uma é predominante.
Figuras equivalentes em cores seriam como as abaixo:
A saturação da cor, considerando a linha que une o ponto que representa a cor à cor branca e vai até a borda do gráfico, é a razão entre a distância do ponto à cor branca e a distância entre a borda e a cor branca .
O tÃtulo fica melhor como: Processo aditivo de combinação de cores.
O tÃtulo fica melhor como: Processo subtrativo de combinação de cores.
O tÃtulo fica melhor como: Processo de obtenção das cores secundárias por subtração.
Fica melhor se a palavra "descoberto" for trocada por: "desenvolvido".
Fica melhor se a palavra "conhecida" for trocada por: "oriunda".
Fica melhor se a palavra "espaço" for trocada por: "modelo": Os sistemas de cor de Munsell e Ostwald representam as primeiras tentativas de organizar a percepção da cor em um modelo .
Fica melhor se a frase for completada com "do HSV" : "...mais ou menos na mesma época do HSV ".
Fica melhor se na frase for trocado "uma cor" por: "cada cor primária" . A frase então fica : "Ao se trocar de equipamento, é possÃvel obter resultados indesajados, uma vez que cada cor primária não é exatamente a mesma em diferentes dispositivos".
A frase: "O modelo usa para representação um sistema cartesiano, onde o amarelo e o azul são diametralmente opostos em um eixo, e o verde e o vermelho opostos em outro eixo, formando um plano, com o eixo branco e preto perpenpicular a esse plano.", pode ser melhor escrito como: "O modelo usa para representação um sistema cartesiano, onde o amarelo e o azul estão diametralmente opostos em um eixo, o verde e o vermelho estão diametralmente opostos em outro eixo. Estes eixos formando um plano, no qual eixo branco e preto se posiciona perpenpicularmente."
Nota: Representação esquemática dos eixos OPP (descrita no primeiro parágrafo) pode ser vista na figura abaixo.
A teoria de cores oponentes considera que os sinais provindos dos 3 tipos de cones (R,G,B) são combinados num segundo estágio do processamento neural da visão da cor, para alimentar 3 canais de cores oponentes, que são: (1) um canal branco-preto (BW) ou acromático; (2) um canal vermelho-verde (RG) e (3) um canal amarelo-azul (YB). As combinações dos sinais provindos dos cones para os canais do segundo estágio podem ser ilustrados como:
O canal azul-amarelo é excitado pelos sinais vindos dos cones B e inibido por uma combinação de sinais vindos dos cones R e G.
Fica melhor se a frase final for alterada para: "a Figura 5.17 ilustra a forma tÃpica dessas curvas".
A Figura 5.17 ilustra o processo de cancelamento de cores da visão comentado nos ultimos parágrafos da seção 5.14. Como no livro, por questões e custos, foi reproduzida em preto-e-branco segue abaixo a mesma curvas na forma original em cores.
A frase merece ser divida em duas: "Sendo RGB um espaço contÃnuo , em trabalhos computacionais pode ser amostrado em um grande número de valores discretos , imagens discretizadas em 256 nÃveis ...." , ficando: "Sendo RGB um espaço contÃnuo , em trabalhos computacionais pode ser amostrado em um grande número de valores discretos. Imagens discretizadas em 256 nÃveis ...."
A linearidade a que se referem as terceira e quarta frases deste parágrafo é quanto à transformação entre o espaço mencionado e o RGB.
Assim estas frases ficam mais claras se reescritas como: "Por exemplo as transformações do RGB para os espaços YIQ (padrão NTSC) , YUV (padrão PAL e SECAM), YCrCb (padrão JPEG e MPEG) e o de cores oponentes (OPP) são lineares. Já para os espaços CIE-LAB, CIE-LUV as transformações não são lineares".
A frase final está incorreta deve ser alterada para: "onde três coeficientes: x,y,z representam os pesos que aplicados as primárias XYZ descrevem qualquer cor, sempre com pesos positivos.".
Apenas uma nota sobre esta figura:
Todas as cores visÃveis são representadas em XYZ pela figura sólida meio cônica que vai da origem à s extremidades do plano sombreado em forma de ferradura. A mesma figura em cores (como abaixo ou na capa do livro ou ainda na figura 15 das páginas em cores) permite uma melhor observação desta região do espaço.
Apenas incluir: NTSC:
"A conversão do sistema RGB, NTSC, para o sistema XYZ é obtida...".
Nota: Para o CIE as cores RGB são caracterizadas pelos comprimentos de onda de 700 nm (vermelho) , 546,1 nm (azul) e 435,8 nm (verde).
Para fazer a transformação usa-se o seguinte algoritmo, onde os valores RGB devem ser normalizados, isto é, devem estar entre um valor mínimo zero e um máximo de um:
=>
//Primeiro calcule os valores máximos e mínimos:
max = máximo(R,G,B), min = mínimo(R,G,B)
//depois os valores de saturação e brilho:
V = max , S = (max - min) / max
//ai passe a calcular as cores ou H:
if S = 0 /* H passa a ser irrelevante, a cor no HSV será : (0,0,V)*/
else
R1 = (R-min) / (max-min)
G1 = (G-min) / (max-min)
B1 = (B-min) / (max-min)
if R1 = max , H = G1 - B1
else if G1 = max , H = 2 + B1 - R1
else if B1 = max , H = 4 + R1 - G1
//(converte-se H em graus)
H = H*60
//usa-se H variando de 0 a 360° , S e V variando entre 0 e 1
if H < 0 , H=H+360
// a cor no HSV será : (H,S,V)*/
Apenas uma nota:
Como os demais capÃtulos esse tem sua seção de "recreio e curiosidades" ou de relaxamento em meio a "tantos tecnismos", que no caso é esta seção. O uso das cores e especialmente suas associações descritas das páginas 204 a 208 foram obtidas de fontes diversas, oriunda de diferentes aplicações e culturas. Deixamos para o leitor "filosofar" sobre o porque de algum itens aparecerem controversos e até mesmo antagônicos, como por exemplo:
- "A cor amarela está associada a: ....serenidade, ...risco, ... e loucura".
- "A cor verde está associada a:...esperaça,...segurança,... inexperiencia, ...fuga da realidade e má sorte."
- "A cor azul está associda a:... estabilidade, paz,... depressão, obcenidade,... conservadorismo."
Notas:
A função glColor em C e em todas as linguagens sensÃveis a maiúsculas e minúsculas (case sensitive) deve ser referida em minúsculas:
Assim o correto é
glColor4f( 1.0 , 1.0 , 0.0 , 0.75 ) ;
para a linha logo após o primeiro parágrafo da Seção 5.20.
O formato geral desta função é:
glColor x
t ( red , green , blue, alfa) ;
onde:
vermelho | glColor3ub(255, 0 , 0 ); |
verde | glColor3ub( 0 ,255, 0 ); |
azul | glColor3ub( 0 , 0 ,255); |
branco | glColor3ub(255,255,255); |
preto | glColor3ub( 0 , 0 , 0 ); |
Ãltima frase:
"Para habilitar o processamento desta quarta componente usamos:" , está trocada. Deve ser substituÃdo "habilitar", por "desabilitar", ou seja a frase passa para: "Para desabilitar o processamento desta quarta componente usamos:"
glDisable(GL_BEND);
Nota:
A função glBlenFunc ( ) ; tem como parâmetros as cores originais e finais. Por "default" esses argumentos terão os valores GL_ONE e Gl_ZERO respectivamente. A "mistura" será aplicada a cor original definida pela função glColor e a cor de destino no "buffer de cor". O resultado da mistura gera uma nova cor que será visivel na tela.
Os argumentos possÃveis para o primeiro parâmetro desta função estão mostrados na tabela abaixo.
parâmetro | efeito |
GL_ZERO | cor original=(0,0,0,0) |
GL_ONE | cor origem é usada como está |
GL_DST_COLOR | cor origem é multiplicada pela cor do pixel destino |
GL_ONE_MINUS_DST_COLOR | cor original é multiplicada por (1,1,1,1 - cor do destino) |
GL_SRC_ALPHA | cor origem é multiplicada pelo alfa da cor original |
GL_ONE_MINUS_SRC_ALPHA | cor origem é multiplicada por (1-alpha do pixel origem) |
GL_DST_ALPHA | cor origem é multiplicada pelo alfa da cor do pixel destino (geralmente não está disponÃvel no OpenGl para Microsoft) |
GL_ONE_MINUS_DST_ALPHA | cor origem é multiplicada por (1-alfa da cor do destino) (geralmente não está disponÃvel no OpenGl para Microsoft) |
GL_SRC_ALPHA_SATURATE | a cor origem é multiplicada pelo minimo da origem e (1- alfa da cor do pixel destino) (geralmente não está disponÃvel no OpenGl para Microsoft) |
parâmetro | efeito |
GL_ZERO | cor de destino=(0,0,0,0) |
GL_ONE | cor destino é usada como está |
GL_SRC_COLOR | cor de destino é multiplicada pela cor do pixel de origem |
GL_ONE_MINUS_SRC_COLOR | cor destino é multiplicada por (1,1,1,1 - cor origem) |
GL_SRC_ALPHA | cor destino é multiplicada pelo alfa da cor original |
GL_ONE_MINUS_SRC_ALPHA | cor destino é multiplicada por (1-alpha do pixel origem) |
GL_DST_ALPHA | cor destino é multiplicada pelo alfa da cor do pixel destino (geralmente não está disponÃvel no OpenGl para Microsoft) |
GL_ONE_MINUS_DST_ALPHA | cor destino é multiplicada por (1-alfa da cor do destino) (geralmente não está disponÃvel no OpenGl para Microsoft) |
GL_SRC_ALPHA_SATURATE | a cor destino é multiplicada pelo minimo da origem e (1- alfa da cor do pixel destino) (geralmente não está disponÃvel no OpenGl para Microsoft) |
A melhor maneira de entender a diferença entre esses parâmetros e variá-los um de cada vez em um programa simples, como o que será descrito abaixo.
Nota:
Embora o exemplo não esteja errado, fica mais simples entender como a função de mistura e seus parâmetro influenciam seu programa através de um exemplo mais simples, onde diversas variações podem ser experimentadas.
Assim sugerimos antes de trocar o exemplo das paginas 211 e 212 pelas linhas que seguem, onde um quadrado sólido e outro transparentes são desenhados.
Retirar a palavra "cientista".
Trocar a ordem dos parágrafos ". Coletar todas as informações ... " e ". Adicionar marcadores..." , pois fica mais lógico primeiro adicionar os marcadores e depois coletar as informações.
Para não parecer contraditório em relação a Seção 7.1.3 essa frase ficaria melhor se fosse incluido "ou bem acabadas muitas vezes" entre as palavras "realÃstas" e "é" . A frase ficaria:
"Criar imagens sintéticas realÃsticas ou bem acabadas muitas vezes é o objetivo final da computação gráfica" .
Trocar: "(PLS ou Labs Surgical Planning)" por: "(SPL - Surgical Planning Labs)".
Foi omitido no algoritmo a checagem dos casos especiais da linha ser vertical, horizontal ou estar a 45 graus. Isso é feito a partir das diferenças entre as coordenadas dos pontos 1 e 2.
A cada iteração e = e + (y2-y1)/(x2-x1). (Isto é x fica no denominador e y no numerador, este texto está trocado).
última letra da última linha do primeiro parágrafo:
Deve ser "y" e não "x".
A forma correta do parágrafo é:A cada iteração, e = e + D y / D x. Quando o "erro" assume um valor positivo, é necessário reinicializá-lo, subtraindo "1" do seu valor. A Figura 7.5 serve como base de entendimento do algoritmo. O algoritmo de Bresenham pode ser melhorado se a divisão por D x for eliminada, passando a utilizar somente aritmética inteira. O novo erro será agora: e = 2 e D y.
Incluir "da normal" entre "ângulo" e "em um dos lados", a frase fica: "o teste de visibilidade através do ângulo da normal em um dos lados de um cubo".
Trocar: "real-time rendering" por "acabamento de cenas em tempo-real" .
Trocar: " . " por " . " , isto é o sÃmbolo de "produto escalar". Esse parágrafo fica:
Da álgebra linear, sabemos que o produto escalar, " . " , (Seção 2.3) relaciona dois vetores e o ângulo entre eles, pela seguinte equação:
Tirar o " . " , isto é o sÃmbolo de "produto escalar", antes do " ; " . De modo que a frase fica:
" onde: | n | corresponde a magnitude ou " norma " do vetor normal à face, n ; " .
Deixar entre " , " o texto: " definido por u e v ", isto é , fica melhor se a última frase do parágrafo for:
" Resumindo, uma superfÃcie será considerada possÃvelmente visÃvel quando o produto interno do vetor l entre ela e o observador, e a normal do seu plano , definido por u e v , for positivo " .
Tocar as posições de palavras "visÃvel " e " invisÃvel " . O texto fica: " Se n . l < 0 , então o plano é invisÃvel ao observador. Se n . l > 0 , então o plano é visÃvel ao observador."
O texto, de 17 linhas, que vai de "Assim, o algoritmo ..... " até "..... naquele ponto de vista." é praticamente idêntico o do fim da página 261, e fica melhor se eliminado.
Os "1s" em z1 e x1 do texto deveriam ser Ãndices como na Figura 7.14. A forma correta desta última frase da página seria:
"Assim, se já avaliamos z em (x,y) , o próximo valor de z1, para o mesmo y, neste plano Ax + By + Cz = D = 0, corresponde a (x1 = x + Dx , y), será: "
.
O "1" em z1 deveria ser Ãndices como na Figura 7.14, e na linha logo abaixo.
Os "p" , "a" e "b" em "z" deveriam ser Ãndices subscritos ao "z" como na legenda desta figura 7.14.
A cota que marca o comprimento de onda deve ficar entre exatamente nas mesmas posições em duas ondas seguidas, por exemplo no topo das duas ondas, como mostrado na figura abaixo.
Embora nos textos mais antigos apareça a nomenclatura "azul e anil" para se referir ao azul mais claro e anil para o mais escuro, hoje ambos são denominados em linguagem mais técnica de cores como "ciano e azul". Assim , ainda que o texto esteja correto, para ficar mais coerente com o resto da obra, melhor usar a denominação, "ciano e azul". A ordem das cores então fica:
... "amarelo, verde, ciano, azul e violeta " .
Trocar : " ( 250, 255, 175 ) " por: " ( 255, 255, 175 ) " .
Faltou um " i " na palavra "identificada" .
"... produto interno dos ...", fica melhor como: ".. produto escalar ou interno dos...".
Apenas uma nota :
O expoente "n" , de brilho da superfÃcie ou de reflexão especular, faz o brilho parecer mais concentrado a medida que seu valor aumenta.
Faltou o sub-Ãndice " j " no sÃmbolo de "urj" e um "e" na palavra "fonte".
Assim está linha deve ser :
"urj = vetor unitário na direção de reflexão da j-ésima fonte de luz;"
Trocar " do " por: " de ". Assim a definição fica :
"n = expoente de polimento da superfÃcie;"
Trocar a ordem do adjetivo "máximo" para depois do substantivo : "brilho especular". Assim a frase fica :
"o observador verá o brilho especular máximo" .
O texto: " A Lei da Reflexão já era empregada por Euclides. A Lei da Refração foi descoberta experimentalmente em ... " por : " Embora a Lei da Reflexão já fosse empregada por Euclides, a Lei da Refração foi descoberta experimentalmente em ... ".
Esta seção ficaria em uma ordem mais adequada se fosse anterior a seção "7.3.6 Sombras" e ainda na seção 7.3.5 , que trata de sombreamento. Seu melhor posicionamento seria como uma nova seção "7.3.5.4 Sombreamento Anisotrópico" .
página 351 - entre "Cinética" e "Cisalhamento" faltou incluir: Círculo, 78.
página 351 - entre "Cisalhamento" e "Colisão" faltou incluir: Clipping, 65, 250.
página 352 :
página 353 :
em "Recortes" a página 248 deve ser trocada para: 250, 259-272.
entre "Resolução" e "Reticulado" faltou incluir: Retas, 255-258.
em "Satellite, 5" retirar um "l", e incluir "o acento" : "Satélite, 5"